美文网首页iOS猛码计划ios 知识小集iOS
iOS远程推送点击消息跳转到指定页面

iOS远程推送点击消息跳转到指定页面

作者: 晨曦之光nl | 来源:发表于2016-06-27 10:07 被阅读13731次

    iOS开发中经常会用到远程推送,点击推送的消息进入指定的页面更是一项基本功能,本篇文章将介绍一下如何点击消息进入指定页面。
    iOS点击消息进入app将分三种情况:app在后台运行,app在前台运行,app未启动。不同情况会走不同的方法,其中app在后台运行和前台运行会走如下方法:
    其中,iOS7之前会走如下方法:

    -(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
        // App 收到推送的通知
        NSLog(@"********** ios7.0之前 **********");
        // 应用在前台 或者后台开启状态下,不跳转页面,让用户选择。
        if (application.applicationState == UIApplicationStateActive || application.applicationState == UIApplicationStateBackground) {
            NSLog(@"acitve or background");
            UIAlertView *alertView =[[UIAlertView alloc]initWithTitle:@"提示" message:userInfo[@"aps"][@"alert"][@"body"] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"立即查看", nil];
            [alertView show];
        }
        else//杀死状态下,直接跳转到跳转页面。
        {
            TakeReceiptsListViewController *VC = [TakeReceiptsListViewController new];
            VC.enterStyle = NO;
            UINavigationController *na = [[UINavigationController alloc] initWithRootViewController:VC];
            [self.window.rootViewController presentViewController:na animated:YES completion:nil];
        }
    }
    

    iOS7之后会走下面的方法:

    #pragma mark - 此方法是 用户点击了通知,应用在前台 或者开启后台并且应用在后台 时调起
    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler
    {
        completionHandler(UIBackgroundFetchResultNewData);
        // 打印到日志 textView 中
        NSLog(@"********** iOS7.0之后 background **********");
        // 应用在前台 或者后台开启状态下,不跳转页面,让用户选择。
        if (application.applicationState == UIApplicationStateActive || application.applicationState == UIApplicationStateBackground) {
            NSLog(@"acitve or background");
                    UIAlertView *alertView =[[UIAlertView alloc]initWithTitle:@"提示" message:userInfo[@"aps"][@"alert"][@"body"] delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"立即查看", nil];
                    [alertView show];
        }
        else//杀死状态下,直接跳转到跳转页面。
        {
            TakeReceiptsListViewController *VC = [TakeReceiptsListViewController new];
            VC.enterStyle = NO;
            UINavigationController *na = [[UINavigationController alloc] initWithRootViewController:VC];
            [self.window.rootViewController presentViewController:na animated:YES completion:nil];
        }
    }
    

    iOS10 Apple更新了推送方法,收到通知点击触发的方法- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler已被弃用,使用新的方法如下:

    - (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler {
        completionHandler(UIBackgroundFetchResultNewData);
        NSDictionary * userInfo = response.notification.request.content.userInfo;
        [self pushToNewsDetailViewController:userInfo];
    }
    

    如果app未运行的话会先走走如下方法:

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

    然后再走:

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

    相关文章

      网友评论

      • 瘦了就是帅哥:请问如何处理点击某一条推送后其他条不消失?
      • Resurgent:请问有没有遇到过这种情况 收到了消息了 手机震动并且出现小红点 但是上方的通知中心没有出现通知
        Resurgent:找到问题了 是后台有个字段没给我 导致信息不出来 在极光论坛里面有文章 https://community.jiguang.cn/t/jpush/5145/2
      • unhangcorn:干嘛取这么长的名字,直接叫"晨光"就好了:wink:
      • 像个被吓坏的孩子:系统10.0.1,app未运行点击通知进入,不走上面的那个方法,
      • 叁號選手:pushToNewsDetailViewController 请问这句啥意思?
        koreadragon:楼主自己的方法,他在里面跳转控制器了
      • Shixq2016:请问 程序为什么走不到杀死状态下的条件里呢?
        WilsonW:@Shixq2016 試試看這個
        - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{}
      • GeekFounder:你好,想Push的话应该怎么样呢?
        Caiflower:@字母B一路向北 你的根控制器不对吧
        字母B一路向北:楼主我为什么加上这一句会崩溃那?
        晨曦之光nl:@SteveZhong [((UITabBarController *)self.window.rootViewController).selectedViewController pushViewController:na animated:YES];
      • fe4a5edc73de:enterStyle???求解释
        晨曦之光nl:@老男孩19910717 这个是我自己代码里自定义的属性 :smile:
      • JasonLin826:解决问题

      本文标题:iOS远程推送点击消息跳转到指定页面

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