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

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;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 很多应用都会实现推送功能,我们可以集成第三方框架实现推送功能,比如:JPush推送:https://www.jpu...
    乡水情缘阅读 12,544评论 1 8
  • 引言:iOS开发,推送可以说是必须的,但是之前对于推送总是概念模糊,最近借公司项目需求,深入了解了一下。“对于知识...
    ibabyblue阅读 5,198评论 36 8
  • 极光推送: 1.JPush当前版本是1.8.2,其SDK的开发除了正常的功能完善和扩展外也紧随苹果官方的步伐,SD...
    Isspace阅读 11,720评论 10 16
  • 推送通知 注意:这里说的推送通知跟NSNotification有所区别 NSNotification是抽象的,不可...
    iOS开发攻城狮阅读 9,771评论 1 13
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,418评论 4 61

友情链接更多精彩内容