美文网首页
ios APP进程杀死之后和APP在后台接收到推送点击跳转到任意

ios APP进程杀死之后和APP在后台接收到推送点击跳转到任意

作者: 小旺_running | 来源:发表于2017-09-30 15:03 被阅读0次

    因为现在做的项目需要这方面的需求和功能,把遇到的问题和解决方法分享给大家,希望共同学习

    首先用的是百度推送,这里就不做具体说明了

    一、先是APP程序(home键)在后台时候点击推送通知跳转到任意界面

    在AppDelegate中

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

    //角标清零

    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0];

    在这个方法中

    if (application.applicationState == UIApplicationStateActive || application.applicationState == UIApplicationStateBackground) {

              做不做处理看需求,我这里暂不做处理了

    }

    else//跳转到特定页面。

    {

    //这里面的notice_type是跟后台商量好的,跳转到特定界面所需的type值

    if([[userInfo objectForKey:@"notice_type"]isEqualToString:@"0001"])

    {

    // 取到tabbarcontroller

    RootTabBarViewController *tabBarController = ( RootTabBarViewController*)self.window.rootViewController;

    if(tabBarController!=nil)

    {

    if([self topViewController]!=nil)

    {

    //如果是当前控制器是我的消息控制器的话,刷新数据即可

    if([[self topViewController] isKindOfClass:[SYSNotificationViewController class]])

    {

    SYSNotificationViewController * vc = (SYSNotificationViewController *)[self topViewController];

    [vc refreshData];

    return;

    }

    else

    {

    if([self navigationViewController]!=nil)

    {

    SYSNotificationViewController * vc = [[SYSNotificationViewController alloc]init];

    vc.hidesBottomBarWhenPushed = YES;

    [[self navigationViewController] pushViewController:vc animated:YES];

    }

    }

    }

    }

    }

    /**

    获取当前活动的navigationcontroller

    @return 最顶端的Controller

    */

    - (UINavigationController *)navigationViewController

    {

    UIWindow *window = self.window;

    if ([window.rootViewController isKindOfClass:[UINavigationController class]]) {

    return (UINavigationController *)window.rootViewController;

    } else if ([window.rootViewController isKindOfClass:[UITabBarController class]]) {

    UIViewController *selectVc = [((UITabBarController *)window.rootViewController) selectedViewController];

    if ([selectVc isKindOfClass:[UINavigationController class]]) {

    return (UINavigationController *)selectVc;

    }

    }

    return nil;

    }

    /**

    获取当前活动的navigationcontroller的顶层Controller

    @return 最顶端的Controller

    */

    - (UIViewController *)topViewController

    {

    UINavigationController *nav = [self navigationViewController];

    if (!nav) {

    return nil;

    }

    return nav.topViewController;

    }

    二、然后APP程序杀死的时候点击推送通知跳转到任意界面

    程序杀死收到推送必走下面的方法

    在AppDelegate中

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

    NSDictionary *remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

    // 如果​remoteNotification不为空,代表有推送发过来,以下类似

    if (remoteNotification) {

    [UIApplication sharedApplication].applicationIconBadgeNumber = 0;

    //infoDict
    是在AppDelegate的.h文件中申明的一个不可变字典

    _infoDict = remoteNotification;

    }

    然后在程序运行出来的首页

    AppDelegate * app = (AppDelegate *)[UIApplication sharedApplication].delegate;

    //notice_type作用同上

    NSString * pushName = [app.infoDict objectForKey:@"notice_type"];

    if(NotNilAndNull(pushName))

    {

    if([pushName isEqualToString:@"0001"])

    {

    SYSNotificationViewController * vc = [[SYSNotificationViewController alloc]init];

    vc.hidesBottomBarWhenPushed = YES;

    [self.navigationController pushViewController:vc animated:YES];

    }

    }

    相关文章

      网友评论

          本文标题:ios APP进程杀死之后和APP在后台接收到推送点击跳转到任意

          本文链接:https://www.haomeiwen.com/subject/trogextx.html