应用程序如何确定是否由于Voip Push而从终止状态启动?

时间:2017-10-27 18:23:59

标签: ios

[注意:这个问题是关于VoiP的推动,而不是普通的推动] [注2:问题不在于如何设置应用程序以接收Voip Pushes,正确阅读它实际上要求的内容]。

如果应用程序终止并且Voip推送到达,则在didFinishLaunchingWithOptions中,选项为零。 (例如,如果在用户点击本地通知时启动应用程序,则可以与此形成对比。)

由于VoIP推送的到来,应用程序如何知道它的推出,而不是在应用已经在后台推送时推送?

1 个答案:

答案 0 :(得分:0)

您需要将委托设置为您创建的$delete_body = new Google_Service_Sheets_BatchUpdateSpreadsheetRequest(array( 'requests' => $deletable_row ) ); //var_dump($delete_body); $result = $service->spreadsheets->batchUpdate($spid, $delete_body); 对象,并将其指定为VOIP类型:

PKPushRegistry

您的代表必须遵守let voipRegistry = PKPushRegistry(queue: nil) voipRegistry.delegate = myPushDelegate voipRegistry.desiredPushTypes = [PKPushType.voIP] 协议。

然后,实现PKPushRegistryDelegate协议函数(reference) - 在接收推送时将调用此函数(即使应用程序在之前被终止)。

功能描述:

  

通知代表已收到远程推送。

     

指定的推送类型。你尽快调用完成处理程序   已完成处理有效负载。当收到

的推送通知时,将调用此方法

请注意函数:pushRegistry(_:didReceiveIncomingPushWith:for:completion:)已被弃用,所以不要与我上面提到的那个混淆。

有关pushRegistry(_:didReceiveIncomingPushWith:for:)协议的更多信息:here

关于实际问题,有一个解决方法 - 想法是创建一个标志,当应用程序终止时它将被销毁但是一旦它醒来它状态将会改变 - 如果应用程序从后台标志状态将被保存,但如果应用程序在终止后醒来,则该标志将保留默认值。

在push的委托类中:

PKPushRegistryDelegate

此外,为了检测用户是否启动了应用程序(这是应用程序处于活动状态的唯一情况),请使用以下代码:

import PushKit
class PushDelegate: PKPushRegistryDelegate  {

    var flag = false

      func pushRegistry(_ registry: PKPushRegistry, didReceiveIncomingPushWith payload: PKPushPayload, forType type: PKPushType) {
            if flag {
                print("the app woke up from background")
            } else {
                print("the app was terminated")
                flag = true
            }
        }
}