web-dev-qa-db-fra.com

Envoyer des notifications Push du serveur avec FCM

Récemment, j'ai posé une question sur l'envoi de notifications Push à l'aide de GCM: Envoyer des notifications Push à Android . Maintenant qu'il y a la FCM, je me demande à quel point ce serait différent du développement côté serveur. Codage sage, sont-ils les mêmes? Où puis-je trouver des exemples de codes FCM illustrant l'envoi de notifications Push d'un serveur à un appareil Android?

Dois-je télécharger une bibliothèque JAR pour envoyer des notifications à FCM à l'aide de codes Java? Les exemples de codes dans Envoi de notifications Push à Android montre l'envoi de notifications Push à l'aide de GCM et d'un fichier JAR GCM côté serveur est requis.

Cependant, un autre exemple dans https://www.quora.com/How-do-I-make-a-post-request-to-a-GCM-server-in-Java-to-Push-a-notification -to-the-client-app montre l'envoi de notifications Push à l'aide de GCM et aucun fichier JAR GCM côté serveur n'est requis, car l'envoi se fait uniquement via une connexion HTTP. Les mêmes codes peuvent-ils être utilisés pour FCM? L'URL utilisée est " https://Android.googleapis.com/gcm/send ". Quelle serait l'URL équivalente pour FCM?

Merci d'avance.

27
user3573403

Quelle est la différence entre le codage côté serveur?

Comme il n'y a pas beaucoup de différence, vous pouvez également consulter la plupart des exemples de codes côté serveur pour GCM. La principale différence en ce qui concerne GCM et FCM est que, lorsque vous utilisez FCM, vous pouvez utiliser les nouvelles fonctionnalités (comme indiqué dans ce réponse). FCM dispose également d'une Console où vous pouvez envoyer le message/la notification sans avoir votre propre serveur d'applications.

NOTE: La création de votre propre serveur d'applications est à vous. Il suffit de préciser que vous pouvez envoyer un message/une notification via la console.

L'URL utilisée est " https://Android.googleapis.com/gcm/send ". Quelle serait l'URL équivalente pour FCM?

L'URL équivalente pour FCM est https://fcm.googleapis.com/fcm/send . Vous pouvez consulter le this doc pour plus de détails.

À votre santé! :RÉ

31
AL.

Utilisez le code ci-dessous pour envoyer une notification Push à partir du serveur FCM:

public class PushNotifictionHelper {
public final static String AUTH_KEY_FCM = "Your api key";
public final static String API_URL_FCM = "https://fcm.googleapis.com/fcm/send";

public static String sendPushNotification(String deviceToken)
        throws IOException {
    String result = "";
    URL url = new URL(API_URL_FCM);
    HttpURLConnection conn = (HttpURLConnection) url.openConnection();

    conn.setUseCaches(false);
    conn.setDoInput(true);
    conn.setDoOutput(true);

    conn.setRequestMethod("POST");
    conn.setRequestProperty("Authorization", "key=" + AUTH_KEY_FCM);
    conn.setRequestProperty("Content-Type", "application/json");

    JSONObject json = new JSONObject();

    json.put("to", deviceToken.trim());
    JSONObject info = new JSONObject();
    info.put("title", "notification title"); // Notification title
    info.put("body", "message body"); // Notification
                                                            // body
    json.put("notification", info);
    try {
        OutputStreamWriter wr = new OutputStreamWriter(
                conn.getOutputStream());
        wr.write(json.toString());
        wr.flush();

        BufferedReader br = new BufferedReader(new InputStreamReader(
                (conn.getInputStream())));

        String output;
        System.out.println("Output from Server .... \n");
        while ((output = br.readLine()) != null) {
            System.out.println(output);
        }
        result = CommonConstants.SUCCESS;
    } catch (Exception e) {
        e.printStackTrace();
        result = CommonConstants.FAILURE;
    }
    System.out.println("GCM Notification is sent successfully");

    return result;

}
19
Sandip S.

SOLUTION COMPLÈTE POUR SUJET, UN APPAREIL ET PLUSIEURS APPAREILS Créez un FireMessage de classe. Ceci est un exemple pour les messages de données. Vous pouvez modifier les données en notification.

public class FireMessage {
private final String SERVER_KEY = "YOUR SERVER KEY";
private final String API_URL_FCM = "https://fcm.googleapis.com/fcm/send";
private JSONObject root;

public FireMessage(String title, String message) throws JSONException {
    root = new JSONObject();
    JSONObject data = new JSONObject();
    data.put("title", title);
    data.put("message", message);
    root.put("data", data);
}


public String sendToTopic(String topic) throws Exception { //SEND TO TOPIC
    System.out.println("Send to Topic");
    root.put("condition", "'"+topic+"' in topics");
    return sendPushNotification(true);
}

public String sendToGroup(JSONArray mobileTokens) throws Exception { // SEND TO GROUP OF PHONES - ARRAY OF TOKENS
    root.put("registration_ids", mobileTokens);
    return sendPushNotification(false);
}

public String sendToToken(String token) throws Exception {//SEND MESSAGE TO SINGLE MOBILE - TO TOKEN
    root.put("to", token);
    return sendPushNotification(false);
}



