IOS推送总结:
1.直接打开APP时,调用didFinishLaunchingWithOptions方法,即使有推送,获取好的推送数量也为0,即:不会执行跳转方法;
2.点击推送(通知栏)打开APP时,调用didFinishLaunchingWithOptions方法,获取到推送的数量不为0,会执行跳转方法;
3.APP在后台运行时,点击推送(通知栏),或者直接再次打开APP时,调用didReceiveRemoteNotification方法,执行跳转方法;
4.APP在前台运行时,收到推送,调用didReceiveRemoteNotification方法,执行跳转方法;

备注:
1.本文不涉及如何建立推送,只写收到推送后如何跳转

#import "AppDelegate.h"@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// 省略...//苹果推送注册[[GTNotificationUtils getInstance] registerRemoteNotification];// 通知跳转,app通过点击顶部推送启动app时,获取推送,如果不为空,则执行推送方法NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];if (remoteNotification) {// 如果通知不为空,则证明收到了推送[self noticeClickDealWithUserInfo:remoteNotification isLaunch:YES];}
}// app打开或者处于后台运行时收到通知后执行调用该代理方法
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{[self noticeClickDealWithUserInfo:userInfo isLaunch:NO];
}// private method
- (void)noticeClickDealWithUserInfo:(NSDictionary *)userInfo isLaunch:(BOOL)isLaunch{// 推送跳转处理NSString *action = [GTAppUtils filterNull:userInfo[@"custom"][@"action"]];if (!action.length) {return;}UIViewController *vc = self.window.rootViewController;UINavigationController *nvc;UITabBarController *tvc;if ([vc isKindOfClass:[UITabBarController class]]) {tvc = (UITabBarController *)vc;nvc = tvc.selectedViewController;}else{}NSString *title = userInfo[@"aps"][@"alert"][@"title"];NSString *content = userInfo[@"aps"][@"alert"][@"body"];void (^pushBlock)() = ^{if ([action isEqualToString:@"1"]) {// 埋单tvc.selectedIndex = 2;}else if ([action isEqualToString:@"2"]){// 预警tvc.selectedIndex = 2;}else if ([action isEqualToString:@"3"]){// 止盈止损tvc.selectedIndex = 2;}else if ([action isEqualToString:@"6"] || [action isEqualToString:@"7"] ||[action isEqualToString:@"8"] || [action isEqualToString:@"5"]){// 文章(实时资讯,财经要闻,财经日历),评论GTArticleViewController *articleVC = [[GTArticleViewController alloc] init];NSMutableDictionary *articleInfo = [NSMutableDictionary dictionary];[articleInfo setValue: [GTAppUtils filterNull:userInfo[@"custom"][@"face_section_name"]] forKey:@"face_section_id"];[articleInfo setValue:[GTAppUtils filterNull:userInfo[@"custom"][@"article_id"]] forKey:@"article_id"];[articleInfo setValue:[GTAppUtils filterNull:userInfo[@"custom"][@"file_url"]] forKey:@"file_url"];articleVC.articleInfoDict = articleInfo;articleVC.hidesBottomBarWhenPushed = YES;[nvc pushViewController:articleVC animated:YES];}else if ([action isEqualToString:@"4"]){// 客服消息if ([[nvc.viewControllers lastObject] isKindOfClass:[GTServicerDetailViewController class]]) {return;}if([[GTUserManager shareManager] judgeIfLogin]){GTServicerDetailViewController *serviceVC = [[GTServicerDetailViewController alloc] init];serviceVC.hidesBottomBarWhenPushed = YES;[nvc pushViewController:serviceVC animated:YES];}else{GTLoginViewController *loginVC = [[GTLoginViewController alloc] init];loginVC.successBlock = ^{GTServicerDetailViewController *serviceVC = [[GTServicerDetailViewController alloc] init];serviceVC.hidesBottomBarWhenPushed = YES;[nvc pushViewController:serviceVC animated:YES];};[nvc pushViewController:loginVC animated:YES];}}else if ([action isEqualToString:@"0"]){// 系统消息}};if (!isLaunch) {// 后台或者前台时给出提示弹窗UIAlertController *alertVC = [UIAlertController alertControllerWithTitle:title message:content preferredStyle:UIAlertControllerStyleAlert];UIAlertAction *action1 = [UIAlertAction actionWithTitle:@"确定" style:UIAlertActionStyleDefault handler:^(UIAlertAction * _Nonnull action) {pushBlock();}];UIAlertAction *action2 = [UIAlertAction actionWithTitle:@"取消" style:UIAlertActionStyleCancel handler:nil];[alertVC addAction:action1];[alertVC addAction:action2];UIViewController *rootVC = [[[UIApplication sharedApplication] delegate] window].rootViewController;[rootVC presentViewController:alertVC animated:YES completion:nil];}else{// 如果是打开APP,则直接跳转pushBlock();}
}
@end

