4

如果应用程序在后台或已终止并且它接收到 voip 推送,那么操作系统将启动它并运行它。

文档说:

“即使您的应用程序在后台运行,您的应用程序也有运行时间来处理推送。”

有谁知道这个运行时间有多长,如果应用程序可以找出剩余的时间?

如果一个应用程序在前台并移动到后台,那么如果它使用 beginBackgroundTask() 等,它可以获得 30 秒的执行时间。

我已经进行了实验,发现如果在应用程序已经在后台时将静默推送传递给应用程序,那么应用程序也可以在这种情况下使用 beginBackgroundTask() 并且它也有 30 秒的时间来执行并执行某些操作它接收推送(它可以使用 UIApplication.shared.backgroundTimeRemaining 来查看剩余的时间。)

但是,如果传递 Voip 推送而不是静默推送,则 beginBackgroundTask() 功能不起作用(当然,因此 UIApplication.shared.backgroundTimeRemaining 不能用于确定剩余执行时间),但是应用程序可以在后台运行并执行一些活动(这是上面引用的文档所说的它可以做的事情)。

所以重复这个问题 - Apple 是否记录了它在收到 Voip 推送时运行了多少时间?该应用程序可以找出剩余的时间吗?或者得到一些执行时间即将到期的警告?

4

3 回答 3

3

1) Apple 是否记录了它在收到 Voip 推送时运行了多少时间?

不,Apple 在文档中没有此信息

2) 应用程序可以找出剩余的时间吗?

否。当应用程序启动时,它假定在后台模式下执行。您将有大约 30 多岁的时间来执行必要的任务。

3)或者得到一些执行时间即将到期的警告?

不,至少没有记录的方法可以做到这一点。

于 2018-01-17T12:13:14.257 回答
1

Apple 是否记录了它在收到 Voip 推送时运行了多少时间?

不,没有关于您有多少时间的官方文​​件,何时收到VoIP Push notification.

根据我的个人经验,如果需要,您将使用长时间的声音文件将时间延长至 45 秒。

该应用程序可以找出剩余的时间吗?或者得到一些执行时间即将到期的Waring?

不,没有官方文件或没有可用的任何委托方法来查找剩余时间。

我遇到了同样的问题,我使用多个 VoIP Push具有不同参数的问题克服了上述问题。您可以按如下方式实现。

根据我的要求,当用户收到新来电时,我必须显示通知。如果用户没有接听电话,那么我必须为未接电话提供新的通知。我实现了它如下。

1) Generate local notification when received first VoIP Push. 

2) Cancel already generated notification and generate new missed call notification for user.

我不确定,但如果工作,你也可以使用计时器。

于 2018-01-18T06:36:37.227 回答
0

一旦您获得了 VOIP 推送有效负载didReceiveIncomingPushWithPayload,那么您必须安排带有声音文件的本地通知,根据声音文件持续时间,您的应用程序将在后台唤醒(当它处于终止模式时)。

声音文件允许的最大时间为 30 秒,并且没有进程知道等待的时间。

UIApplication.shared.backgroundTimeRemaining

由于应用程序尚未从 AppDelegate 唤醒,因此无法获得剩余时间,它已通过 VOIP 委托方法在后台唤醒。

参考更多细节。

https://github.com/hasyapanchasara/PushKit_SilentPushNotification

于 2018-01-23T09:56:26.600 回答