通过GCM iOS推送通知不会在一夜之间发送

时间:2016-03-02 15:55:58

标签: ios google-cloud-messaging apple-push-notifications

我的应用程序如果已经在后台长时间(例如:过夜),则不会收到GCM推送通知。如果应用程序重新启动(双击主页,轻扫,重新启动应用程序),则排队的消息将被传递。

我们的应用程序接收数据有效负载,然后使用有效负载的内容构建iOS本地通知。

它适用于以下场景:前景中的应用程序,后台应用程序(点击主页按钮),应用程序被杀死(双击主页,轻扫应用程序)。

有效载荷

{
    "data": {
        "title":"Test Title",
        "message": "Message body",
    },
    "content_available":true,
    "priority": "high"
}

如果应用程序被杀,为什么它会起作用,但是当它已经在后台很长时间时却没有。是应用程序被终止还是被暂停?

好的,我做了一些测试,现在看来正在发生什么。

测试用例

注意:我们正在做一些GCM在他们的示例中没有做的事情。我们在应用启动时连接到GCM(不是applicationDidBecomeActive,我们在applicationDidEnterBackground期间不会与GCM断开连接)

应用程序在后台,设备未唤醒

  1. 触发GCM消息,没有任何反应
  2. 当设备被唤醒时(按住按钮),didReceiveRemoteNotification被调用,这会创建本地通知
  3. 应用程序被杀死(双击主页,轻扫应用程序),设备未唤醒

    1. 触发GCM消息,没有任何反应
    2. 当设备被唤醒时,应用didFinishLaunchingWithOptions会执行
    3. 因为我们在这里连接到GCM,所以它也会调用didReceiveRemoteNotification
    4. 那么为什么当应用程序在后台长时间没有用呢?

      我的理论是GCM在第一次设置时设置了一些后台任务。如果应用程序终止,此后台任务将侦听GCM消息并执行didFinishLaunchingWithOptions。但是,当应用程序暂停时,它可以在没有警告的情况下终止。如果发生这种情况,我会认为这个后台任务无法执行,并且由于应用程序终止,因此没有与GCM的连接。

      解决方案

      可能使用(ctrl-f) Hybrid messages with both notification and data payload

0 个答案:

没有答案