IOS:APP三种状态下收到推送后的跳转操作相关推荐

  1. iOS应用不同状态下收到推送的处理

    从简书挪窝过来的 1.为什么要使用推送? 增加用户活跃度 唤醒沉睡的用户 增加用户粘度 化被动为主动 推送切记不能过于频繁,否则会起到相反的作用 2. 推送从服务器到达目标设备过程 阶段一:服务端把要 ...

  2. 极光推送flutter插件,前台收到推送后没有通知弹窗

    在激光推送Flutter插件中,有如下一个API: applyPushAuthority,注释原话是这样的:申请推送权限,注意这个方法只会向用户弹出一次推送权限请求(如果用户不同意,之后只能用户到设置 ...

  3. Android APP息屏状态下收到通知解决方案

    1.问题 最近负责的Android APP,用户反馈无法收到通知,尤其是息屏状态下无法收到通知. 这些APP,笔者以前都测试过,可以收到推送的.但测试以后,发现在新的Android上,确实收不到通知和 ...

  4. ios-app杀死状态下响应推送

    今天填了一个坑,我们app很久之前就有推送功能代码,但是没有太多的实际的推送功能,然后突然发现一个bug,app在杀死状态下接收到推送进入app无法响应跳转.不好填是因为需要杀死app测试,很不好调试 ...

  5. 【Qt】为应用程序设置标题栏、状态栏、可执行程序显示 三种状态下的图标

    Qt为应用程序添加图标的几种方式 应用程序的图标分为: 程序左上角显示的标题栏的图标: 程序打开后在任务栏显示的状态栏图标: 程序在文件管理器中显示的可执行程序图标: 设置这几种图标的方式有以下几种. ...

  6. iOS 疑难杂症— — 收到推送显示后自动消失的问题

    声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 问题 正在支持 Remote Noti ...

  7. 官方老爹之痛:为什么苹果能收到推送,而安卓不行?

    还记得上次我们做过的试验么? 我们在 iOS 设备杀掉进程后能收到推送,而 Android 设备却不行.这个问题可困惑了小树很长时间,这天趁着工作清闲,又跑到小黑工位上请教了. 小黑喝了口茶便开始说, ...

  8. ios极光推送 App收到推送消息时,修改BadgeNumber,同时点击状态栏消息以后跳到指定的页面和静默推送

    极光推送生产环境测试需要打包为adhot或者用testflight 在收到远程推送的消息的时候,有以下三种情况需要考虑: 1. 程序在后台运行 2. 程序未运行 3. 程序运行在前台 原则上,应用在收 ...

  9. 苹果iOS系统下的推送机制及实现

    苹果iOS系统下的推送机制及实现 浏览:785次  出处信息 width="336" height="280" frameborder="0" ...

  10. android推送服务不被关闭,Android APP被关闭后无法收到推送消息(尝试)

    1.   Android端进程被杀死后,目前自带的保护后台接收消息活跃机制.暂时没有什么好的机制保持任何情况下都活跃 文章参考:http://blog.csdn.net/marswin89/artic ...

最新文章

  1. oc 协议 回调 静态成员_OC底层原理探究:Category、关联对象和block本质
  2. springboot 集成mybatis时日志输出
  3. SLAM中的卡尔曼滤波:究竟滤了谁?
  4. java mail 发件人昵称,Java使用javax.mail发送邮件 解决收件人、发件人名字乱码问题...
  5. matlab 32和64,在32或64位matlab上运行?
  6. 炒股的最终下场(搞笑趣图)
  7. 计算机仿真软件在医疗应用,医学虚拟仿真应用介绍
  8. 移动互联网组建与优化
  9. 计算机网络的组成有哪些
  10. 网页设计期末结课作业 html+css+js房地产企业官网网站制作与实现
  11. 第10章: 面向对象编程(高级部分)
  12. STM32 hal库串口空闲中断最新用法
  13. 讲明白——K8S各核心架构组件
  14. rtp server
  15. windows 硬盘对拷
  16. addEvent函数
  17. 华为手机usb计算机连接在哪里设置密码,简单十步设置Huawei Share,手机与电脑传输从此告别数据线...
  18. QR Code生成二维码快速入门
  19. Java8中 LocalDate和java.sql.Date的相互转换
  20. C#与三菱,西门子,台达,基恩士,等各品牌plc通讯源码

热门文章

  1. 字节码指令之控制转移指令
  2. 分布式事务各方案对比分析
  3. dubbo源码之SPI机制源码
  4. Confluence 6 查看你的许可证细节
  5. 前端注释那些事儿:看懂这篇,提高代码质量So easy
  6. spring 注入 list和map及enum映射
  7. 使用Fresco实现简单的显示一张图片
  8. Quart2D文字图像绘制
  9. 地铁沉降观测数据分析之巧用VBA编程处理
  10. cacti 监控自身