如何进行推送通知打开某个视图控制器?

Hon*_*ney 6 objective-c apple-push-notifications ios swift ios-universal-links

我查看了SO但是我无法找到任何问题,当您收到推送通知时,如何打开特定的视图控制器.例如,如果您正在创建一个类似WhatsApp的应用程序,并且您收到两个不同的推送通知,即来自两个不同用户的消息,您将如何从应用程序委托指向相应的viewController?

据我所知,在appDelegate给你的userinfo字典中,你可以给一个特定的viewController提供一个ID,但我不知道如何向特定的视图控制器致敬,这样你就可以再次指向那个viewController .请提供您的答案的代码段

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

MSU*_*dog 15

您可以通过应用委托中的此代码检测应用是否通过通知打开.当应用程序状态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];

    }

}
Run Code Online (Sandbox Code Playgroud)

  • @Honey 是的,您是对的,但我认为即使您确实存在内存泄漏并导航到正确的 selectedIndex,您仍然需要在某个时候解决内存泄漏问题。ps我喜欢你两年后的评论:) (2认同)