我正在尝试使用node.js模块firebase-admin 7.0.0和以下代码向iOS设备发送静默数据通知:
// load lib
var firebase = require('firebase-admin');
// add API keys
firebase.initializeApp({
credential: firebase.credential.cert('./certs/firebase-private-key.json')
});
// device token send back from device
var token = '00397db1aa2f1fa625f71deef0c8e8ef0d4427cf60a13c0fb4bd290dcec41f4b';
// data message to send (contains no notification details so should be silent)
var message = {
data: {
key1: 'hello',
key2: 'world'
}
};
var options = {
priority: 'high',
timeToLive: 60 * 60 * 24,
contentAvailable: true,
mutableContent: true
};
// send the message
firebase.messaging().sendToDevice(token, message, options).then(function (res) {
// it worked!
console.log(res);
})
.catch(function (err) {
// it failed :(
console.log(err);
});
我收到一条回复,说邮件已发送,但从未到达设备。而如果我使用NWPusher发送消息,则(以下示例有效负载)可以正常工作:
{"aps":{ "content-available": 1,"badge":0, "hello": "there" }}
有什么想法吗?
仅供参考:我也在GitHub上打开了一张票证
答案 0 :(得分:2)
您的代码看起来正确。您可以在可变内容和可用内容中尝试对与错的多种组合。 您也可以尝试不发送mutableContent字段。但是据我记得,两者都应该是正确的。
另一种调试方法是检查从nodejs输出的json。您可以尝试相同 NWPusher或PostMan中的有效负载。这会给你一些线索。
我已经在邮递员中尝试了以下有效负载,对我来说它工作正常
{"mutable_content":true,"content_available" : true,"priority":"high","registration_ids":["d3-fa7XDQQ4:APA91bEKXbT3HAv6ko9RukcxaB4QBr8zOIT06CBpj9o0Sl6TxsMpTnAMQ86t14foIcuQuDUyzMApbvDORELYyD0WOX3BcfP7ZNtWx9uY0JGm2B7cmdlPoOFs68fe6rz3Q7tq_8Ib7Y4H"]}
答案 1 :(得分:0)
对于无声通知,您需要确保以下几点:
1-您的有效负载中没有alert
键
2-您的有效载荷中有content-available" : 1
3-启用了推送通知的后台模式(选择目标>功能>后台模式>远程通知)
有效载荷样本:
{
"aps" : {
"content-available" : 1
},
"acme1" : "bar",
"acme2" : 42
}
有关更多信息,请查看Apple的参考文献:Pushing Updates to Your App Silently
答案 2 :(得分:0)
对于仍然有此问题的任何人,正如 Gokul 所说,代码很好
只要确保您按照 Apple docs
中的步骤进行操作特别要确保您向 AppDelegate 添加了正确的回调:
application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
请注意,它与用于处理常规通知的不同application(_:didReceiveRemoteNotification:)
还要确保在项目设置中的后台模式下打开远程通知,如here所述:
答案 3 :(得分:-1)
这是PHP版本,可用于iOS静默发送。请添加'content-available'=> 1进行静默通知
$body = array(
'content-available' => 1,
'sound' => ''
);
{
"aps" : {
"alert" : "Notification with custom payload!",
"badge" : 1,
"content-available" : 1
},
"data" :{
"title" : "Game Request",
"body" : "Bob wants to play poker",
"action-loc-key" : "PLAY"
}
}