IOS 应用实现 Google 云消息仅在活动时接收通知
IOS App implementing Google Cloud Messaging receives notifications only when active
我在我的 IOS 应用程序中实施了新的 Google 云消息传递框架来处理推送通知。实施后,我只能在 App 处于活动状态且在前台时接收推送通知。如果应用程序已关闭或处于后台,我的设备中没有收到通知警报。在 iOS 通知设置中,我看到我的应用已启用接收它们。
Google documentations(在步骤4)引用:
If the GCMExample application is running in the foreground, you can
see the content of the notification printed to the Xcode debug
console; if the GCMExample app is in the background, you will receive
an APNS notification.
因此,为了在应用程序处于后台时接收消息,您必须将 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
: 高:当您发送应立即到达用户的通知时使用它,即时间紧迫的通知,例如游戏分数。
我遇到了类似的问题,只有当应用程序 运行 (foreground/background) 时应用程序才会收到通知,如果应用程序被手动终止(终止)则不会收到任何通知
我要做的就是在发送通知正文时将 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
。
我在我的 IOS 应用程序中实施了新的 Google 云消息传递框架来处理推送通知。实施后,我只能在 App 处于活动状态且在前台时接收推送通知。如果应用程序已关闭或处于后台,我的设备中没有收到通知警报。在 iOS 通知设置中,我看到我的应用已启用接收它们。
Google documentations(在步骤4)引用:
If the GCMExample application is running in the foreground, you can see the content of the notification printed to the Xcode debug console; if the GCMExample app is in the background, you will receive an APNS notification.
因此,为了在应用程序处于后台时接收消息,您必须将 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
: 高:当您发送应立即到达用户的通知时使用它,即时间紧迫的通知,例如游戏分数。
我遇到了类似的问题,只有当应用程序 运行 (foreground/background) 时应用程序才会收到通知,如果应用程序被手动终止(终止)则不会收到任何通知
我要做的就是在发送通知正文时将 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
。