2014-02-18 204 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

相关问题