【问题标题】:iOS background push notifications not received after 2-3 hours of inactivity闲置 2-3 小时后未收到 iOS 后台推送通知
【发布时间】:2015-02-14 07:54:04
【问题描述】:

我的应用通过推送通知执行静默后台获取。一切正常,当用户在过去 60 分钟内打开应用程序或在 60 分钟内发送了推送通知时,从我们的服务器发送的推送通知会按预期触发后台静默获取 - 即使设备已锁定。

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

didReceiveRemoteNotification:fetchCompletionHandler:

未在应用委托上调用。

更多事实:

  1. 在应用程序的 plist.info 中,我已将 UIRequiresPersistentWiFi 设置为 true,并将 UIBackgroundModes 设置为(仅)远程通知
  2. 推送通知负载仅包含内容可用密钥
  3. 在闲置 2-3 小时后(未发送推送通知或未发送用户活动),我在运行 iOS 8.1.2 的 iPhone 5 和仅支持 Wifi 的 iPad 2 上看到了相同的结果。换句话说,互联网连接是蜂窝网络还是 Wifi 并不重要。
  4. 我认为我没有达到速率限制,因为我每小时每台设备最多只能发送 1-2 条推送通知。

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

我想知道是否有其他人经历过这种情况,如果有,您是否找到了解决方法。

提前致谢!

【问题讨论】:

  • 我们也有类似的问题。如果我在较长时间不活动后发送 "content-available":1 通知,它会被忽略。但是,如果我发送“常规”通知,它会出现在手机上。我真的找不到模式,因为例如我在一夜之间留下了两部手机,其中一部回应了,而另一部则没有。您是否设法找到导致问题的进一步原因?
  • 大家找到解决方案了吗?我也有同样的问题...
  • @Jacob,您是否尝试发送带有空“声音”键的有效负载?这通常有效
  • @Sega-Zero 我发送了“”作为声音键,是的。
  • 尝试发送带有 0 标记(或之前设置的数字)的有效负载,然后内容可用。希望这会强制将有效负载发送到应用程序。

标签: ios background notifications push


【解决方案1】:

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

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

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

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

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

我什至注意到在调试会话中运行的应用程序(通过 Xcode,通过电缆连接)之间的区别 - 始终发送通知,当我从 Springboard 启动应用程序/处于发布模式(不同的能量条件)时 - 然后它开始出现异常行为。

【讨论】:

  • 如果我从有效负载中删除了内容可用密钥怎么办?应用程序空闲后我仍然遇到问题。只是看起来很随意。我永远不记得在我的手机上没有收到通知,现在它一直在 iPad 上发生。
  • 当您删除 content-available 标志时,当应用程序本身在后台时,将永远不会调用委托方法。你只会在通知中心看到横幅,你需要点击它(与之交互)来调用回调。
  • 该应用程序始终在前台。这就是为什么我不理解这些差异,因为应该始终调用该方法。
  • @Jacob 我有点困惑,因为您写道,您在应用程序“空闲”之后遇到问题,然后它“始终处于前台”。应用程序处于前台这一事实并不意味着它处于活动状态。当屏幕锁定时(变暗后) - 应用程序进入非活动状态。这就是你所说的“空闲”吗?
  • 我将应用程序的空闲计时器设置为完全不使屏幕变暗。因此接收 iPad 应用程序始终处于打开状态并处于前台,并且屏幕不会在任何时候变暗或锁定。
【解决方案2】:
 [[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
 [[UIApplication sharedApplication] registerForRemoteNotifications];

【讨论】:

  • 您能否评论一下这段代码的实际作用,而不仅仅是将其发布为答案?
【解决方案3】:

在你的 info.plist 中试试这个对我有用。

这将唤醒您的应用以在后台模式下接收通知。

【讨论】:

    【解决方案4】:

    通过

    目标 > 功能 > 背景模式

    开启后台模式

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-08-02
      • 1970-01-01
      • 2019-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-28
      • 1970-01-01
      相关资源
      最近更新 更多