    private String sendPushNotification(boolean toTopic)  throws Exception {
        URL url = new URL(API_URL_FCM);
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        conn.setUseCaches(false);
        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");

        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("Accept", "application/json");
        conn.setRequestProperty("Authorization", "key=" + SERVER_KEY);

        System.out.println(root.toString());

        try {
            OutputStreamWriter wr = new OutputStreamWriter(conn.getOutputStream());
            wr.write(root.toString());
            wr.flush();

            BufferedReader br = new BufferedReader(new InputStreamReader( (conn.getInputStream())));

            String output;
            StringBuilder builder = new StringBuilder();
            while ((output = br.readLine()) != null) {
                builder.append(output);
            }
            System.out.println(builder);
            String result = builder.toString();

            JSONObject obj = new JSONObject(result);

            if(toTopic){
                if(obj.has("message_id")){
                    return  "SUCCESS";
                }
           } else {
            int success = Integer.parseInt(obj.getString("success"));
            if (success > 0) {
                return "SUCCESS";
            }
        }

            return builder.toString();
        } catch (Exception e) {
            e.printStackTrace();
           return e.getMessage();
        }

    }

}

Et appelez n'importe où comme ça. Le serveur et Android, nous pouvons utiliser cela.

FireMessage f = new FireMessage("MY TITLE", "TEST MESSAGE");

      //TO SINGLE DEVICE
    /*  String fireBaseToken="c2N_8u1leLY:APA91bFBNFYDARLWC74QmCwziX-YQ68dKLNRyVjE6_sg3zs-dPQRdl1QU9X6p8SkYNN4Zl7y-yxBX5uU0KEKJlam7t7MiKkPErH39iyiHcgBvazffnm6BsKjRCsKf70DE5tS9rIp_HCk";
       f.sendToToken(fireBaseToken); */

    // TO MULTIPLE DEVICE
    /*  JSONArray tokens = new JSONArray();
      tokens.put("c2N_8u1leLY:APA91bFBNFYDARLWC74QmCwziX-YQ68dKLNRyVjE6_sg3zs-dPQRdl1QU9X6p8SkYNN4Zl7y-yxBX5uU0KEKJlam7t7MiKkPErH39iyiHcgBvazffnm6BsKjRCsKf70DE5tS9rIp_HCk");
      tokens.put("c2R_8u1leLY:APA91bFBNFYDARLWC74QmCwziX-YQ68dKLNRyVjE6_sg3zs-dPQRdl1QU9X6p8SkYNN4Zl7y-yxBX5uU0KEKJlam7t7MiKkPErH39iyiHcgBvazffnm6BsKjRCsKf70DE5tS9rIp_HCk");
       f.sendToGroup(tokens);  */

    //TO TOPIC
      String topic="yourTopicName";
       f.sendToTopic(topic); 
1
REMITH

Cela vient directement de Google

Il n'est pas nécessaire de modifier le protocole côté serveur pour la mise à niveau. Le protocole de service n'a pas changé. Toutefois, notez que toutes les améliorations apportées au serveur seront documentées dans la documentation du serveur FCM.

Et en recevant des messages, il semble qu'il n'y ait que quelques endroits où ce n'est que légèrement différent. Principalement supprimer quelque chose. 

Et la documentation du serveur FCM est disponible ici https://firebase.google.com/docs/cloud-messaging/server

1
MNM