在2-3小时不活动后未收到iOS后台推送通知

mon*_*uno 19 notifications background push ios

我的应用通过推送通知执行静音背景提取.一切正常,当用户在最近60分钟内打开应用程序或在60分钟内发送推送通知时,即使设备已锁定,从我们的服务器发送的推送通知也会按预期触发静默背景提取.

但是,当用户未在2-3小时内打开应用程序或未在2-3小时内发送推送通知时,应用程序未收到推送通知.我一直在记录应用程序活动,我已经确认:

didReceiveRemoteNotification:fetchCompletionHandler:
Run Code Online (Sandbox Code Playgroud)

没有在应用代表上调用.

还有一些事实:

  1. 在应用程序的plist.info中,我将UIRequiresPersistentWiFi设置为true,将UIBackgroundModes设置为(仅)远程通知
  2. 推送通知有效负载仅包含内容可用密钥
  3. 经过2-3小时不活动(无法发送推送通知或没有用户活动),我在iPhone 5和仅支持Wifi的iPad 2上都看到相同的结果,两者都运行iOS 8.1.2.换句话说,互联网连接是无线电还是无线网络无关紧要.
  4. 我不相信我达到了速率限制的界限,因为我每小时每台设备最多只能发送1-2次推送通知.

我的理解是iOS应该继续在后台唤醒应用程序并使其能够处理推送通知中的后台提取 - 即使在几小时不活动之后(只要设备处于唤醒状态并且具有互联网连接).

我想知道是否有其他人经历过这个,如果有的话,如果你找到了解决方法.

提前致谢!

Luk*_*asz 0

没有这样的解决方法。您可以尝试PushKit(iOS VOIP 推送通知),它更可靠,但仅限 iOS8,或者 VOIP 持久套接字,从 iOS7 开始可用(更困难)。

Apple 不保证立即传送后台/获取推送通知(包含:)content-available=1。这些通知旨在让应用程序a chance在运行之间更新其内容,而不是“ immediate”也不可靠。

iOS 将根据未记录的能源相关条件决定何时发送此通知。

换句话说 - 你的应用程序才会收到通知,只有当 iOS 决定时,它不会影响电池。根据我的观察,这取决于很多因素,例如:

  • 如果您的设备已连接到电源,
  • 使用3G Wi-Fi,
  • 距上次通知的时间,
  • 处理最后一个时使用的能源和数据带宽应用程序,itd...
  • 最近何时以及如何使用设备(锁定/解锁屏幕)

我什至注意到在调试会话中运行的应用程序(通过 Xcode,通过电缆连接)之间的差异 - 通知总是被传递,当我从 Springboard / 在发布模式下启动应用程序时(不同的能量条件) - 然后它开始行为异常。