我正在开展一个项目,我们正在使用Firebase Cloud Messaging进行推送通知。后端API当前正在生成以下JSON并发送到FCM:
{
"priority": "normal",
"delay_while_idle": true,
"dry_run": false,
"time_to_live": 3600,
"notification": {
"body_loc_key": "MyCustomNotificationId"
},
"data": {
// contains notification data
},
"registration_ids": [
]
}
此通知应该是静默的,这意味着它应该只在iOS应用程序位于前台时才会收到,但有时在某些设备上,此通知也会找到通知iOS通知托盘,应用程序位于后台,就好像它一样有参数在那里显示。
我发现iOS设备必须存在body_loc_key
属性,否则无论应用程序位于前台还是后台,通知都无法访问设备。
以下设备出现问题:
也可能会有其他人受到影响。
发送给您已成功使用的FCM的JSON是否有不同的配置,其中通知仅在应用程序位于前台时发送到设备?
答案 0 :(得分:0)
在使用FCM有效负载进行sime时间之后,我们发现问题实际上是body_loc_key
属性。
为了使通知保持静音并仍然发送到苹果设备,有效负载必须符合以下条件:
priority
必须设为normal
,content_available
必须设为true
,notification
属性必须包含数据,但如果它包含body_loc_key
属性,则必须将其设置为空字符串 - ""
。工作负载示例:
// Example one
{
"priority": "normal",
"delay_while_idle": true,
"dry_run": false,
"time_to_live": 3600,
"content_available": true,
"notification": {
"body_loc_key": ""
},
"data": {
// contains notification data
},
"registration_ids": [
]
}
// Example two
// (note that body_loc_key has been replaced with badge)
{
"priority": "normal",
"delay_while_idle": true,
"dry_run": false,
"time_to_live": 3600,
"content_available": true,
"notification": {
"badge": 10
},
"data": {
// contains notification data
},
"registration_ids": [
]
}
将body_loc_key
更改为空字符串几乎解决了这个问题。最重要的是,我们还发现了以下notification
属性的other属性:
badge
可能存在且已处理,通知仍然无声,title_loc_key
无效,通知仍然无声,body_loc_args
无效,通知仍然无声。所有三个新增内容适用于已满足先例标准的情况(如果/存在时为空body_loc_key
等)。
答案 1 :(得分:-1)
您的通知以显示消息而非无声消息的形式发送的原因是您使用notification
有效负载。
特别是您正在使用body_loc_key
。
您写道,您认为发送无声消息需要body_loc_key
这不是真的。
您能否链接到您找到此页面的页面?