Как отличить идентификаторы Firebase от Android и IOS для Push-уведомлений?

В соответствии с моим ранее задаваемым вопросом Firebase onMessageReceived не вызывается, когда приложение находится в фоновом режиме, мне нужно изменить полезную нагрузку на полезную нагрузку данных, а не на "полезная нагрузка". (См. Ссылку здесь - В чем разница между push-уведомлениями Firebase и сообщениями FCM?).

Проблема заключается в том, что как приложение IOS, так и Android, которое мы используем Firebase, и приложение IOS требуют использования push-оповещения для использования структуры уведомлений, в то время как для Android требуется структура данных "данных".

Итак, мой вопрос: как вы различаете токены Android и IOS/идентификаторы, полученные через sdk firebase?

Если наш сервер сохраняет эти идентификаторы и ему необходимо отправить push-уведомление, ему необходимо указать Android vs IOS, чтобы изменить структуру полезной нагрузки. Единственный способ выполнить эту идентификацию, чтобы иметь приложение на сервере, которое отличает IOS от Android? Или существует более сложный способ использования Firebase, который позволит нам определить, какое устройство это устройство?

Спасибо всем.

Ответ 1

Информация об экземпляре приложения доступна в службе идентификаторов экземпляров в этой конечной точке:

https://iid.googleapis.com/iid/info/IID_TOKEN

При успешном завершении вызов возвращает статус HTTP 200 и объект JSON, содержащий различные состояния для экземпляра приложения, включая platform:

возвращает ANDROID, IOS или CHROME, чтобы указать платформу устройства, к которому принадлежит токен

Ответ 2

Я столкнулся с той же проблемой, следующий мой подход к решению проблемы.

Firebase поддерживает " Тематические сообщения ", в котором мы можем отправлять данные или уведомления на несколько подписанных устройств.

Предположим, что идентификатор электронной почты для входа пользователя уникален (например, идентификатор электронной почты для примера [email protected]). В приложении для Android пользователь подпишется на тему test_gmail.com_data (замените "@" на "_" в идентификаторе электронной почты, поскольку имя темы не " t '' '), и в приложении iOS пользователь подпишется на тему test_gmail.com_notification. Из облачных функций я отправляю сообщение данных, которое предназначено для устройства Android на тему данных, и сообщение уведомления, предназначенное для устройств iOS, на тему уведомления.

При таком подходе я решил проблему, единственная проблема этого подхода в том, что мы отправляем дважды одно и то же сообщение.

Пример кода:

 const data_message = {
          data: {
            "sender": "Narendra",
            "Message" : "Simple data message"
          },
          topic:"test_gmail.com_data"
        };
 const notification_message = {
          notification: {
            title: "Announcement"
          },
          data: {
            "sender": "Narendra",
            "Message" : "Simple data message"
          },
          topic: "test_gmail.com_notification"
        };
        promises.push(admin.messaging().send(data_message));
        promises.push(admin.messaging().send(notification_message));