静默推送消息,如果应用程序处于后台且未插电则无法做出反应
Silent push message, can´t react if app is in background and unplugged
我正在尝试对静默推送消息做出反应。我在我的 plist 文件中为两种背景模式注册了我的应用程序。
我正在向我的应用发送以下 json:
{
"aps": {
"content-available": 1
},
"Bla": "Blub"
}
如果我的应用程序在前台,一切正常。当我收到推送时,我在我的代码中执行了一个函数。如果我的应用程序在后台并插入我的 Mac 或交流电,一切都很好......但是如果我拔下我的设备,设备就没有得到或至少我的功能不再被调用......为什么就是它?
我理解静默通知的工作方式是它们可以发送,系统可能会收到它们,但可能不会根据不同的因素采取行动。
静默通知用于营造在节能设备上进行多任务处理的错觉。我的理解是,系统使用一些因素来确定是否应该将静默通知传递给应用程序,这些因素包括:
- 当前网络状况
- 当前功率水平
- 应用程序使用情况。
- 用户选择
- 可能耗电。
在你的情况下,静默通知在前台工作,因为你是最重要的应用程序。用户可能正在执行一项不立即涉及内容的任务。但内容更新可能会有用。例如,对于 Facebook,我可能会在朋友墙上写一个 post,我的提要有新故事。很高兴在我做其他事情的时候更新它。
对于连接到您的计算机的情况 - 设备正在充电,执行后台任务不会耗尽设备电池。
要提供有关因素的更多详细信息:
网络状况
- 如果设备处于 Wi-Fi 状态,则更有可能允许进行网络呼叫,因为这不像使用蜂窝数据那样耗电。
当前功率级别
- 这也与网络状况有关。
- 是否在相关无线电已经开启的时间点收到通知?
- 这也可以根据设备历史记录与当前位置相关联。如果该位置被确定为 "home",则可以假定该设备靠近电源。
- 时间也可能是其中的一个因素。例如"What is the average time the device starts charging, is it close etc."
- 设备是否已连接电源?
应用程序使用情况
- 用户多久使用一次您的应用程序,使用模式是什么?
- 是否在允许应用更新其内容的合理时间收到通知?一个可能的例子是,用户可能会在接下来的 10 分钟到 1 小时内使用该应用程序。更新内容可能是有意义的。但如果用户可能会在接下来的 2 分钟或 2 小时内使用该应用程序。它可能会推迟此操作,因为它很可能很快就会被用户启动或不会很快被使用,这是一种资源浪费。
用户选择
- 用户可以随时选择停止后台数据刷新。
- 用户可以选择不允许您的应用使用蜂窝数据。
- 虽然超出了您的问题范围,但我认为应该注意的是,不应假定静默通知总是会通过,也不应成为您应用程序的关键部分。
可能耗电
- 与其他因素相比,我认为这不存在,但要记住一些事情。
- 你在做这个后台任务的时候,过去的耗电情况如何?
- 如果你是一个好公民,尽可能节能等,你可能更有可能被要求更新。
- 但是如果您在执行此任务时在系统视图中没有尽可能地节能,您可能不会收到那么多通知。
据我所知,这些因素不是确定的、未证明的或陈述的。我根据 WWDC 谈话、之前的背景任务限制和我自己的假设,将它们作为可能的原因提出建议。但我希望他们能帮助您了解为什么您的静默通知在某些情况下有效,而在其他情况下无效。
我正在尝试对静默推送消息做出反应。我在我的 plist 文件中为两种背景模式注册了我的应用程序。
我正在向我的应用发送以下 json:
{
"aps": {
"content-available": 1
},
"Bla": "Blub"
}
如果我的应用程序在前台,一切正常。当我收到推送时,我在我的代码中执行了一个函数。如果我的应用程序在后台并插入我的 Mac 或交流电,一切都很好......但是如果我拔下我的设备,设备就没有得到或至少我的功能不再被调用......为什么就是它?
我理解静默通知的工作方式是它们可以发送,系统可能会收到它们,但可能不会根据不同的因素采取行动。
静默通知用于营造在节能设备上进行多任务处理的错觉。我的理解是,系统使用一些因素来确定是否应该将静默通知传递给应用程序,这些因素包括:
- 当前网络状况
- 当前功率水平
- 应用程序使用情况。
- 用户选择
- 可能耗电。
在你的情况下,静默通知在前台工作,因为你是最重要的应用程序。用户可能正在执行一项不立即涉及内容的任务。但内容更新可能会有用。例如,对于 Facebook,我可能会在朋友墙上写一个 post,我的提要有新故事。很高兴在我做其他事情的时候更新它。
对于连接到您的计算机的情况 - 设备正在充电,执行后台任务不会耗尽设备电池。
要提供有关因素的更多详细信息:
网络状况
- 如果设备处于 Wi-Fi 状态,则更有可能允许进行网络呼叫,因为这不像使用蜂窝数据那样耗电。
当前功率级别
- 这也与网络状况有关。
- 是否在相关无线电已经开启的时间点收到通知?
- 这也可以根据设备历史记录与当前位置相关联。如果该位置被确定为 "home",则可以假定该设备靠近电源。
- 时间也可能是其中的一个因素。例如"What is the average time the device starts charging, is it close etc."
- 设备是否已连接电源?
应用程序使用情况
- 用户多久使用一次您的应用程序,使用模式是什么?
- 是否在允许应用更新其内容的合理时间收到通知?一个可能的例子是,用户可能会在接下来的 10 分钟到 1 小时内使用该应用程序。更新内容可能是有意义的。但如果用户可能会在接下来的 2 分钟或 2 小时内使用该应用程序。它可能会推迟此操作,因为它很可能很快就会被用户启动或不会很快被使用,这是一种资源浪费。
用户选择
- 用户可以随时选择停止后台数据刷新。
- 用户可以选择不允许您的应用使用蜂窝数据。
- 虽然超出了您的问题范围,但我认为应该注意的是,不应假定静默通知总是会通过,也不应成为您应用程序的关键部分。
可能耗电
- 与其他因素相比,我认为这不存在,但要记住一些事情。
- 你在做这个后台任务的时候,过去的耗电情况如何?
- 如果你是一个好公民,尽可能节能等,你可能更有可能被要求更新。
- 但是如果您在执行此任务时在系统视图中没有尽可能地节能,您可能不会收到那么多通知。
据我所知,这些因素不是确定的、未证明的或陈述的。我根据 WWDC 谈话、之前的背景任务限制和我自己的假设,将它们作为可能的原因提出建议。但我希望他们能帮助您了解为什么您的静默通知在某些情况下有效,而在其他情况下无效。