it-swarm.com.de

Wie kann ich eine Firebase Cloud Messaging-Benachrichtigung senden, ohne die Firebase-Konsole zu verwenden?

Ich beginne mit dem neuen Google-Dienst für Benachrichtigungen, Firebase Cloud Messaging.

Dank diesem Code https://github.com/firebase/quickstart-Android/tree/master/messaging konnte ich Benachrichtigungen von meiner Firebase-Benutzerkonsole senden auf mein Android Gerät.

Gibt es eine API oder eine Möglichkeit, eine Benachrichtigung zu senden, ohne die Firebase-Konsole zu verwenden? Ich meine zum Beispiel eine PHP -API oder ähnliches, um Benachrichtigungen direkt von meinem eigenen Server zu erstellen.

184
David Corral

Firebase Cloud Messaging verfügt über serverseitige APIs, die Sie zum Senden von Nachrichten aufrufen können. Siehe https://firebase.google.com/docs/cloud-messaging/server .

Das Senden einer Nachricht kann so einfach sein wie das Aufrufen eines HTTP-Endpunkts mit curl. Siehe 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

Dies funktioniert mit 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 ist Ihre Nachricht, die an das Gerät gesendet werden soll

$id ist das Geräteregistrierungstoken

YOUR_KEY_HERE ist Ihr Server-API-Schlüssel (oder Legacy-Server-API-Schlüssel)

45
Hamzah Malik

Verwenden Sie eine Service-API.

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

Methodentyp: POST

Überschriften:

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

Karosserie/Nutzlast:

{ "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)"
} 

Und damit können Sie in Ihrer App den folgenden Code in Ihre Aktivität einfügen, der aufgerufen werden soll:

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

Überprüfen Sie auch die Antwort auf Firebase onMessageReceived nicht aufgerufen, wenn App im Hintergrund

40
Ankit Adlakha

Beispiele mit Locken

Nachrichten an bestimmte Geräte senden

Um Nachrichten an bestimmte Geräte zu senden, legen Sie das Registrierungs-Token für die jeweilige App-Instanz fest

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

Nachrichten an Themen senden

hier ist das thema:/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

Nachrichten an Gerätegruppen senden

Das Senden von Nachrichten an eine Gerätegruppe ähnelt dem Senden von Nachrichten an ein einzelnes Gerät. Setzen Sie den Parameter to auf den eindeutigen Benachrichtigungsschlüssel für die Gerätegruppe

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

Beispiele mit Service API

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

Überschriften

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

Anforderungsmethode: POST

Request Body

Nachrichten an bestimmte Geräte

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

Nachrichten zu Themen

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

Nachrichten an Gerätegruppen

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

Wie von Frank erwähnt, können Sie die HTTP-API von Firebase Cloud Messaging (FCM) verwenden, um die Push-Benachrichtigung von Ihrem eigenen Back-End auszulösen. Aber das wirst du nicht können

  1. benachrichtigungen an eine Firebase-Benutzer-ID (UID) senden und
  2. senden von Benachrichtigungen an Benutzersegmente (Ausrichten von Eigenschaften und Ereignissen wie auf der Benutzerkonsole).

Das heißt, Sie müssen die FCM/GCM-Registrierungs-IDs (Push-Token) selbst speichern oder FCM-Themen verwenden, um Benutzer zu abonnieren. Beachten Sie auch, dass FCM ist keine API für Firebase-Benachrichtigungen, es ist eine API auf niedrigerer Ebene ohne Planung oder Analyse mit offener Rate. Firebase Notifications basiert auf FCM.

23

Zuerst müssen Sie ein Token von Android erhalten und dann können Sie diesen PHP-Code aufrufen und sogar Daten für weitere Aktionen in Ihrer App senden.

 <?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

Sie können beispielsweise ein PHP Skript für Google Cloud Messaging (GCM) verwenden. Firebase und seine Konsole befinden sich direkt über GCM.

Ich fand dieses auf Github: https://Gist.github.com/prime31/5675017

Hinweis: Dieses PHP -Skript führt zu einem Android-Benachrichtigung .

Deshalb: Lesen Sie diese Antwort von Koot , wenn Sie die Benachrichtigung in Android erhalten und anzeigen möchten.

3
P-Zenker

Benachrichtigungen oder Datennachrichten können mithilfe des FCM-HTTP-v1-API-Endpunkts an den Firebase-Cloud-Messagingserver gesendet werden. https://fcm.googleapis.com/v1/projects/zoftino-stores/messages:send .

Sie müssen einen privaten Schlüssel für das Dienstkonto mithilfe der Firebase-Konsole generieren und herunterladen und einen Zugriffsschlüssel mithilfe der Google API-Clientbibliothek generieren. Verwenden Sie eine beliebige http-Bibliothek, um Nachrichten über dem Endpunkt zu veröffentlichen. Der folgende Code zeigt, wie Nachrichten mit OkHTTP veröffentlicht werden. Sie finden den vollständigen Code auf Server- und Clientseite unter Firebase Cloud Messaging und Senden von Nachrichten an mehrere Clients mithilfe des Themabeispiels fcm

Wenn eine bestimmte Client-Nachricht gesendet werden muss, müssen Sie den Firebase-Registrierungsschlüssel des Clients erhalten, siehe Client- oder gerätespezifische Nachrichten an den FCM-Server senden, Beispiel

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

Oder Sie können die Firebase-Cloud-Funktionen verwenden. Dies ist für mich der einfachere Weg, Ihre Push-Benachrichtigungen zu implementieren. firebase/functions-samples

0
Laurent Maquet

Mit Firebase Console können Sie Nachrichten basierend auf dem Anwendungspaket an alle Benutzer senden. Mit CURL oder der PHP API ist dies jedoch nicht möglich.

Über API Sie können Benachrichtigungen an bestimmte Geräte-IDs oder abonnierte Benutzer an ausgewählte oder abonnierte Themenbenutzer senden.

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

Wenn Sie Push-Benachrichtigungen von Android senden möchten, lesen Sie meinen Blog-Beitrag

Senden Sie Push-Benachrichtigungen von einem Android Telefon an ein anderes ohne Server.

das Senden einer Push-Benachrichtigung ist nichts anderes als eine Post-Anfrage an https://fcm.googleapis.com/fcm/send

code-Snippet mit 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);

Ich schlage Ihnen allen vor, meinen Blog-Beitrag zu lesen, um alle Details zu erfahren.

0
Manohar Reddy