2014-02-18 243 views
5

在我的應用程序中,我有兩種類型的推送通知:帶有content-available = 1標誌的遠程安全通知以及帶有bodybadge和其他內容的常規推送通知。爲什麼didReceiveRemoteNotification:fetchCompletionHandler被調用,但通常didReceiveRemoteNotification不是?

我還定義了兩個代表方法didReceiveRemoteNotification:fetchCompletionHandler和通常的didReceiveRemoteNotification

但是,如果沒有content-available標誌的推送通知到達didReceiveRemoteNotification:fetchCompletionHandler被調用,而不是didReceiveRemoteNotification

如何解決這個問題?
爲什麼我不能有兩個委託方法用於背景和通常的推送?

+0

是否'內容available'影響到被調用的方法?我認爲將'remote-notification'設置爲背景模式會導致'didReceiveRemoteNotification:fetchCompletionHandler'的調用。 – vokilam

+0

「是否調用內容可用影響方法?」 - 不,我說過,但是當沒有內容可用標誌的通常推送通知到達時,仍然沒有接收到通知通知:fetchCompletionHandler被調用。因此,無論「內容可用」標誌是否設置,都會調用此代理。 – MainstreamDeveloper00

+0

然後,不是因爲'remote-notification'背景模式。 – vokilam

回答

9

的iOS 7只調用新的,這是我如何處理它在我的應用程序:

-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 

    // Pass on 
    [self application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:nil]; 

} 

-(void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { 

    // Check if in background 
    if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive) { 

     // User opened the push notification 

    } else { 

     // User hasn't opened it, this was a silent update 

    } 

} 
+0

感謝您的快速回答。你說:「iOS 7只會調用新的」,但爲什麼你這樣做:'//通過 [self application:application didReceiveRemoteNotification:userInfo fetchCompletionHandler:nil];'如果這個方法不會被調用? – MainstreamDeveloper00

+1

iOS 6及更低版本仍然會調用舊版本,因此只要在舊版本的iOS上運行時就將其傳遞給新版本...... – jjv360

+0

偉大的答案一直在尋找相關信息。 – Kex

相關問題