【问题标题】:iOS silent push notificationiOS 静默推送通知
【发布时间】:2018-12-05 22:20:42
【问题描述】:

我正在尝试在我的应用程序中实现静默推送通知,当静默通知到来时,我需要更新服务器中的一些数据。我正在使用 Pushkit,它使用 VoIP 证书进行静默推送通知,但该应用程序已被 Apple 拒绝,称“我不能使用 VoIP”证书。似乎苹果拒绝了它,因为我的应用程序中没有任何 VoIP 通话功能。在这种情况下,我如何实现静默推送通知,以便即使我的应用程序没有运行(甚至在后台也不运行)也能被激活并且我可以更新服务器?

【问题讨论】:

  • 只有当您可以在您的应用程序中实际实现基于 VoIP 的功能时,您才能使用 VoIP 后台模式。如果用户从应用切换器中终止应用,则无法唤醒应用。

标签: ios swift3 push-notification apple-push-notifications silent-notification


【解决方案1】:

根据我的经验,iOS 尊重用户的选择,因此如果用户杀死了应用程序,它将保持被杀死 - 没有静默推送通知会唤醒这个应用程序。 VoIP 是一个例外,但正如您所写,它应该只在 VoIP 应用程序中使用。这是有道理的,将其视为平台限制:由于用户可以控制手机上实际运行的内容,因此设备消耗的电池更少,最后,前台/系统应用程序的 CPU 时间最多。

在后台处理数据的技术很少:

  1. 内容可用推送通知:将在应用程序暂停时唤醒应用程序,或在应用程序被系统杀死/崩溃时启动它。请注意,这只会打开一个 30 秒的窗口,并且通知数量会受到 APNS 的限制。
  2. 后台获取功能将以类似的方式运行。
  3. 完成现有任务的后台任务 - 但这仅在应用移至后台时使用。

如果您需要 App 向服务器发送更新,我相信以上内容就足够了(除非您的 App 正在监视用户,否则一旦用户完成与 App 的交互,它应该拥有所有相关数据)。

如果您需要服务器向应用程序发送数据,请使用静默推送通知(或后台获取定期拉取),或者如果此数据对用户至关重要,您可以向他发送远程通知 - 如果用户认为这是一个重要的更新,他会打开应用程序。

【讨论】:

  • 静默推送通知就像普通推送通知一样工作,只是它不会产生横幅。 “没有静默推送通知会唤醒这个应用程序”,这是不正确的。在静默推送通知的情况下,当通知到达时,操作系统会激活应用程序的 appdel 并调用didRecieveNotification,时间限制为 30-60 秒。
  • 上次我在设备上测试它(这是在 iOS 11 之前),如果我明确杀死应用程序,则不会收到静默推送通知。它确实唤醒了应用程序,以防它在后台暂停运行。
  • 不,它确实会唤醒应用程序,但用户无法理解它,因为操作系统会在挂起状态而不是活动状态下唤醒它
  • 我刚刚在 iOS 11 上使用生产应用程序对其进行了测试:服务器发送了常规(非 VoIP)内容可用推送通知,并且 iOS 在应用程序被杀死后没有唤醒它。
  • 你是如何测试它的?您是否正在更改计划以在事件中醒来?您如何调试电话以使其在调试时处于终止状态?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多