根据我之前提出的问题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,这将允许我们指出它是哪个设备?
谢谢大家。
答案 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));