未运行状态下的远程通知处理

Posted

技术标签:

【中文标题】未运行状态下的远程通知处理【英文标题】:Remote Notification Handling on Not Running State 【发布时间】:2017-08-11 11:05:26 【问题描述】:

我有一个很长时间想不通的问题。我知道我无法在“未运行”状态下同步我的应用程序。但让我展示一个简单的场景:

    我杀死了 WhatsApp。它没有运行。 我从另一台设备发送消息。 收到远程通知并显示警报。 我在接收设备上激活了“平面模式”。 然后我启动 WhatsApp。 由于“平面模式”,它无法同步消息,但我看到收到远程通知的新消息。

我在 ios 9 和 iOS 10 设备上测试了这个场景。怎么可能?谁能解释一下?

【问题讨论】:

【参考方案1】:

我认为他们正在使用远程通知后台模式。

“如果您的应用程序有新内容可用时您的服务器向用户的设备发送推送通知,您可以要求系统在后台运行您的应用程序,以便它可以立即开始下载新内容。这种后台模式是为了尽量减少从用户看到推送通知到您的应用能够显示相关内容之间的时间量。应用通常在用户看到通知的大致同一时间被唤醒但这仍然会给您比其他方式更多的时间。”

这是来自开发者苹果。您可以在“使用推送通知启动下载”下阅读更多详细信息 in this artice。

希望它会有所帮助。

【讨论】:

感谢您的关注。我阅读了这个文档并构建了一个支持后台获取的应用程序。但是当它处于“未运行”状态时,它并没有唤醒我的应用程序。 (或者我做错了什么。)你可以看到这些是不同的术语背景和非运行状态。参考:developer.apple.com/library/content/documentation/iPhone/… 后台获取的想法是系统会自动唤醒(在后台运行)您的应用程序。没有机会调试它。您可以通过对后端进行一些调用来测试它,看看是否有。因此,即使应用程序没有运行,iOS 也会在您收到远程通知时运行它。 是的,它应该可以工作。我会解释我的代码,也许你可以找出我缺少的东西。 1-) 我在 Xcode 项目的 Capabilities 选项卡的 Background mode 部分启用了远程通知选项。 2-) 我在手机上检查了我的应用程序设置是否有“背景刷新”。 3-) 我的有效负载中有 content-available=1 。 "alert = "Test";badge = 1;"content-available" = 1;sound = "ring-ring.aiff";" 4-) 我实现调用我支持的应用程序:didReceiveRemoteNotification:fetchCompletionHandler:当应用程序未运行时。 5-) 我的后端没有调用.. 文档说:“有效负载的 aps 字典必须包含值为 1 的内容可用键。有效负载的 aps 字典不能包含警报、声音或徽章键。”我试过这样,它也没有用.. 尝试在 application:didReceiveRemoteNotification:fetchCompletionHand‌​ler: 中开始后台任务,然后下载您的内容。后台任务应该让您的应用在后台模式下保持 3 分钟或直到您完成它。

以上是关于未运行状态下的远程通知处理的主要内容,如果未能解决你的问题,请参考以下文章

应用程序未运行时的 iOS 10 远程通知

IOS5:图标标记处于非运行状态

静默通知未进入应用程序未运行状态?

静默推送通知是不是能够唤醒 ios 中处于未运行状态的应用程序?

linux 下的小知识

应用程序未运行时处理远程通知时崩溃