Отправка push-уведомлений с сервера с помощью FCM

Недавно я задал вопрос об отправке push-уведомлений с помощью GCM:Отправка push-уведомлений на Android, Теперь, когда есть FCM, мне интересно, насколько он будет отличаться от разработки на стороне сервера. Мудрое кодирование, они одинаковы? Где я могу найти примеры кодов FCM, показывающих отправку push-уведомлений с сервера на устройство Android?

Нужно ли загружать какую-либо библиотеку JAR для отправки уведомлений в FCM с использованием кодов Java? Коды примеров вОтправка push-уведомлений на Android показывает отправку push-уведомлений с использованием GCM, и требуется файл JAR GCM на стороне сервера.

Тем не менее, еще один пример вhttps://www.quora.com/How-do-I-make-a-post-request-to-a-GCM-server-in-Java-to-push-a-notification-to-the-client- приложение показывает отправку push-уведомлений с использованием GCM, и файл JC-файла GCM на стороне сервера не требуется, поскольку он просто отправляет через HTTP-соединение. Можно ли использовать те же коды для FCM? URL используется "https://android.googleapis.com/gcm/sendMsgstr "Какой будет эквивалентный URL для FCM?

Заранее спасибо.

 MNM30 мая 2016 г., 04:29
Заходите ли вы на сайт FCM, есть пошаговый способ преобразования вашего текущего проекта GCM в FCM.
 user357340330 мая 2016 г., 04:59
В настоящее время у меня нет кодов push-уведомлений, таких как GCM. Я все еще исследую технологии, лежащие в основе push-уведомлений.
 Hammad Tariq16 нояб. 2017 г., 08:43
Прочтите этот пост для более подробной информации.developine.com/...

Ответы на вопрос(5)

ПОЛНОЕ РЕШЕНИЕ ДЛЯ ТЕМ, ОДИНОЧНЫХ УСТРОЙСТВ И НЕСКОЛЬКИХ УСТРОЙСТВ Создайте класс 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();
        }

    }

}

И звоните куда угодно, как это. И сервер, и 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); 
Решение Вопроса

Поскольку нет большой разницы, вы также можете просто проверить большинство примеров серверных кодов для GCM. Основное различие в отношении GCM и FCM заключается в том, что при использовании FCM вы можете использовать с ним новые функции (как уже упоминалось в этомответ). FCM также имеетПриставка откуда вы можете отправить сообщение / уведомление, не имея собственного сервера приложений.

НОТА: Создание вашего собственного сервера приложений зависит от вас. Просто заявив, что вы можете отправить сообщение / уведомление через консоль.

URL используется "https://android.googleapis.com/gcm/sendMsgstr "Какой будет эквивалентный URL для FCM?

Эквивалентный URL для FCM:https://fcm.googleapis.com/fcm/send, Вы можете проверить этодоктор Больше подробностей.

Ура! : D

 Chris Ho12 февр. 2019 г., 06:55
Если мой сервер указывает на конечную точку FCM (проект GCM Cloud Project не преобразуется в проект FireBase), но при этом используется старый ключ API GCM, то старый запрос приложения клиента все еще работает, верно?
 Hammad Tariq16 нояб. 2017 г., 08:43
Ребята читайте этот пост для более подробной информации ..developine.com/...
 user357340330 мая 2016 г., 07:55
Привет, МакАвсомвилль, спасибо за ваш ответ. Кажется, нам не нужен дополнительный библиотечный JAR-файл для отправки уведомлений с помощью GCM или FCM. Мы не можем просто отправить сообщение HTTP с необходимыми данными на сервер GCM / FCM.
 AL.30 мая 2016 г., 07:57
Ага. Нет необходимости в банке. Забыл включить это в мой ответ. Ура!

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;

}
 Vasantha Raj08 авг. 2017 г., 14:57
sandip сэр, это работает нормально, спасибо, сэр, у меня есть вопрос, почему вы используете OutputStreamWriter здесь.

Вам не нужно вносить какие-либо изменения на стороне сервера для обновления. Сервисный протокол не изменился. Однако обратите внимание, что все новые усовершенствования сервера будут документированы в документации по серверу FCM.

И от получения сообщений это швы есть только в некоторых местах, где его немного отличается. В основном удаляя что-то.

А документацию по серверу FCM можно найти здесьhttps://firebase.google.com/docs/cloud-messaging/server

Сервер уведомлений FCM, Просто используйте это какGCM lib.

Для сервера FCM используйте этот код:

GCM Server URL-"android.googleapis.com/gcm/send"

FCM Server URL - "fcm.googleapis.com/fcm/send"

присоединятьhttps с URL

Sender objSender = new Sender(gAPIKey);

или же

Sender objSender = new Sender(gAPIKey,"SERVER_URL");

по умолчанию сервер FCM назначен URL

Message objMessage = new Message.Builder().collapseKey("From FCMServer").timeToLive(3).delayWhileIdle(false)
                .notification(notification)
                .addData("ShortMessage", "Sh").addData("LongMessage", "Long ")
                .build();
        objMulticastResult = objSender.send(objMessage,clientId, 4);

Необходимость зависимости для этой библиотеки такая же, какGCM lib требуется (jsonsimple.jar).

Скачать lib сFCM_Server.jar

 f.khantsis16 февр. 2019 г., 21:15
Можете ли вы опубликовать его в Maven?

Ваш ответ на вопрос