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

本文介绍iOS中处理远程推送的方法,包括不同版本iOS系统下点击推送消息后的处理流程,以及app在不同状态下的响应方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;


作者:晨曦之光nl
链接:http://www.jianshu.com/p/c0eb32443915
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值