2016-08-16 3 views
3

wenn ich richtig verstehe, die UIApplicationLaunchOptionsRemoteNotificationKey Taste auf der -[UIApplicationDelegate application:didFinishLaunchingWithOptions:] Methode verwendet, wenn - der Push empfangen wurde, wenn die Anwendung nicht (zB getötet) ausgeführt wurde - der Benutzer auf dem empfangenen PushWofür wird UIApplicationLaunchOptionsRemoteNotificationKey verwendet?

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

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

aber .. in diesem genau gleichen Fall wird die -[AppDelegate application:didReceiveRemoteNotification:fetchCompletionHandler:] auch direkt nach der vorherigen aufgerufen.

- (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); 
} 

Die Frage ist also, verwende warum soll ich die UIApplicationLaunchOptionsRemoteNotificationKey wenn alles in den application:didReceiveRemoteNotification:fetchCompletionHandler Delegierten behandelt werden? Habe ich etwas verpasst?

prost,

Jan

+0

Da Sie in der Lage sein sollten, Remote-Benachrichtigungen irgendwo tief in der Navigation Stapel in einer zufälligen _view _... oder nur in einem zufälligen _Controller _... oder nur in einem zufälligen _Modell _... zu behandeln, ist es unlogisch zu verlassen Der App-Delegierte würde die Änderungen an Ihrem z _model_, das macht keinen Sinn, deshalb können einzelne Instanzen Benachrichtigungen abhören und wenn sie wach sind, können sie die Änderungen sofort unabhängig von App-Delegaten vornehmen - technisch in den letzten drei Szenarien, die Sie erwähnt haben. – holex

Antwort

5

Im Falle, wenn die App getötet und Benutzer tippt auf Push-Benachrichtigung im Infozentrum, launchingOptions Wörterbuch enthält UIApplicationLaunchOptionsRemoteNotificationKey, so dass Sie Ihre App Startlogik anpassen können. In früheren iOS-Version gab es nicht application:didReceiveRemoteNotification: fetchCompletionHandler: und launchingOptions Wörterbuch von application:didFinishLaunchingWithOptions: war der einzige Ort, wo Sie Remote-Benachrichtigung beim Start der App behandeln konnte.

Meine Schätzung ist, dass application:didFinishLaunchingWithOptions: UIApplicationLaunchOptionsRemoteNotificationKey aus Kompatibilitätsgründen enthält.

+0

Ich sehe, also wenn ich die neuere 'Anwendung implementieren: didReceiveRemoteNotification: fetchCompletionHandler:' Ich sollte abgedeckt werden, richtig? – Jan

+0

Die Dokumentation besagt nicht, dass diese Methode aufgerufen wird, wenn die Anwendung von Grund auf neu gestartet wird (d. H. Wenn die App beendet wird), aber wenn Ihre Tests bestätigen, dass sie aufgerufen wird, sollten Sie abgedeckt sein. –

0

Das Vorhandensein dieses Schlüssels zeigt an, dass eine Remote-Benachrichtigung für die Verarbeitung der App verfügbar ist. Der Wert dieses Schlüssels ist ein NSDictionary, das die Payload der Remote-Benachrichtigung enthält.