web-dev-qa-db-fra.com

Comment puis-je envoyer une notification Firebase Cloud Messaging sans utiliser la console Firebase?

Je commence avec le nouveau service Google pour les notifications, Firebase Cloud Messaging.

Merci à ce code https://github.com/firebase/quickstart-Android/tree/master/messaging J'ai pu envoyer des notifications à partir de ma console utilisateur Firebase sur mon périphérique Android.

Existe-t-il une API ou un moyen d'envoyer une notification sans utiliser la console Firebase? Je veux dire, par exemple, une API PHP ou quelque chose du genre, pour créer des notifications directement à partir de mon propre serveur.

184
David Corral

Firebase Cloud Messaging possède une API côté serveur que vous pouvez appeler pour envoyer des messages. Voir https://firebase.google.com/docs/cloud-messaging/server .

L'envoi d'un message peut être aussi simple que d'utiliser curl pour appeler un point de terminaison HTTP. Voir https://firebase.google.com/docs/cloud-messaging/server#implementing-http-connection-server-protocol

curl -X POST --header "Authorization: key=<API_ACCESS_KEY>" \
    --Header "Content-Type: application/json" \
    https://fcm.googleapis.com/fcm/send \
    -d "{\"to\":\"<YOUR_DEVICE_ID_TOKEN>\",\"notification\":{\"body\":\"Yellow\"},\"priority\":10}"
187

Cela fonctionne avec CURL

function sendGCM($message, $id) {


    $url = 'https://fcm.googleapis.com/fcm/send';

    $fields = array (
            'registration_ids' => array (
                    $id
            ),
            'data' => array (
                    "message" => $message
            )
    );
    $fields = json_encode ( $fields );

    $headers = array (
            'Authorization: key=' . "YOUR_KEY_HERE",
            'Content-Type: application/json'
    );

    $ch = curl_init ();
    curl_setopt ( $ch, CURLOPT_URL, $url );
    curl_setopt ( $ch, CURLOPT_POST, true );
    curl_setopt ( $ch, CURLOPT_HTTPHEADER, $headers );
    curl_setopt ( $ch, CURLOPT_RETURNTRANSFER, true );
    curl_setopt ( $ch, CURLOPT_POSTFIELDS, $fields );

    $result = curl_exec ( $ch );
    echo $result;
    curl_close ( $ch );
}

?>

$message est votre message à envoyer à l'appareil

$id est le jeton d'enregistrement de périphérique

YOUR_KEY_HERE est votre clé API de serveur (ou votre clé API de serveur héritée)

45
Hamzah Malik

Utilisez une api de service.

URL: https://fcm.googleapis.com/fcm/send

Type de méthode: POST

En-têtes:

Content-Type: application/json
Authorization: key=your api key

Corps/charge utile:

{ "notification": {
    "title": "Your Title",
    "text": "Your Text",
     "click_action": "OPEN_ACTIVITY_1" // should match to your intent filter
  },
    "data": {
    "keyname": "any value " //you can get this data as extras in your activity and this data is optional
    },
  "to" : "to_id(firebase refreshedToken)"
} 

Et avec cela dans votre application, vous pouvez ajouter le code ci-dessous dans votre activité pour être appelé:

<intent-filter>
    <action Android:name="OPEN_ACTIVITY_1" />
    <category Android:name="Android.intent.category.DEFAULT" />
</intent-filter>

Vérifiez également la réponse sur Firebase onMessageReceived non appelé lorsque l'application est en arrière-plan

40
Ankit Adlakha

Exemples utilisant curl

Envoyer des messages à des appareils spécifiques

Pour envoyer des messages à des périphériques spécifiques, définissez le sur le jeton d'enregistrement pour l'instance d'application spécifique.

curl -H "Content-type: application/json" -H "Authorization:key=<Your Api key>"  -X POST -d '{ "data": { "score": "5x1","time": "15:10"},"to" : "<registration token>"}' https://fcm.googleapis.com/fcm/send

Envoyer des messages à des sujets

ici le sujet est:/topics/foo-bar

curl -H "Content-type: application/json" -H "Authorization:key=<Your Api key>"  -X POST -d '{ "to": "/topics/foo-bar","data": { "message": "This is a Firebase Cloud Messaging Topic Message!"}}' https://fcm.googleapis.com/fcm/send

Envoyer des messages aux groupes d'appareils

