J'essaie d'envoyer des notifications sur mon serveur à mon appareil Android. J'utilise Firebase Cloud Messaging pour envoyer les notifications. Je peux envoyer des notifications via la console Firebase et je reçois le message sur mon téléphone. Cependant, j'essaye d'envoyer un message via mon serveur, qui ne fonctionne pas encore.

J'obtiens la réponse suivante lorsque j'exécute le code ci-dessous:

"{\" message_id \ ": 58934758934758936346437}"

Lorsque nous examinons la documentation de Firebase ici Documentation Firebase, nous pouvons voir que la réception d'un message_id implique que le message a été envoyé avec succès. Je ne le reçois cependant pas sur mon téléphone.

J'ai abonné l'application au bon sujet.

J'exécute le code suivant:

private void test(String topic) {
    try {
        //Setup request
        URL url = new URL("https://fcm.googleapis.com/fcm/send");
        HttpURLConnection hc = (HttpURLConnection) url.openConnection();
        hc.setDoOutput(true);
        hc.setDoInput(true);

        //Set request params
        String message = "{\"to\": \"/topics/" + topic + "\"}";

        hc.addRequestProperty("Content-Type", "application/json");
        hc.addRequestProperty("Authorization", "key=SECRET");

        DataOutputStream dos = new DataOutputStream(hc.getOutputStream());
        dos.writeBytes(message);
        dos.close();

        //Get Response  
        InputStream is = hc.getInputStream();
        BufferedReader rd = new BufferedReader(new InputStreamReader(is));
        StringBuilder response = new StringBuilder(); // or StringBuffer if Java version 5+
        String line;
        while ((line = rd.readLine()) != null) {
          response.append(line);
        }
        rd.close();

        label.setText("RESPONSE: " + response.toString());

    } catch (Exception ex) {
        label.setText("Er ging iets mis");
        ex.printStackTrace();
    }
}
7
Guido 5 avril 2017 à 10:17

2 réponses

Meilleure réponse

Vérifiez le format des messages envoyés par le serveur.

Par exemple, voici un message au format JSON dans la même application de messagerie instantanée que ci-dessus, où les informations sont encapsulées dans la clé de données et l'application cliente est censée interpréter le contenu:

{
   "to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
   "data" : {
     "Nick" : "Mario",
     "body" : "great match!",
     "Room" : "PortugalVSDenmark"
   },
 }

Pour plus d'informations, veuillez consulter cette documentation: FCM Docs

4
Sanjog Shrestha 5 avril 2017 à 07:21

Votre charge utile ne contient aucun message .

String message = "{\"to\": \"/topics/" + topic + "\"}";

Il ne contient que le destinataire (to), mais il n'y a pas de message réel. Envoyez une charge utile de message notification ou data. Quelque chose comme ça:

String message = "{\"to\": \"/topics/" + topic + "\",
    \"notification\" : {
        \"title\" : \"sample title\",
        \"body\" : \"sample body\"
    }
}";

Consultez les paramètres disponibles pour notification et data ici et notez que ces deux charges utiles de messages sont gérées différemment. Pour plus de détails, consultez la documentation Recevoir des messages dans Android.

3
AL. 5 avril 2017 à 07:43