我正在开发一个使用raix:push包来维护推送通知的Meteor + Cordova应用。而且我有一个非常简单的配置,仅针对APNS和开发模式,看起来像这样:
{
"apn-dev": {
"passphrase": "qwe[]\\qwe[]\\",
"key": "PushChatKey.pem",
"cert": "PushChatCert.pem"
},
"apn": {},
"gcm": {},
"production": false,
"badge": true,
"sound": true,
"alert": true,
"vibrate": true
}
它指的是正确放入私人/文件夹的文件PushChatKey.pem和PushChatCert.pem。密码是正确的。
我使用简单的服务器端发送推送通知:
Meteor.methods({
sendPushNotification: function ({userId = this.userId, title = 'Hello', text = 'and welcome!'} = {}) {
Push.send({
title,
text,
from: 'push',
badge: 14,
query: {
userId
}
});
}
});
问题在于,即使证书很好且配置正确,方法也可以调用
Meteor.call('sendPushNotification', {}, (error, response) => console.log(error, response))
什么都不做。它返回undefined
,并且error
和response
都未定义(如预期的那样)。甚至对notification
集合进行了一些简短的操作,一个项目出现,然后在我认为已发送适当的推送通知后消失。
问题是,移动设备上的应用实例永远不会收到任何通知。这可能是有原因的。在服务器端日志中,有消息
Settings userId "J5baP7xvbuTTX4KTk" for app: mytSJW2xrbKWRuGBZ
Send message "Hello" via query {}
Sent message "Hello" to 0 ios apps 0 android apps
所以我的问题是,我做错了什么?我在配置中或服务器端或客户端代码中遗漏了什么(我没有后者会引用推送通知)?有人遇到过同样的障碍吗?解决方案是什么?
答案 0 :(得分:0)
首先,我使用了错误的证书和密钥,这直接导致混淆Q& As和教程。我应该使用从Apple Developer仪表板下载的证书导出的证书和私钥,该证书是为响应我的证书请求而生成的证书。我使用的是正确的证书但错误的私钥。选择正确的私钥后,一切都很好,除了一件事。
由于某种原因(我仍然没有弄清楚原因),该应用程序仅在第二次或第三次启动后从Apple收到APN令牌,即在用户确认接收推送通知后不是,但有一些延迟。在再次启动应用之前,Push.appCollection
集合不会收到相应条目的更新。
更重要的是,即使代表移动设备上的应用的Push.appCollection
集合项也会出现延迟。但是,如果证书有效,它将得到保证。