如何在推送通知中导航到另一个视图控制器

Posted

技术标签:

【中文标题】如何在推送通知中导航到另一个视图控制器【英文标题】:How to navigate to another view controller in push notifications 【发布时间】:2015-04-30 09:24:21 【问题描述】:

我正在做一个应用程序。其中我有一些视图控制器,例如 A->B、A->C、A->D 和 B->E、C->F、D->G 和 E- >H,F->I 和 G->J。所以我在 E 视图控制器中,每当收到通知时,我必须移动到 G 视图控制器。如果我在除 G 之外的任何视图控制器中,我需要移动到G view controller.所以请告诉我怎么做。

【问题讨论】:

【参考方案1】:

您需要先在 AppDelegate.m 中设置一些代码,以便在应用打开时响应推送:

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

    //If opening app from notification
    if ( application.applicationState == UIApplicationStateInactive || application.applicationState == UIApplicationStateBackground  )
    
        //restore push
        [[NSNotificationCenter defaultCenter] postNotificationName:@"appRestorePush" object:nil];

    
    //If app is already open
    else 


        [[NSNotificationCenter defaultCenter] postNotificationName:@"appOpenPush" object:nil];

    



在这里,如果应用通过推送打开(即您从锁定屏幕上滑动),我们会触发 NSNotification,如果应用已经打开,也会有不同的通知。您不必使用两种不同类型的 NSNotification,但它可能对您有用。我不确定您的视图控制器设置是什么,但假设您对根控制器中的所有内容使用 UINavigation 控制器,您只需将其设置为在 ViewDidLoad 中进行侦听,即:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appOpenPush) name:@"appOpenPush" object:nil];

在你调用的方法中是这样的:

-(void)appOpenPush 

   NSLog(@"got a push while app was open");
   //Get the view controller

   UIViewController *lastViewController = [[self.navigationController viewControllers] lastObject];
    if([lastViewController isKindOfClass:[MyViewController class]]) 

     //do your segue here

   

   else if//////do this for all your cases...


这里我们检查视图控制器是什么类型的类,然后选择合适的segue。

希望你至少做了一点工作,并理解我写的内容..

【讨论】:

以上是关于如何在推送通知中导航到另一个视图控制器的主要内容,如果未能解决你的问题,请参考以下文章

如何通过推送通知显示带有 TabBarController 导航的视图控制器

当用户点击推送通知时导航到特定的视图控制器

点击带有 Reveal 的推送通知导航到特定视图

在 AppDelegate 中使用推送通知重定向视图

OneSignal 按下推送通知去一个视图控制器 iOS Swift

单击推送通知时,正确重定向到选项卡栏导航控制器内的视图控制器