如何使您的推送通知打开某个视图控制器?

我看了一下,但是我没能find任何问题来讨论什么时候你收到一个推送通知你怎么能打开一个特定的视图控制器。 例如,如果您正在创build一个类似WhatsApp的应用程序,并且您收到两个不同的推送通知,即来自两个不同用户的消息,那么您将如何从应用程序代理指向相应的viewController?

据我所知,在用户信息字典中,appDelegate给你你可以给一个特定的viewController ID,但我不知道如何向任何特定的视图控制器致敬,那么你可以再次指向该viewController 。 请在您的答案中包含代码片段

**** Swift或Objective-C的答案都可以接受****

您可以检测应用程序代理中是否使用此代码通知打开的应用程序。 当应用程序状态为UIApplicationStateInactive之前,您需要设置初始视图控制器。 您可以在那里执行任何逻辑来决定应该打开哪个视图控制器,以及该视图控制器应该显示哪些内容。

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

这是SWIFT 3版本,而不是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") } }