我在生产模式下遇到iOS推送通知问题。
我首先开发了Push for development:
一切都适用于Android和iOS。
然后我转投制作:
我总是用Postman测试Push:
使用正文
将 POST 发送到https://api.ionic.io/push/notifications
{
"tokens": [
"<ios token>",
"<android token>"
],
"profile": "live",
"notification": {
"message": "test",
"ios": {
"priority": 10
},
"android": {
"priority": "high"
}
}
}
响应:
{
"data": {
"status": "open",
"config": {
"profile": "live",
"notification": {
"android": {
"priority": "high"
},
"ios": {
"priority": 10
},
"message": "test"
},
"tokens": [
"<ios token>",
"<android token>"
]
},
"created": "2017-02-14T15:07:58.988762+00:00",
"app_id": "<app id>",
"uuid": "<uuid>",
"state": "enqueued"
},
"meta": {
"status": 201,
"request_id": "<request id>",
"version": "2.0.0-beta.0"
}
}
要查看正在发生的情况,我随后会发送 GET 到https://api.ionic.io/push/notifications/
<uuid>
/messages
({{ 1}}来自第一个响应)并得到以下响应:
uuid
我注意到响应中缺少相应{
"data": [
{
"status": "sent",
"created": "2017-02-14T15:07:59.165266+00:00",
"user_id": null,
"token": {
"token": "<android token>",
"valid": true,
"type": "android",
"app_id": "<app id>",
"invalidated": null,
"id": "<id>",
"created": "2017-02-14T14:27:27.585235+00:00"
},
"error": null,
"notification": "<notification uuid>",
"uuid": "<message uuid>"
}
],
"meta": {
"status": 200,
"request_id": "<request id>",
"version": "2.0.0-beta.0"
}
}
的数据
我想知道为什么甚至没有Ionic Docs中列出的错误响应
如果我使用 dev 安全配置文件发送这两个请求,我会获取iOS的数据,说明“错误”(<ios token>
) - 这是正确的。
我已经尝试重新创建证书和内容,这不会改变结果。我还等了一整天才收到通知,万一有些事情需要很长时间。我确信我在Xcode中使用正确的配置文件构建了应用程序。
我正在使用Xcode 8.2 - 并确定在功能中启用“推送通知”。
我错过了什么?
答案 0 :(得分:0)
在联系Ionic支持后,他们提出了检查令牌是否有效的想法。
操作方法记录在their docs:
中 (GET) https://api.ionic.io/push/tokens/:token_id
(其中token_id
是设备令牌的md5哈希值)
我在Postman中添加了一个预请求脚本,如:
var token = "<your-device-token-to-check>";
var hash = CryptoJS.MD5( token ).toString();
postman.setEnvironmentVariable('token_hash', token);
...并将新环境变量作为参数(不在请求网址中)添加为key: (leave empty); value: ":{{token_hash}}"
然后我发现,我的所有iOS令牌在注册后不久就失效了。这就是我们的第一次测试成功和进一步发展突然失败的原因 在检查Ionic API的通知状态时,我不知道为什么他们会在响应中被遗漏。我建议支持添加错误响应(据我所知,已经有一个:&#39; APNS_BAD_DEVICE_TOKEN&#39; as&#34; 指定的设备令牌是坏的。验证您是否指定了有效的令牌 [...]&#34;。)
因为我无法解释原因,我只是重新创建了新的配置文件和证书(再次!),并从Mac上的Keychain Access中删除了旧配置文件和证书。我重新构建了应用程序,一切都很顺利。奇怪的...