iOS - 我需要静默推送后的处理时间

iOS - i need processing time after silent push

我的应用程序利用推送通知在用户收到消息时提醒他们。由于我的服务器的性质以及加密,服务器不知道消息是什么,只有 iPhone 能够解密它。但是,我希望消息显示在通知中。所以我需要静默推送后的处理时间来下载和解密消息然后使用本地通知告诉用户

但是,iOS 不允许处理已终止的应用程序,仅针对前台应用程序或仍在应用程序切换器中的应用程序。我该如何解决这个问题?

我找到的一个解决方案是 PushKit。这似乎会重新启动应用程序,即使它们已被强制退出。但是,它只对 VoIP 应用程序执行此操作,我的应用程序不是 VoIP 应用程序,如果我使用 PushKit

,我认为 App Review 会拒绝它

和你描述的完全一样,没有什么要补充的。如果应用程序被杀死,除了 PushKit 之外,你没有办法处理静默推送通知,但是如果你使用 PushKit,如果你的应用程序没有实现 VoIP,则不会通过审核。

你最好的选择是发送带有通用文本的推送通知(例如 "You have a new message")而不是静默推送通知,这将作为应用程序被终止的情况的后备。如果应用程序未被杀死,您可以 discard/remove 远程通知,下载和解密消息并显示包含实际消息的本地通知。如果应用程序被终止,将显示带有通用文本的远程通知,并且至少会通知用户有一条新消息。

将此行为添加到您应用的常见问题解答中,以鼓励用户不要终止该应用。无论如何都没有理由在 iOS 上执行此操作,因此如果用户终止了某个应用程序,他不应该指望它会按预期运行。

关于为此滥用 PushKit 的补充: 如果您将 functionality/service 误用于不应该用于的用途,您的应用可能会被拒绝。因此,如果您启用了 VoIP 后台模式,但您的应用程序不提供任何 VoIP 功能,这是很明显的。 来自 App Store Review Guidelines:

2.16 Multitasking Apps may only use background services for their intended purposes: VoIP, audio playback, location, task completion, local notifications, etc.