Faire une demande HTTP POST avec le lien https://fcm.googleapis.com/fcm/send avec l'en-tête et les données nécessaires m'ont aidé. Dans l'extrait de code ci-dessous Constants.LEGACY_SERVER_KEY
est une variable de classe locale, vous pouvez la trouver dans votre Projet Firebase Settings->Cloud Messaging->Legacy Server key
. Vous devez passer le jeton d'enregistrement du dispositif, c'est-à-dire. regToken
dans l'extrait de code ci-dessous référencé ICI.
Enfin, vous devez okhttp afin de faire fonctionner cet extrait.
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");
private void sendNotification(final String regToken) {
new AsyncTask<Void,Void,Void>(){
@Override
protected Void doInBackground(Void... params) {
try {
OkHttpClient client = new OkHttpClient();
JSONObject json=new JSONObject();
JSONObject dataJson=new JSONObject();
dataJson.put("body","Hi this is sent from device to device");
dataJson.put("title","dummy title");
json.put("notification",dataJson);
json.put("to",regToken);
RequestBody body = RequestBody.create(JSON, json.toString());
Request request = new Request.Builder()
.header("Authorization","key="+Constants.LEGACY_SERVER_KEY)
.url("https://fcm.googleapis.com/fcm/send")
.post(body)
.build();
Response response = client.newCall(request).execute();
String finalResponse = response.body().string();
}catch (Exception e){
//Log.d(TAG,e+"");
}
return null;
}
}.execute();
}
de plus, si vous voulez envoyer un message à un sujet particulier, remplacez regToken
en json comme ceci
json.put("to","/topics/foo-bar")
et n'oubliez pas d'ajouter la permission INTERNET dans votre AndroidManifest.xml.
IMPORTANT : - L'utilisation du code ci-dessus signifie que votre clé de serveur réside dans l'application cliente. C'est dangereux car quelqu'un peut s'introduire dans votre application et obtenir la clé du serveur pour envoyer des notifications malveillantes à vos utilisateurs.
3 votes
Je n'ai pas encore utilisé FCM, .... mais j'ai utilisé GCM.... en supposant que FCM est presque comme GCM..... appareil A envoie le message au serveur qui va pousser le message à l'appareil B. Consultez le site firebase.google.com/support/faq/#messaging-difference
1 votes
@j4rey89 Oui, je sais que cela peut être fait en utilisant un serveur externe. Je demande si cela peut être fait sans lui, car cela m'obligerait à maintenir et à payer pour deux serveurs au lieu d'un.
7 votes
@Suyash il est obligatoire d'exécuter votre propre serveur afin d'envoyer des messages FCM entre vos appareils. Si vous vous inquiétez des coûts de fonctionnement du serveur, vous pouvez commencer à déployer sur Openshift Online (PaaS) ou Google AppEngine (PaaS également) qui ont un quota gratuit.
2 votes
@j4rey89 MrBrightside : ça ressemble à une réponse. :-)
0 votes
stackoverflow.com/questions/38432243/
0 votes
@Suyash vous pouvez envoyer des notifications en utilisant une demande de poste à un autre appareil.
1 votes
Voir : firebase.googleblog.com/2016/08/
1 votes
Il semble que vous puissiez envoyer un message de périphérique à périphérique via un post http sans avoir votre propre serveur, selon cette documentation sur firebase : firebase.google.com/docs/cloud-messaging/http-server-ref Je n'ai pas réussi à trouver comment faire la demande de poste. Quelqu'un a-t-il essayé ? Cela semble trop beau pour être vrai.
0 votes
Il est désormais possible d'envoyer des messages d'appareil à appareil avec Google Cloud Functions. Voir la réponse ci-dessous : stackoverflow.com/a/47106374/144088