3

Ich schaute auf SO, aber ich konnte keine Frage finden, die bespricht, wenn Sie eine Push-Benachrichtigung erhalten, wie Sie dann einen bestimmten View-Controller öffnen können. Wenn Sie zum Beispiel eine App wie WhatsApp erstellen und Sie zwei verschiedene Push-Benachrichtigungen erhalten, dh Nachrichten von zwei verschiedenen Benutzern, wie würden Sie vom App-Delegaten zum jeweiligen viewController leiten?So machen Sie Ihre Push-Benachrichtigung Öffnen Sie einen bestimmten View-Controller?

Soweit ich im userinfo Wörterbuch weiß, dass die AppDelegate gibt Ihnen können Sie eine ID zu einem bestimmten ViewController geben, aber ich weiß nicht, wie eine Tribut zu einem bestimmten View-Controller, so dass Sie dann wieder geben könnte direkt zu diesem ViewController. umfassen bitte einen Code-Snippet mit Ihrer Antwort

**** Swift oder Objective-C Antworten sind beide akzeptabel ****

Antwort

9

Sie können erkennen, ob die App aus der Meldung mit diesem Code in AppDelegate geöffnet . Sie müssen den ersten View-Controller festlegen, wenn der Anwendungsstatus UIApplicationStateInactive ist, bevor die App aktiviert wurde. Sie können dort eine beliebige Logik ausführen, um zu entscheiden, welcher Ansicht-Controller geöffnet werden soll und welcher Inhalt in diesem Ansichts-Controller angezeigt werden soll.

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

    if(application.applicationState == UIApplicationStateActive) { 

     //app is currently active, can update badges count here 

    } else if(application.applicationState == UIApplicationStateBackground){ 

     //app is in background, if content-available key of your notification is set to 1, poll to your backend to retrieve data and update your interface here 

    } else if(application.applicationState == UIApplicationStateInactive){ 

     //app is transitioning from background to foreground (user taps notification), do what you need when user taps here 

     self.window = [[UIWindow alloc] initWithFrame:UIScreen.mainScreen.bounds]; 

     UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 

     UIViewController *viewController = // determine the initial view controller here and instantiate it with [storyboard instantiateViewControllerWithIdentifier:<storyboard id>]; 

     self.window.rootViewController = viewController; 
     [self.window makeKeyAndVisible]; 

    } 

} 
+0

Thank you so much. Die dritte ID-Anweisung ist, wo Sie * eigentlich * von Hintergrund zu Vordergrund gehen ... die ersten 2 aktualisieren nur das Modell ohne UI-Interaktion. **Recht?**. Also im Grunde verbindest du dich über den Bezeichner des ViewControllers ** richtig? ** – Honey

+1

Sorry ich habe ein paar Tage gebraucht, um zu kommentieren, das ist richtig. –

1

Hier ist die Swift 3 Version mit Schalter/Fall statt if/else

open func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any]) { 
    switch application.applicationState { 
    case .active: 
     print("do stuff in case App is active") 
    case .background: 
     print("do stuff in case App is in background") 
    case .inactive: 
     print("do stuff in case App is inactive") 
    } 
}