L'envoi de messages à un groupe de périphériques est très similaire à l'envoi de messages à un périphérique individuel. Définissez le paramètre to sur la clé de notification unique pour le groupe de périphériques.

curl -H "Content-type: application/json" -H "Authorization:key=<Your Api key>"  -X POST -d '{"to": "<aUniqueKey>","data": {"hello": "This is a Firebase Cloud Messaging Device Group Message!"}}' https://fcm.googleapis.com/fcm/send

Exemples utilisant l'API de service

URL de l'API: https://fcm.googleapis.com/fcm/send

En-têtes

Content-type: application/json
Authorization:key=<Your Api key>

Méthode de requête: POST

Organe de requête

Messages à des appareils spécifiques

{
  "data": {
    "score": "5x1",
    "time": "15:10"
  },
  "to": "<registration token>"
}

Messages aux sujets

{
  "to": "/topics/foo-bar",
  "data": {
    "message": "This is a Firebase Cloud Messaging Topic Message!"
  }
}

Messages aux groupes de périphériques

{
  "to": "<aUniqueKey>",
  "data": {
    "hello": "This is a Firebase Cloud Messaging Device Group Message!"
  }
}
35
J.R

Comme Frank l'a mentionné, vous pouvez utiliser l'API HTTP FCM (Firebase Cloud Messaging) pour déclencher la notification Push à partir de votre propre back-end. Mais vous ne pourrez pas

  1. envoyer des notifications à un identifiant utilisateur Firebase (UID) et
  2. envoyer des notifications aux segments d'utilisateurs (cibler les propriétés et les événements comme vous pouvez le faire sur la console utilisateur).

Signification: vous devez stocker vous-même les ID d'enregistrement FCM/GCM (jetons Push) ou utiliser des rubriques FCM pour abonner des utilisateurs. Gardez également à l'esprit que FCM n'est pas une API pour les notifications Firebase, il s'agit d'une API de niveau inférieur sans planification ni analyse à taux d'ouverture. Les notifications Firebase reposent sur FCM.

23
Antoine Guénard

Vous devez d’abord obtenir un jeton de Android, puis vous pouvez appeler ce code php et vous pouvez même envoyer des données pour d’autres actions dans votre application.

 <?php

// Call .php?Action=M&t=title&m=message&r=token
$action=$_GET["Action"];


switch ($action) {
    Case "M":
         $r=$_GET["r"];
        $t=$_GET["t"];
        $m=$_GET["m"];

        $j=json_decode(notify($r, $t, $m));

        $succ=0;
        $fail=0;

        $succ=$j->{'success'};
        $fail=$j->{'failure'};

        print "Success: " . $succ . "<br>";
        print "Fail   : " . $fail . "<br>";

        break;


default:
        print json_encode ("Error: Function not defined ->" . $action);
}

function notify ($r, $t, $m)
    {
    // API access key from Google API's Console
        if (!defined('API_ACCESS_KEY')) define( 'API_ACCESS_KEY', 'Insert here' );
        $tokenarray = array($r);
        // prep the bundle
        $msg = array
        (
            'title'     => $t,
            'message'     => $m,
           'MyKey1'       => 'MyData1',
            'MyKey2'       => 'MyData2', 

        );
        $fields = array
        (
            'registration_ids'     => $tokenarray,
            'data'            => $msg
        );

        $headers = array
        (
            'Authorization: key=' . API_ACCESS_KEY,
            'Content-Type: application/json'
        );

        $ch = curl_init();
        curl_setopt( $ch,CURLOPT_URL, 'fcm.googleapis.com/fcm/send' );
        curl_setopt( $ch,CURLOPT_POST, true );
        curl_setopt( $ch,CURLOPT_HTTPHEADER, $headers );
        curl_setopt( $ch,CURLOPT_RETURNTRANSFER, true );
        curl_setopt( $ch,CURLOPT_SSL_VERIFYPEER, false );
        curl_setopt( $ch,CURLOPT_POSTFIELDS, json_encode( $fields ) );
        $result = curl_exec($ch );
        curl_close( $ch );
        return $result;
    }


?>
5
Sandi Horvat

Vous pouvez utiliser par exemple un script PHP pour Google Cloud Messaging (GCM). Firebase et sa console se trouvent juste au-dessus de GCM.

J'ai trouvé celui-ci sur github: https://Gist.github.com/prime31/5675017

