FCM (Firebase Cloud Messaging) Отправить на несколько устройств

Я выполняю этот код для отправки уведомлений на мобильное устройство с использованием библиотеки FCM

public string PushFCMNotification(string deviceId, string message) 
    {
        string SERVER_API_KEY = "xxxxxxxxxxxxxxxxxxxxxxx";
        var SENDER_ID = "xxxxxxxxx";
        var value = message;
        WebRequest tRequest;
        tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
        tRequest.Method = "post";
        tRequest.ContentType = "application/json";
        tRequest.Headers.Add(string.Format("Authorization: key={0}", SERVER_API_KEY));

        tRequest.Headers.Add(string.Format("Sender: id={0}", SENDER_ID));

        var data = new
        {
            to = deviceId,
            notification = new
            {
                body = "This is the message",
                title = "This is the title",
                icon = "myicon"
            }
        };

        var serializer = new JavaScriptSerializer();
        var json = serializer.Serialize(data);

        Byte[] byteArray = Encoding.UTF8.GetBytes(json);

        tRequest.ContentLength = byteArray.Length;

        Stream dataStream = tRequest.GetRequestStream();
        dataStream.Write(byteArray, 0, byteArray.Length);
        dataStream.Close();

        WebResponse tResponse = tRequest.GetResponse();

        dataStream = tResponse.GetResponseStream();

        StreamReader tReader = new StreamReader(dataStream);

        String sResponseFromServer = tReader.ReadToEnd();


        tReader.Close();
        dataStream.Close();
        tResponse.Close();
        return sResponseFromServer;
    }

теперь, как отправить сообщение на несколько устройств, предположим, что параметр string deviceId заменен на идентификаторы списка List.

можете ли вы помочь

Ответ 1

Обновление: для v1 кажется, что registration_ids больше не поддерживается. Настоятельно рекомендуется использовать темы. Для v1 поддерживаются только параметры, показанные в документации.


Просто используйте registration_ids параметр вместо, to в вашей полезной нагрузке. В зависимости от вашего варианта использования вы можете использовать либо текстовые сообщения, либо сообщения группы устройств.

Обмен сообщениями

Служба обмена сообщениями Firebase Cloud Messaging (FCM) позволяет отправлять сообщения нескольким устройствам, которые выбрали конкретную тему. На основе модели публикации/подписания тема обмена сообщениями поддерживает неограниченное количество подписчиков для каждого приложения. Вы составляете сообщения темы по мере необходимости, а Firebase обрабатывает маршрутизацию сообщений и надежно передает сообщение соответствующим устройствам.

Например, пользователи локального приложения прогнозирования погоды могут выбрать тему "суровых погодных предупреждений" и получать уведомления о штормах, угрожающих указанным областям. Пользователи спортивного приложения могут подписаться на автоматические обновления в живых играх для своих любимых команд. Разработчики могут выбрать любое название темы, которое соответствует регулярному выражению: "/topics/[a-zA-Z0-9-_.~%]+".


Сообщения группы устройств

При обмене сообщениями группы устройств серверы приложений могут отправлять одно сообщение нескольким экземплярам приложения, работающего на устройствах, принадлежащих к группе. Как правило, "группа" относится к набору различных устройств, принадлежащих одному пользователю. Все устройства в группе имеют общий ключ уведомления, который является маркером, который использует FCM для рассылки сообщений всем устройствам в группе.

Обмен сообщениями групп устройств позволяет каждому экземпляру приложения в группе отражать последнее состояние обмена сообщениями. В дополнение к отправке сообщений вниз по течению к ключу уведомлений вы можете разрешать устройствам отправлять восходящие сообщения в группу устройств. Вы можете использовать обмен группами устройств с сервером соединений XMPP или HTTP. Предел полезной нагрузки данных составляет 2 КБ при отправке на устройства iOS и 4 КБ для других платформ.

Максимальное количество членов, разрешенных для notification_key равно 20.


Для получения дополнительной информации вы можете проверить отправку на несколько устройств в документах FCM.

Ответ 2

Вы должны создать тему и позволить пользователям подписаться на эту тему. Таким образом, когда вы отправляете сообщение FCM, каждый пользователь, подписавшийся на него, получает его, за исключением того, что вы действительно хотите сохранить запись своего Идентификатора для особых целей.

FirebaseMessaging.getInstance().subscribeToTopic("news");

Смотрите эту ссылку: https://firebase.google.com/docs/cloud-messaging/android/topic-messaging

https://fcm.googleapis.com/fcm/send
Content-Type:application/json
Authorization:key=AIzaSyZ-1u...0GBYzPu7Udno5aA

{
  "to": "/topics/news",
  "data": {
    "message": "This is a Firebase Cloud Messaging Topic Message!",
   }
}

Ответ 3

Пожалуйста, выполните следующие действия.

public String addNotificationKey(
    String senderId, String userEmail, String registrationId, String idToken)
    throws IOException, JSONException {
URL url = new URL("https://android.googleapis.com/gcm/googlenotification");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setDoOutput(true);

// HTTP request header
con.setRequestProperty("project_id", senderId);
con.setRequestProperty("Content-Type", "application/json");
con.setRequestProperty("Accept", "application/json");
con.setRequestMethod("POST");
con.connect();

// HTTP request
JSONObject data = new JSONObject();
data.put("operation", "add");
data.put("notification_key_name", userEmail);
data.put("registration_ids", new JSONArray(Arrays.asList(registrationId)));
data.put("id_token", idToken);

OutputStream os = con.getOutputStream();
os.write(data.toString().getBytes("UTF-8"));
os.close();

// Read the response into a string
InputStream is = con.getInputStream();
String responseString = new Scanner(is, "UTF-8").useDelimiter("\\A").next();
is.close();

// Parse the JSON string and return the notification key
JSONObject response = new JSONObject(responseString);
return response.getString("notification_key");

}

Надеюсь, приведенный выше код поможет вам отправить push на несколько устройств. Подробнее см. Ссылку https://firebase.google.com/docs/cloud-messaging/android/device-group

*** Примечание. Пожалуйста, прочтите ссылку на создание/удаление группы по вышеуказанной ссылке.