[注意:这个问题是关于VoiP的推动,而不是普通的推动] [注2:问题不在于如何设置应用程序以接收Voip Pushes,正确阅读它实际上要求的内容]。
如果应用程序终止并且Voip推送到达,则在didFinishLaunchingWithOptions中,选项为零。 (例如,如果在用户点击本地通知时启动应用程序,则可以与此形成对比。)
由于VoIP推送的到来,应用程序如何知道它的推出,而不是在应用已经在后台推送时推送?
答案 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
}
}
}