美文网首页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