我在iOS上遇到静音通知问题。
当我的申请处于后台时,我不会收到FCM发送的无声通知。但是,如果我尝试直接发送到APNS,则会成功收到通知。
这是发送给FCM的JSON:
{
"to" : "<token>",
"priority": "high",
"content_available": true,
"data" : {
"<key>" : "<string>",
"<key2>" : "<string>"
}
}
这是直接发送给APNS的JSON:
{
"aps": {
"content-available": 1
},
"<key>": "<string>",
"<key>": "<string>"
}
我已经尝试删除“优先级”键,因为我看到有人说如果已经设置了“content_available”,我不应该设置优先级。它没用。
删除“通知”键值对并添加“content_available”:true
它看起来像这样
{
"to" : "...",
"priority": "high",
"content_available": true,
"data" : {
....
}
}
这应该使它成为一个静默的APNS,你需要处理相应的APNS委托方法。
您将需要通过委托处理此问题请参阅此firebase文档以获取详细信息:https://firebase.google.com/docs/cloud-messaging/concept-options
我找到了一个解决方法。我在“通知”字段中为“声音”设置了一个空值,即使应用程序在后台,也会传送静默通知。
{
"to" : "...",
"priority": "high",
"notification": {
"sound": ""
},
"data" : {
....
}
}
我的预感是Apple不允许以“高”优先级和某种方式“通知”的无声通知:{“声音”:“”}欺骗APNS,这个通知不是一个沉默的通知。
我正在使用nodejs处理Firebase静默推送通知。当我尝试下面的代码时,它工作正常。当我添加“priority”时:“high”和“content_available”:true,它给出了以下错误。
工作在下面的代码
const admin = require('firebase-admin');
const serviceAccount ="...."; //service account path
admin.initializeApp({
credential: admin.credential.cert(serviceAccount)
});
let fcmToken = "...."; // Your token
let message ={
"token": fcmToken,
"data": {
"updateApi": "activity"
}
}
admin.messaging().send(message)
.then((response) =>{
console.log('Successfully sent notification:', response);
})
.catch((error) =>{
console.log('Error while sending notification:', error);
});
在消息对象中添加优先级和content_available时出错
{ code: 'messaging/invalid-argument',
message: 'Invalid JSON payload received. Unknown name "priority" at \'message\': Cannot find field.\nInvalid JSON payload received. Unknown name "content_available" at \'message\': Cannot find field.' },
codePrefix: 'messaging' }
请按照文档中的说明关注documentation for server side并为json进行设置。我之前遇到过类似的问题并解决了这个问题。
{
"to" : "bk3RNwTe3H0:CI2k_HHwgIpoDKCIZvvDMExUdFQ3P1...",
"priority" : "high",
"content_available": true,
"notification" : {
"body" : "",
"title" : "",
"icon" : "new"
},
"data" : {
"volume" : "3.21.15",
"contents" : "http://www.news-magazine.com/world-week/21659772"
}
}
content_available = true和body,title empty执行任务。