在未运行时通过静默通知启动 iOS 应用程序

Posted

技术标签:

【中文标题】在未运行时通过静默通知启动 iOS 应用程序【英文标题】:Launching iOS app when it's not running via silent notifications 【发布时间】:2017-03-26 21:17:13 【问题描述】:

根据Apple's official documentation,如果有人发送“静默通知”,即带有content-available: 1 的通知,我们有

对于后台下载应用程序:应用程序的推送通知到达 并且通知的有效负载包含内容可用密钥 值为 1。系统在机会主义时刻唤醒应用程序 开始下载新内容。对于下载内容的应用程序 后台使用 NSURLSession 类,所有任务关联 该会话对象要么成功完成,要么收到一个 错误。报亭应用启动的下载完成。

该文件中也有说明

应用程序通常在用户看到通知的大致同一时间被唤醒,但这仍然会给您比其他情况下更多的时间。

如何解释这个?如果在 plist 中使用 UIBackgroundModeremote-notification 提交应用程序,这是否意味着如果我们发送远程通知,该应用程序实际上是在后台启动?即使用户重启了 ios 设备,并且没有启动我们的应用程序?即使用户之前强制退出我们的应用程序?

我的问题是,上述期望有多可靠?有没有人对此有过直接的经验并对此进行了测试,并且在您的经验中 100% 都是正确的?

【问题讨论】:

【参考方案1】:

来自苹果

配置静默通知

aps 字典也可以包含 content-available 属性。 值为 1 的 content-available 属性允许远程 通知充当静默通知。当无声通知 到了,iOS 会在后台唤醒你的应用,这样你就可以得到 来自您的服务器的新数据或进行背景信息处理。 用户不会被告知产生的新信息或更改信息 从一个无声的通知,但他们可以在下一个找到它 他们打开您的应用的时间。

对于无声通知,请注意确保没有警报, aps 字典中的声音或徽章有效负载。如果你不关注 在本指南中,错误配置的通知可能是 节流且未在后台传送到应用程序,而是 向用户显示保持沉默的状态

iOS 会唤醒您的应用,并让您在 30 秒内下载所需的任何内容。请记住,通知并不可靠,因此您不能相信它们会 100% 到达。如果您有非常重要的数据要显示,则需要验证您的应用在用户打开它时是否已同步。后台抓取只是为了改善用户体验

【讨论】:

以上是关于在未运行时通过静默通知启动 iOS 应用程序的主要内容,如果未能解决你的问题,请参考以下文章

当我收到静默推送通知时,iOS 会唤醒我的应用程序吗?(当应用程序未处于运行状态时)

收到静默推送通知且应用在后台运行时执行几行代码,ios

iOS - 当应用程序被用户强制退出时处理静默推送通知

当应用程序未运行时,通过静默推送通知在后台更新本地数据库

当应用程序在 iOS 11.4.1 中处于后台时,静默通知不起作用

当该应用的通知关闭时,在 Android 上接收 Firebase 静默通知