Envoyer des notifications push du serveur avec FCM

récemment, j'ai posé une question sur l'envoi de notifications push en utilisant GCM: envoyer des notifications push à Android . Maintenant QU'il y a 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 montrant l'envoi de notifications push du serveur à L'appareil Android?

ai-je besoin de télécharger une bibliothèque JAR pour envoyer des notifications à la FCM en utilisant des codes Java? Le exemple de codes dans envoyer des notifications push à Android montre l'envoi de notifications push en utilisant GCM et un fichier GCM JAR côté serveur est nécessaire.

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 affiche l'envoi de notifications push en utilisant GCM et aucun fichier GCM jar côté serveur n'est requis car il est simplement envoyé via une connexion HTTP. Les mêmes codes peuvent-ils être utilisés pour la FCM? L'URL utilisée est" https://android.googleapis.com/gcm/send ". Quelle serait l'URL équivalente pour la FCM?

Merci d'avance.

24
demandé sur Community 2016-05-30 04:37:04

5 réponses

en quoi le codage côté serveur est-il différent?

Puisqu'il n'y a pas beaucoup de différence, vous pouvez juste vérifier la plupart des codes côté serveur d'exemple pour GCM aussi bien. La principale différence en ce qui concerne GCM et FCM est que lors de L'utilisation de FCM, vous pouvez utiliser les nouvelles fonctionnalités avec elle ( comme mentionné dans cette réponse ). FCM a également une Console où vous peut envoyer le Message/la Notification, sans avoir votre propre serveur d'application.

NOTE: la création de votre propre serveur d'applications dépend de vous. Je dis juste que vous pouvez envoyer un message/notification via la console.

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

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

santé! : D

29
répondu AL. 2017-05-23 12:17:52

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;

}
14
répondu Sandip S. 2017-03-02 06:46:40

cela vient tout droit de Google

vous n'aurez pas besoin de modifier le protocole côté serveur pour la mise à jour. Le protocole de service n'a pas changé. Cependant, notez que toutes les nouvelles améliorations du serveur seront documentées dans la documentation du serveur FCM.

et de la réception des messages, il se coure il n'y a que quelques endroits où son seulement légèrement différent. Principalement supprimer quelque chose.

et la documentation du serveur FCM se trouve ici https://firebase.google.com/docs/cloud-messaging/server

1
répondu MNM 2016-05-30 03:28:44

FULL SOLUTION FOR TOPIC, SINGLE DEVICE AND MULTIPLE DEVICES Créer un FireMessage de classe. C'est un exemple pour les messages de données. Vous pouvez changer 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. Nous pouvons utiliser à la fois le serveur et android.

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
répondu REMITH 2018-03-10 07:06:21

j'ai créé un lib pour le serveur de notification FCM. Utilise-le comme GCM lib.

Pour la FCM Serveur utiliser ce code

GCM URL du Serveur"android.googleapis.com/gcm/send"

FCM URL du Serveur "fcm.googleapis.com/fcm/send"

ajouter https avec URL

Sender objSender = new Sender (gAPIKey);

ou

Sender objSender = new Sender (gAPIKey, " SERVER_URL"); par défaut L'URL du serveur FCM est assignée

Message objMessage = nouveau Message.Constructeur.)(collapseKey("à Partir de la FCM Serveur").timeToLive (3).delayWhileIdle (false) .notification(notification) .addData ("ShortMessage","Sh").addData ("LongMessage", " Long ") .construire(); objMulticastResult = objSender.send (objMessage, clientId, 4);

télécharger lib lien.

le besoin de dépendance pour ce lib est le même que celui requis pour GCM lib .. jsonsimple.jar

FCM_Server.pot https://drive.google.com/file/d/0Bw4asdfC9QQWYU5xenNWYmVKT2c/view?usp=sharing

0
répondu Sumit Kumar 2017-07-06 04:53:28