【发布时间】:2015-06-10 11:13:56
【问题描述】:
我已经在我的 IOS 应用程序中实现了新的 Google Cloud Messaging 框架来处理推送通知。实施后,我只能在应用程序处于活动状态且处于前台时接收推送通知。如果应用程序已关闭或在后台,我的设备中没有收到通知警报。在 iOS 通知设置中,我看到我的应用已启用接收它们。
【问题讨论】:
标签: ios google-cloud-messaging
我已经在我的 IOS 应用程序中实现了新的 Google Cloud Messaging 框架来处理推送通知。实施后,我只能在应用程序处于活动状态且处于前台时接收推送通知。如果应用程序已关闭或在后台,我的设备中没有收到通知警报。在 iOS 通知设置中,我看到我的应用已启用接收它们。
【问题讨论】:
标签: ios google-cloud-messaging
我遇到了类似的问题,只有当应用程序正在运行(前台/后台)时应用程序才会收到通知,并且如果应用程序被手动终止(终止)则不会收到任何通知
我所要做的就是在发送通知正文时将priority 和content_available 添加到通知正文中(正如@KayAnn 指出的那样)
它应该是这样的:
{
"to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
"content_available" : true,
"priority": "high",
"notification" : {
"body" : "Winter is coming!",
"title" : "John Snow"
}
}
请记住,我在Info.plist 中也有UIBackgroundModes: remote-notification。
【讨论】:
谷歌documentations(在步骤4中)引用:
如果 GCMExample 应用程序在前台运行,您可以 查看打印到 Xcode 调试的通知内容 安慰;如果 GCMExample 应用程序在后台,您将收到 APNS 通知。
因此,为了在应用程序处于后台时接收消息,您必须将 APNS 注册为选项,如下所述here。
_registrationOptions = @ {
kGGLInstanceIDRegisterAPNSOption: deviceToken,
kGGLInstanceIDAPNSServerTypeSandboxOption: @YES
};
编辑:
您还需要做一些其他的事情:
1)在发布应用程序时移至生产证书
在 JSON 有效负载中:
2) 使用"content_available": "true" 或
3) 设置"priority": "high"
编辑:2
在同一有效负载中使用content_available 和priority high 与Apple 的建议(Apple docs)相冲突。我在测试过程中遇到了这个问题。在这种情况下,消息可能会受到限制。
请改用这两个参数中的一个/或。
关于工作用例的提示:
- content_available:仅在您发送数据且没有其他通知特定参数(如警报、徽章、声音等)时使用。这是因为默认情况下 content_available 消息是静默推送。
- Priority: high:当您发送应该立即到达用户的通知时使用它,即时间紧迫的通知,例如游戏分数。
【讨论】: