如果用戶強行關閉了應用程序,則無法獲取voip pushkit通知以重新啓動應用程序(通過向上滑動多任務接口)以及設備是否重新啓動。Voip Pushkit通知將不會重新啓動應用程序,如果它被強行關閉並且設備被重新啓動
不過,我可以得到VOIP pushkit通知在下列情況下工作:
該應用程序是力辭去那麼pushkit通知到達。該應用程序將立即重新啓動。標準推送通知在這種情況下無法喚醒應用程序。
該應用程序處於後臺/掛起狀態,並且設備重新啓動。感謝Voip模式,應用程序將在設備重啓時重新啓動(我可以在Xcode Activity Monitor中看到該過程)。有它在這些方面http://blog.biokoda.com/post/114315188985/ios-and-pushkit描述正確處理在這裏得到了pushkit通知需要一招「初始化PushKit啓動後臺任務之前,完成此任務時收到PushKit令牌」
不知怎的,當結合這兩個(設備重啓和應用程序強制退出),然後pushkit通知似乎不會重新啓動應用程序。另外,當查看Xcode中的設備日誌時,我沒有從apsd獲得日誌,表示通知已由系統處理。
這裏是我的代碼:
@implementation AppDelegate
{
UIBackgroundTaskIdentifier bgTask;
}
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
UIApplication* app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
dispatch_async(dispatch_get_global_queue(
DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
while (true) {
;
}
});
// Initialize pushkit
PKPushRegistry *pushRegistry =
[[PKPushRegistry alloc] initWithQueue:dispatch_get_main_queue()];
pushRegistry.delegate = self;
pushRegistry.desiredPushTypes = [NSSet setWithObject:PKPushTypeVoIP];
return YES;
}
- (void)pushRegistry:(PKPushRegistry *)registry
didUpdatePushCredentials:(PKPushCredentials *)credentials
forType:(NSString *)type{
UIApplication* app = [UIApplication sharedApplication];
[app endBackgroundTask:bgTask];
// ... more code to read the token ...
}
- (void)pushRegistry:(PKPushRegistry *)registry
didReceiveIncomingPushWithPayload:(PKPushPayload *)payload
forType:(NSString *)type {
// ... logging to check if notification is received ...
}
我也有「IP語音」,並在後臺模式下啓用「遠程通知」。
我知道Whatsapp等其他應用程序可以在這種情況下重新啓動,所以我不明白我做錯了什麼。
在相關說明中,它不幫助執行以下操作1)強制退出2)發送pushkit通知 - 將收到該通知3)重新啓動。該應用程序不會重新啓動,新的推送通知仍然不會重新啓動它。
@ sahara108和我自己也有這個問題。我直接詢問了Apple,所以如果他們在別人提出答案之前回答,我會在這裏發佈答案。 你也提到你WhatsApp等可以重新啓動,但它們是否完全重啓?在我們的調查中,應用程序重新啓動但不完全啓動。他們的日誌過早被截斷(看起來像是一個OS殺手)。 – Pandalover
我通過查看活動監視器中正在啓動的進程來確定應用程序已重新啓動。 – mcaoun