我在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”,我就不应该设置优先级。它不起作用。
答案 0 :(得分:14)
删除&#34;通知&#34; 键值对并添加&#34; content_available&#34;:true
看起来像这样
{
"to" : "...",
"priority": "high",
"content_available": true,
"data" : {
....
}
}
这应该使它成为一个无声的APNS,你需要处理相应的APNS委托方法。
您需要通过代表处理此问题 有关详细信息,请参阅此firebase文档:https://firebase.google.com/docs/cloud-messaging/concept-options
答案 1 :(得分:3)
我找到了解决方法。我为&#34;声音&#34;设置了空值。在&#34;通知&#34;即使应用程序处于后台,也会传送字段和静默通知。
{
"to" : "...",
"priority": "high",
"notification": {
"sound": ""
},
"data" : {
....
}
}
我的预感是,Apple不允许使用“高”的声音进行无声通知。优先级和某种方式&#34;通知&#34;:{&#34;声音&#34;:&#34;&#34;}欺骗APNS,这个通知不是沉默的。
答案 2 :(得分:1)
我正在使用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' }
答案 3 :(得分:0)
如果你使用的是云函数,我发现了很多信息,甚至在官方文档中已经过时,或者与打字稿接口不同。
这终于对我有用了。与其设置 alert: ""
,不如 将其排除,它是可选的。对于自定义属性,您可以添加到 message.apns.payload。
fcmToken 应该是用户设备上的令牌。
const message: TokenMessage = {
token: fcmToken,
apns: {
headers: {
"apns-priority": "5",
},
payload: {
aps: {
contentAvailable: true,
},
my_custom_parameter: true,
},
},
};
admin
.messaging()
.send(message)
.then(() => {
// do something.
})
.catch((error) => {
functions.logger.error(
"Error sending push notification: " + error.toString()
);
// Do something.
});
};
答案 4 :(得分:-2)
请按照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执行任务。