2015-09-16 59 views
9

如果用戶強行關閉了應用程序,則無法獲取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)重新啓動。該應用程序不會重新啓動,新的推送通知仍然不會重新啓動它。

+0

@ sahara108和我自己也有這個問題。我直接詢問了Apple,所以如果他們在別人提出答案之前回答,我會在這裏發佈答案。 你也提到你WhatsApp等可以重新啓動,但它們是否完全重啓?在我們的調查中,應用程序重新啓動但不完全啓動。他們的日誌過早被截斷(看起來像是一個OS殺手)。 – Pandalover

+0

我通過查看活動監視器中正在啓動的進程來確定應用程序已重新啓動。 – mcaoun

回答

3

當我使用AdHoc配置配置文件(並從iTunes安裝它)測試應用程序後,通過prod gateway.push.apple.com而不是gateway.sandbox.push.apple.com服務的Voip推送通知開始喚醒重新啓動後強制退出的應用程序。

os顯然是以不同的方式處理開發和生產。

進一步展望APSD日誌,我發現,使用一個開發配置文件以下時被打印出來:

:XXXX-XXXX XX:XX:XX 0300 APSD [97]:
這些已啓用的主題已被刪除{( 「YOUR_BUNLE_IDENTIFIER」 )}

使用即席供應配置文件時,不會出現這種情況。

+0

你的意思是appstore供應?在我的測試中,該應用程序可以在手機重新啓動但不完整時重新啓動。嘗試打開xmpp套接字連接時,它會卡住。看來,網絡目前不可用。您的應用能否成功重新啓動? – sahara108

相關問題