2016-08-16 91 views
3

如果我理解正確的話,UIApplicationLaunchOptionsRemoteNotificationKey關鍵是在-[UIApplicationDelegate application:didFinishLaunchingWithOptions:]方法使用時 - 推收到當應用程序是沒有運行(例如殺死) - 用戶在收到推送點擊什麼是UIApplicationLaunchOptionsRemoteNotificationKey用於?

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 

    NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey]; 
    if(userInfo) { 
     // app was not running and the user clicked on the push 
    } 
} 

但是..在這個完全相同的情況下,-[AppDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:]也被稱爲在前一個之後。

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler 
{ 
    // called when 
    // app was not running and the user clicked on the push 
    // app was running in background and user clicked on a push 
    // app was running in background and a silent push was received 
    // app is in foreground and a push is received 
    completionHandler(UIBackgroundFetchResultNewData); 
} 

所以現在的問題是,我爲什麼要使用UIApplicationLaunchOptionsRemoteNotificationKey如果一切都可以在application:didReceiveRemoteNotification:fetchCompletionHandler委託處理?我錯過了什麼?

歡呼聲,

+0

因爲您應該能夠在導航堆棧中深處處理遠程通知的隨機_view _...或只是隨機_controller _...或只是隨機_model _...是不合邏輯的依賴應用程序代表會在你的例如_model_,這是沒有意義的,這就是爲什麼單個實例可以監聽通知,並且如果他們醒來,他們可以立即進行更改,獨立於應用程序委託 - 技術上在最後三種情況下,您已經提到過。 – holex

回答

5

在情況下,當應用程序被殺害,並且用戶在通知中心抽頭的推送通知,launchingOptions字典包含UIApplicationLaunchOptionsRemoteNotificationKey,讓你可以調整你的應用程序啓動邏輯。 在之前的iOS版本中,沒有application:didReceiveRemoteNotification: fetchCompletionHandler:launchingOptions字典application:didFinishLaunchingWithOptions:是您可以在應用程序啓動時處理遠程通知的唯一地方。

我的猜測是,application:didFinishLaunchingWithOptions:包含UIApplicationLaunchOptionsRemoteNotificationKey出於兼容性的原因。

+0

我明白了,所以如果我確實實現了更新的'application:didReceiveRemoteNotification:fetchCompletionHandler:'我應該被覆蓋,對嗎? – Jan

+0

文檔沒有聲明,當應用程序從頭開始(即應用程序被終止)時,此方法會調用,但如果您的測試確認它被調用,那麼您應該被覆蓋。 –

0

此鍵的存在表示應用程序可以使用遠程通知進行處理。此密鑰的值是包含遠程通知負載的NSDictionary。