【问题标题】:How does WhatsApp handle silent push notifications on iOS when app was killed by user?当应用程序被用户杀死时,WhatsApp如何处理iOS上的静默推送通知?
【发布时间】:2018-09-24 14:41:37
【问题描述】:

据我所知,当用户通过多任务 UI 终止应用程序时,静默推送通知不会调用 application:didReceiveRemoteNotification:fetchCompletionHandler:。但是在查看 WhatsApp 的行为时,我不明白他们是如何做到以下几点的:

  • 将频道静音
  • 强制退出 WhatsApp
  • 在静音频道中接收消息
  • 显示徽章
  • 更令人惊讶的是 =>
  • 不启动 WhatsApp,启动飞行模式
  • 现在启动 WhatsApp => 文本显示在正确的位置

这意味着 WhatsApp 以某种方式管理它来处理推送通知的接收,尽管该应用程序已被终止。有谁知道怎么做?与.badge.alert,...?

【问题讨论】:

  • 静默推送通知确实调用了application:didReceiveRemoteNotification:fetchCompletionHandler: 方法。 Check out this link。它表示系统会在后台唤醒您的应用并给您 30 秒的时间来执行任何任务
  • 但这仅适用于应用程序在后台,而不是应用程序被用户杀死(强制退出)。
  • 即使用户强制退出应用程序,我相信只要您在 plist 中为 UIBackgroundModes 键设置 remote-notification 值,它应该会在后台模式下唤醒您的应用程序。我记得去年在一个应用程序上工作时的这一点。不幸的是,我现在无法测试它,因为它是我不再为它工作的过去客户。
  • 您是否在点击通知然后在应用中看到文字?或者即使您强制退出并且不要点击通知(而不是点击应用程序图标),它仍然会捕获文本?如果是后者,那么我猜这是由于 WhatsApp 使用了 PushKit,因为它是一个 Voip 应用程序(badgeCount 让我有更多理由认为这是因为 voip)Voip 规则与推送通知规则不同。见here
  • 注意 1:当您将频道静音时,您永远不知道 WhatsApp 在做什么。我会以不同的方式对其进行测试,请参阅here。我做了 1. 关闭了 Wifi,但保持蜂窝数据打开 2. 禁用了应用程序对蜂窝数据的访问 3. 然后我有人给我发了一条消息 4. 注意 2:我没有关闭通知,因为通知是在操作系统级别(而不是应用程序级别)管理的,所以它们仍然可以通过。注意 3:我不确定当我进行测试时 WhatsApp 是否有 voip。

标签: ios push-notification silentpush


【解决方案1】:

还有其他方法可以更新您的应用程序。另一种方法是使用background app refresh。后台应用刷新可让您的应用定期在后台运行,以便更新其内容。

--编辑添加其他可能的方法:--

在应用程序被杀死后可以在短时间内(固定长度的时间)使用的另一种方法是请求background execution time。这可以让应用有更多的运行时间。

对于需要更多执行时间来执行的任务,您必须请求特定权限才能在后台运行它们而不会被暂停。在 iOS 中,only specific app types are allowed to run in the background。例如,支持互联网协议语音 (VoIP) 的应用或充当蓝牙 LE 附件的应用。

--编辑#2--

从 WhatsApp 应用程序的 info.plist 看来,它使用了多个 UIBackgroundModes,它们中的任何一个都可以用来唤醒/保持应用程序在后台。

WhatsApp 的 info.plist 部分:

<key>UIBackgroundModes</key>
<array>
    <string>audio</string>
    <string>fetch</string>
    <string>remote-notification</string>
    <string>voip</string>
</array>

【讨论】:

  • 但这还不够快,我收到推送后立即下线
  • @swalkner 我已经更新了答案以包含更多实现更快刷新的方法。
猜你喜欢
  • 2015-12-30
  • 2018-12-20
  • 1970-01-01
  • 1970-01-01
  • 2017-06-07
  • 1970-01-01
  • 2015-12-13
  • 2017-04-12
  • 1970-01-01
相关资源
最近更新 更多