静默推送消息,如果应用程序处于后台并拔下电源,则无法做出反应
Posted
技术标签:
【中文标题】静默推送消息,如果应用程序处于后台并拔下电源,则无法做出反应【英文标题】:Silent push message, can´t react if app is in background and unplugged 【发布时间】:2015-02-02 13:58:31 【问题描述】:我正在尝试对静默推送消息做出反应。我在我的 plist 文件中为我的应用注册了两种背景模式。
我将以下 json 发送到我的应用程序:
"aps":
"content-available": 1
,
"Bla": "Blub"
如果我的应用程序在前台,一切正常。当我收到推送时,我在我的代码中执行了一个函数。如果我的应用程序在后台并插入我的 Mac 或 ac,一切都很好......但是如果我拔掉我的设备,设备将无法获取,或者至少我的函数不再被调用......为什么会这样?
【问题讨论】:
【参考方案1】:我理解静默通知的工作方式是它们可以发送,系统可能会收到它们,但可能不会根据不同的因素对它们采取行动。
静默通知用于给人一种在节能设备上执行多任务的错觉。我的理解是,系统使用一些因素来确定是否应该将静默通知传递给应用程序,其中包括:
当前网络状况 当前功率水平 应用程序使用情况。 用户选择 可能耗电。在您的情况下,静默通知在前台工作,因为您是最重要的应用程序。用户可能正在执行不立即涉及内容的任务。但内容更新可能很有用。例如,使用 Facebook,我可能会在朋友墙上写一篇文章,我的提要中有新故事。很高兴在我做其他事情的时候更新它。
对于连接到计算机的情况 - 设备正在充电,执行后台任务不会消耗设备电池。
要详细说明因素:
网络状况
如果设备使用 wi-fi,则更有可能允许网络通话,因为这不像使用蜂窝数据那样耗电。当前功率水平
这也与网络状况有关。 是否在相关无线电已开启时收到通知? 这也可能与基于设备历史记录的当前位置相关联。如果该位置被确定为“家”,则可以假定该设备靠近电源。 时间也可能是其中的一个因素。例如“设备开始充电的平均时间是多少,是否关闭等。” 设备是否已连接到电源?应用程序使用情况
用户使用您的应用程序的频率如何?使用模式是什么? 是否在允许应用更新其内容的时间收到通知?一个可能的例子是,用户可能会在接下来的 10 分钟到 1 小时内使用该应用程序。更新内容可能是有意义的。但如果用户有可能在接下来的 2 分钟或 2 小时内使用该应用程序。它可能会推迟此操作,因为它可能很快由用户启动或不会很快使用,这会浪费资源。用户选择
用户可以随时选择停止后台数据刷新。 用户可以选择不允许您的应用使用蜂窝数据。 虽然超出了您的问题的范围,但我认为应该注意的是,不应假定静默通知总是通过,也不应成为您的应用程序的关键部分。可能的电力消耗
与其他因素相比,我认为这不存在,但需要牢记。 您在执行此后台任务时,过去的耗电量如何? 如果您是一个好公民,尽可能提高能源效率等,您可能更有可能被要求更新。 但是,如果您在执行此任务时在系统视图中没有尽可能节能,您可能不会收到太多通知。据我所知,这些因素不是确定的、证明的或陈述的。我根据 WWDC 会谈、之前的背景任务限制和我自己的假设将它们作为可能的原因提出。但我希望它们能帮助您了解为什么您的静默通知在某些情况下有效,而在其他情况下无效。
【讨论】:
感谢您提供的信息...这听起来很可靠...我也进行了一些研究,并确定在 ios 7 中并非如此。我想知道为什么 Apple 从 iOS8 开始这样做。 .@Naughty_Ottsel @Naughty_Ottsel 由于静默通知取决于很多因素,这是否表明我们不应该使用它?我正在测试静默通知,它在后台运行良好。但是,第二天,该应用程序停止接收它。发现当设备连接xcode时,没有问题。但是,一旦设备断开连接,它就无法工作。是否有任何可能的破解方法来解决这个问题?我正在使用 ios 11.4以上是关于静默推送消息,如果应用程序处于后台并拔下电源,则无法做出反应的主要内容,如果未能解决你的问题,请参考以下文章