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