2014-02-18 11 views
5

In meiner Anwendung habe ich zwei Arten von Push-Benachrichtigungen: Remote-Silent-Benachrichtigungen mit content-available = 1 Flagge und üblichen Push-Benachrichtigungen mit body, badge und andere Sachen.Warum didReceiveRemoteNotification: fetchCompletionHandler wird aufgerufen, aber normal didReceiveRemoteNotification ist nicht?

Ich definiere auch zwei Delegate Methoden didReceiveRemoteNotification:fetchCompletionHandler und üblichen didReceiveRemoteNotification.

Aber wenn eine Push-Benachrichtigung ohne content-available Flag ankommt, wird didReceiveRemoteNotification:fetchCompletionHandler aufgerufen, anstelle von didReceiveRemoteNotification.

Wie behebt man das?
Warum kann ich nicht zwei Delegate-Methoden für Hintergrund und übliche Pushs haben?

+0

Hat 'Content-available' Affekt-Methode aufgerufen werden? Ich denke, die Einstellung "remote-notification" als Hintergrundmodus bewirkt, dass 'didReceiveRemoteNotification: fetchCompletionHandler' aufgerufen wird. – vokilam

+0

"Beeinflusst content-available die Methode, die aufgerufen werden soll?" - Nein. Ich sagte das, aber wenn die übliche Push-Notification ohne Inhalt-verfügbare Flagge ankommt, wird didReceiveRemoteNotification: fetchCompletionHandler aufgerufen. Daher wird dieser Delegat aufgerufen, unabhängig davon, ob das Flag "content-available" gesetzt ist oder nicht. – MainstreamDeveloper00

+0

Dann ist es wegen des "remote-notification" Hintergrundmodus. – vokilam

Antwort

9

iOS 7 nur ruft die neue, das ist, wie ich es in meiner app behandelt:

-(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

Danke für die schnelle Antwort. Sie haben gesagt: "iOS 7 ruft nur das neue an", aber warum tun Sie das: '// Weitergeben [Selbstanwendung: Anwendung didReceiveRemoteNotification: userInfo fetchCompletionHandler: nil];' Wenn diese Methode nicht aufgerufen wird? – MainstreamDeveloper00

+1

iOS 6 und darunter immer noch das alte, so dass es nur an das neue weitergibt, wenn auf alten Versionen von iOS ... – jjv360

+0

Große Antwort wurde auf der Suche nach Informationen zu diesem Thema. – Kex

Verwandte Themen