Sha*_*n C 11 iphone notifications ios firebase firebase-cloud-messaging
我正在使用FCM(firebase云消息传递)向IOS应用程序发送"自定义"数据通知.据我所知,当您希望FCM处理代表您的应用程序显示通知时,我们会使用通知消息.当您只想在应用中处理消息时,我们会使用数据消息.这是设计的.
我面临的问题是,Device/InstandID令牌对于已安装的应用程序是唯一的,而不是登录应用程序的用户.因此,要解决此问题,我将在数据中发送预期的用户标记,以便它成为数据消息.由于应用程序处理数据通知,因此只有在打开应用程序并且仅显示通知时才会触发didReceiveRemoteNotification()回调,而不会立即显示通知.
我的问题是,我是否可以发送自定义数据通知消息,即使应用程序关闭也会立即显示.
这是我发送给FCM的有效负载:
{
registeration_ids : [<id_1>, <id_2>],
data : {
title : message_title,
body : message_body,
intended_user : message_user
}
}
Run Code Online (Sandbox Code Playgroud)
在Android FirebaseMessagingService.onMessageReceived()
中调用即使应用程序在后台但在ios didReceiveRemoteNotification()
中仅在启动应用程序时调用,因此如果发送数据消息则不会显示后台消息.
小智 16
尝试将content_available设置为true.
从fcm文档:
注意:如果要在应用程序位于后台时将仅包含自定义键值的消息发送到iOS设备,请在数据键中设置自定义键值对,并将content_available设置为true.
{
registeration_ids : [<id_1>, <id_2>],
content_available: true,
data : {
title : message_title,
body : message_body,
intended_user : message_user
}
}
Run Code Online (Sandbox Code Playgroud)
Sha*_*n C 16
据我所知,到目前为止,没有办法在ios方面正确解决这个问题.它在android端完美运行,因为应用程序在所有状态(前景,后台和关闭)中被唤醒.
您可以发送两种消息:
甲通知消息,将其直接显示和处理由操作系统.
甲数据消息由所述应用程序处理.
如果添加自定义标记,它现在将成为数据消息,并且必须由应用程序处理.您可以content_available
在数据消息中添加标记以让应用程序知道消息,但问题是如果应用程序处于预定(打开)或后台(最小化),则数据消息仅传递给ios中的应用程序. ).如果用户已"强制关闭"应用程序(即使启用了后台通知),也不会将数据消息传递给应用程序.
解决方案是在服务器端处理预期用户,并通过维护一对一设备令牌与用户关系来解决多用户到单设备令牌问题.
emi*_*pmp 14
来自Firebase的糟糕文档!
对于ios,应用程序被杀时无法接收数据消息.但是在他们的文档中没有提到这一点.所以我联系了Firebase,这就是他们所说的.
"虽然有一个content_available参数,但是当应用程序被杀死时无法接收数据消息.它只能在后台和前台接收.如果你希望在应用程序被杀时接收数据消息,你需要沿着它发送它显示消息".
因此,如果您曾想过在FCM中使用相同的有效负载用于Android和Ios,那么最好使用APNS for ios.
Prc*_*ela 13
我注意到,如果通知优先级设置为高,则应用程序强制关闭时通知将到达.
{ "notification": {
"body" : "This week’s edition is now available.",
"title": "Portugal vs. Denmark",
"text": "5 to 1",
"content_available": 1
},
"data" : {
"volume" : "3.21.15",
"contents" : "http://www.news-magazine.com/world-week/21659772"
},
"to" : "fqUk65A1kTE:APA91bG5...", // or set topic like "/topics/test"
"priority" : "high"
}
Run Code Online (Sandbox Code Playgroud)
对于iOS客户端应用程序,普通和高优先级类似于APN优先级5和10.
从iOS文档中可能无法提供具有默认优先级的通知.
apns-priority:通知的优先级.指定以下值之一:
10 - 立即发送推送消息.具有此优先级的通知必须在目标设备上触发警报,声音或徽章.将此优先级用于仅包含内容可用密钥的推送通知是错误的.
5 - 在考虑设备电源注意事项的时间发送推送消息.具有此优先级的通知可能会分组并以突发方式传递.它们被限制,在某些情况下不会被交付.如果省略此标头,则APNs服务器将优先级设置为10.
更新1:
以上通知是通过FCM api发送的,并在应用程序被杀时收到.点击设备上的通知后,这是应用启动后设备日志中显示的内容:
...didReceiveRemoteNotification: [gcm.message_id: 0:1468481012881485%e1d60a46e1d60a46, volume: 3.21.15, aps: {
alert = {
body = "This week\U2019s edition is now available.";
title = "Portugal vs. Denmark";
};
}, contents: http://www.news-magazine.com/world-week/21659772][;
Run Code Online (Sandbox Code Playgroud)
请注意,数据部分也包含在已接收的消息中.
更新2:
单个设备上的多个用户或具有多个设备的一个用户.
在服务器端,您必须确保只能为一个用户分配一个唯一的fcm_id.这意味着一个设备被分配给一个用户,因此每个设备只会通知一个用户.
此外,一个用户可以拥有多个fcm_id,这意味着用户可以拥有更多设备并进行登录.
当user_2登录到user_1的同一设备时,必须将fcm_id与user_1分离并附加到user_2.通过这种方式,只有当前登录的用户才会收到该消息.
归档时间: |
|
查看次数: |
28513 次 |
最近记录: |