【发布时间】: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