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.
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}"
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)
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
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!"
}
}
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
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.
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;
}
?>
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.
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");
}
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
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
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.