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_availablepriority high 与 Apple 的建议 (Apple docs) 冲突。我在测试期间遇到过这个。在这种情况下,消息可能会受到限制。

改用/或这两个参数。
关于工作用例的提示:
- content_available:当您仅发送数据并且没有其他通知特定参数(如警报、徽章、声音等)时使用。这是因为默认情况下 content_available 消息是静默推送。
- Priority: 高:当您发送应立即到达用户的通知时使用它,即时间紧迫的通知,例如游戏分数。

我遇到了类似的问题,只有当应用程序 运行 (foreground/background) 时应用程序才会收到通知,如果应用程序被手动终止(终止)则不会收到任何通知

我要做的就是在发送通知正文时将 prioritycontent_available 添加到通知正文中(正如@KayAnn 指出的那样)

它应该是这样的:

{
  "to" : "APA91bHun4MxP5egoKMwt2KZFBaFUH-1RYqx...",
  "content_available" : true,
  "priority": "high",
  "notification" : {
    "body" : "Winter is coming!",
    "title" : "John Snow"
    }
}

请记住,我在 Info.plist 中也有 UIBackgroundModes: remote-notification