如何区分推送通知的Android和IOS Firebase ID?

时间:2017-07-24 17:02:22

标签: android ios firebase firebase-cloud-messaging

根据我之前提出的问题Firebase onMessageReceived not called when app is in the background,我需要将有效负载更改为“数据”有效负载,而不是“通知”有效负载。 (参见此处的链接 - What is the difference between Firebase push-notifications and FCM messages?)。

问题是,我们使用Firebase和IOS应用程序的IOS和Android应用程序都需要推送通知负载使用“通知”结构,而Android需要“数据”有效负载结构。

因此,我的问题是,您如何区分通过firebase sdk获得的Android和IOS令牌/ ID?

如果我们的服务器保存这些ID并需要发送推送通知,则需要指定Android与IOS以更改有效负载结构。完成此识别的唯一方法是通过基于应用程序的服务调用来区分IOS和Android吗?或者是否有更复杂的方法使用Firebase,这将允许我们指出它是哪个设备?

谢谢大家。

2 个答案:

答案 0 :(得分:13)

有关应用实例的信息可从此端点的Instance ID Service获得:

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

成功时,调用返回HTTP状态200和包含platform的{​​{3}}的JSON对象:

  

返回ANDROID,IOS或CHROME以指示设备平台   令牌属于哪个

答案 1 :(得分:0)

我遇到了同样的问题,下面是解决该问题的方法。

Firebase支持“ 主题消息”,在其中我们可以将数据或通知消息发送到多个订阅的设备。

让我们考虑用户登录电子邮件ID是唯一的(让我们考虑示例电子邮件ID为test@gmail.com),在android应用程序中,用户将订阅 test_gmail.com_data 主题(将'@'替换为'电子邮件ID中的_',因为主题名称不支持'@'),并且在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));