Comment puis-je envoyer une notification de messagerie Cloud Firebase sans utiliser la Console Firebase? [fermé]
je commence avec le nouveau service Google pour les notifications, Firebase Cloud Messaging
.
grâce à ce code https://github.com/firebase/quickstart-android/tree/master/messaging j'ai pu envoyer des notifications depuis ma Firebase User Console sur mon appareil 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 comme ça, pour créer des notifications depuis mon propre serveur directement.
11 réponses
Firebase Cloud Messaging a un API côté serveur que vous pouvez appeler pour envoyer des messages. Voir https://firebase.google.com/docs/cloud-messaging/server .
envoyer un message peut être aussi simple que d'utiliser curl
pour appeler un terminal 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 en utilisant 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 dispositif jeton d'enregistrement
YOUR_KEY_HERE
est votre Serveur de Clé API (ou Serveur Hérité de la Clé API)
utiliser 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 c'est dans votre application, vous pouvez ajouter le code ci-dessous dans votre activité d'être appelé:
<intent-filter>
<action android:name="OPEN_ACTIVITY_1" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
Également vérifier la réponse sur Firebase onMessageReceived pas appelé quand application en arrière-plan
exemples utilisant curl
envoyer des messages à des dispositifs spécifiques
pour envoyer des messages à des appareils spécifiques, définissez le token d'enregistrement pour l'instance app 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 d'appareils est très similaire à l'envoi de messages à un appareil individuel. Définissez le paramètre to à 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
API URL: https://fcm.googleapis.com/fcm/send
En-têtes
Content-type: application/json
Authorization:key=<Your Api key>
Demande De La Méthode : POST
Du Corps De La Requête
Messages à des dispositifs spécifiques
{
"data": {
"score": "5x1",
"time": "15:10"
},
"to": "<registration token>"
}
Messages aux rubriques
{
"to": "/topics/foo-bar",
"data": {
"message": "This is a Firebase Cloud Messaging Topic Message!"
}
}
Messages aux groupes de dispositifs
{
"to": "<aUniqueKey>",
"data": {
"hello": "This is a Firebase Cloud Messaging Device Group Message!"
}
}
comme L'a mentionné Frank, vous pouvez utiliser L'API HTTP Firebase Cloud Messaging (FCM) pour déclencher la notification push à partir de votre propre back-end. Mais vous ne pourrez pas
- envoyer des notifications à un identificateur D'utilisateur Firebase (UID) et
- envoyer des notifications aux segments d'utilisateurs (ciblant les propriétés et les événements comme vous pouvez sur la console de l'utilisateur).
ce qui signifie: vous devrez stocker les identificateurs D'enregistrement FCM/GCM (push tokens) vous-même ou utilisez FCM topics pour abonner les utilisateurs. Gardez également à l'esprit que FCM n'est pas une API pour les Notifications Firebase , c'est une API de niveau inférieur sans planification ou d'analyse à taux ouvert. Les Notifications Firebase sont construites en haut sur FCM.
d'Abord, vous devez obtenir un jeton d'android et 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, est juste au-dessus de GCM.
j'ai trouvé celui-ci sur github: https://gist.github.com/prime31/5675017
Indice: ce script PHP donne un notification android .
donc: lire cette réponse de Koot si vous voulez recevoir et montrer la notification sur Android.
si vous voulez envoyer des notifications push à partir d'android, consultez mon billet de blog
envoyer des notifications Push à partir d'un téléphone android à un autre sans serveur.
envoyer une notification push n'est rien d'autre qu'une demande postale à https://fcm.googleapis.com/fcm/send
extrait de code à l'aide de 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 vérifier mon sur le blog pour plus de détails.
une Notification ou un message de données peut être envoyé à firebase base cloud messaging server à l'aide de L'endpoint de L'API HTTP V1 de FCM. 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 service en utilisant la console Firebase et générer la clé d'accès en utilisant la bibliothèque client api de google. Utilisez n'importe quelle bibliothèque http pour poster un message au point d'arrivée ci-dessus, le code ci-dessous montre le message de publication en utilisant OkHTTP. Vous pouvez trouver le code complet côté serveur et côté client à Firebase messagerie cloud et l'envoi de messages à plusieurs clients en utilisant l'exemple de sujet fcm
si un message client spécifique doit être envoyé, vous devez obtenir la clé d'enregistrement firebase du client, voir envoyer des messages spécifiques au client ou au périphérique au serveur FCM exemple
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");
}
en utilisant la Console Firebase vous pouvez envoyer un message à tous les utilisateurs basés sur le paquet d'application.Mais avec L'API CURL ou PHP ce n'est pas possible.
grâce à L'API, vous pouvez envoyer une notification à un identifiant de périphérique spécifique ou à des utilisateurs abonnés à des utilisateurs thématiques sélectionnés ou abonnés.
Get a view on following link. It will help you.
https://firebase.google.com/docs/cloud-messaging/send-message
ou vous pouvez utiliser les fonctions cloud de Firebase, ce qui est pour moi le moyen le plus simple de mettre en œuvre vos notifications push. firebase/fonctions-échantillons