Astuce: Ce script PHP a comme résultat notification Android .

Par conséquent: lisez cette réponse de Koot si vous souhaitez recevoir et afficher la notification dans Android.

3
P-Zenker

Un message de notification ou de données peut être envoyé au serveur de messagerie en nuage de base Firebase à l'aide du point de terminaison de l'API FCM HTTP v1. https://fcm.googleapis.com/v1/projects/zoftino-stores/messages:send .

Vous devez générer et télécharger la clé privée du compte de service à l'aide de la console Firebase et générer une clé d'accès à l'aide de la bibliothèque cliente Google Api. Utilisez n'importe quelle bibliothèque http pour poster un message au-dessus de l'extrémité. Le code ci-dessous indique que vous enregistrez un message en utilisant OkHTTP. Vous pouvez trouver le code complet côté serveur et côté client à l'adresse messagerie en nuage Firebase et envoi de messages à plusieurs clients à l'aide de l'exemple de rubrique fcm

Si un message client spécifique doit être envoyé, vous devez obtenir la clé d'enregistrement du client Firebase, voir exemple: envoi de messages propres au client ou au périphérique à un serveur FCM

String SCOPE = "https://www.googleapis.com/auth/firebase.messaging";
String FCM_ENDPOINT
     = "https://fcm.googleapis.com/v1/projects/zoftino-stores/messages:send";

GoogleCredential googleCredential = GoogleCredential
    .fromStream(new FileInputStream("firebase-private-key.json"))
    .createScoped(Arrays.asList(SCOPE));
googleCredential.refreshToken();
String token = googleCredential.getAccessToken();



final MediaType mediaType = MediaType.parse("application/json");

OkHttpClient httpClient = new OkHttpClient();

Request request = new Request.Builder()
    .url(FCM_ENDPOINT)
    .addHeader("Content-Type", "application/json; UTF-8")
    .addHeader("Authorization", "Bearer " + token)
    .post(RequestBody.create(mediaType, jsonMessage))
    .build();


Response response = httpClient.newCall(request).execute();
if (response.isSuccessful()) {
    log.info("Message sent to FCM server");
}
2
Arnav Rao

Vous pouvez également utiliser les fonctions cloud de Firebase, qui est pour moi le moyen le plus simple de mettre en œuvre vos notifications Push. firebase/functions-samples

0
Laurent Maquet

À l’aide de la console Firebase, vous pouvez envoyer un message à tous les utilisateurs en fonction du package d’application. Mais avec CURL ou PHP API, cela n’est pas possible.

Via l'API Vous pouvez envoyer une notification à un ID de périphérique spécifique ou à des utilisateurs abonnés à des sujets sélectionnés ou à des utilisateurs abonnés.

Get a view on following link. It will help you.
https://firebase.google.com/docs/cloud-messaging/send-message
0
PRATEEK BHARDWAJ

Si vous souhaitez envoyer des notifications Push de Android, consultez mon article de blog.

Envoyer des notifications push de 1 Android téléphone à un autre sans serveur.

l'envoi d'une notification Push n'est rien d'autre qu'une demande de publication à l'adresse https://fcm.googleapis.com/fcm/send

extrait de code utilisant volley:

    JSONObject json = new JSONObject();
 try {
 JSONObject userData=new JSONObject();
 userData.put("title","your title");
 userData.put("body","your body");

json.put("data",userData);
json.put("to", receiverFirebaseToken);
 }
 catch (JSONException e) {
 e.printStackTrace();
 }

JsonObjectRequest jsonObjectRequest = new JsonObjectRequest("https://fcm.googleapis.com/fcm/send", json, new Response.Listener<JSONObject>() {
 @Override
 public void onResponse(JSONObject response) {

Log.i("onResponse", "" + response.toString());
 }
 }, new Response.ErrorListener() {
 @Override
 public void onErrorResponse(VolleyError error) {

}
 }) {
 @Override
 public Map<String, String> getHeaders() throws AuthFailureError {

Map<String, String> params = new HashMap<String, String>();
 params.put("Authorizationey=" + SERVER_API_KEY);
 params.put("Content-Typepplication/json");
 return params;
 }
 };
 MySingleton.getInstance(context).addToRequestQueue(jsonObjectRequest);

Je vous suggère à tous de consulter mon article de blog pour plus de détails.

0
Manohar Reddy