今天填了一个坑,我们app很久之前就有推送功能代码,但是没有太多的实际的推送功能,然后突然发现一个bug,app在杀死状态下接收到推送进入app无法响应跳转。不好填是因为需要杀死app测试,很不好调试,最后用Hud屏幕打印各种东西才找到原因。

首先摘取一篇优秀的博客内容,梳理一下app在各种情况接收到推送响应过程。

设备接到apns发来的通知,应用处理通知有以下几种情况:

1.应用还没有加载

这时如果点击通知的显示按钮,会调用didFinishLaunchingWithOptions,不会调用didReceiveRemoteNotification方法。
如果点击通知的关闭按钮,再点击应用,只会调用didFinishLaunchingWithOptions方法。

2. 应用在前台(foreground)

这时如果收到通知,会触发didReceiveRemoteNotification方法。

3.应用在后台

1.此时如果收到通知,点击显示按钮,会调用didReceiveRemoteNotification方法。
2.点击关闭再点击应用,则上面两个方法都不会被调用这时,只能在applicationWillEnterForeground或者applicationDidBecomeActive,根据发过来通知中的badge进行判断是否有通知,然后发请求获取数据

如第一种所说,didFinishLaunchingWithOptions会被调用但是didReceiveRemoteNotification不会被调用,这个需要特殊解决,但是之前的人写了相关解决代码,但是不是不执行跳转的原因,但是还是先贴一下代码

if (launchOptions != nil) {//app关闭时,收到推送[self application:application didReceiveRemoteNotification:launchOptions[@"UIApplicationLaunchOptionsRemoteNotificationKey"]];}

虽然不执行didReceiveRemoteNotification,但是可以从launchOptions中拿到推送,自己手动执行一下即可。

然后最后找到原因是因为我们在处理跳转的时候没有考虑到当app被杀死执行到推送跳转页面的时候app还没执行到主界面,但是这里却加了判断

if ([[DataManager sharedDataManager].mainWindow.rootViewController isKindOfClass:[RootTabController class]]){// 判断跳转操作
}

执行到这里的时候,rootViewController并不是RootTabController,这个时候的window上应该是广告页。
然后最后采取的方法是上的的判断加else,如果不是的话加一个监听,当进入到app首页后发出通知,然后再此处接收到通知重新执行一次判断跳转操作的代码,不知道还有没有更科学的处理方式

ios-app杀死状态下响应推送相关推荐

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

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

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

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

  3. Android端外推送到底有多烦?(转载自一个1000万用户App的CTO的对推送的看法)

    转载自:https://zhuanlan.zhihu.com/p/22461795 说Android端外推送比较烦,实际有两层意思:首先是说实现上比较麻烦,至今业界也没有找到一种完美的解决方案,And ...

  4. App中如何实现消息推送

    转载地址:https://zhuanlan.zhihu.com/p/19801751 如今的手机每天都会被各种App的消息推送覆盖,消息推送也成了周末去哪儿APP增加自己曝光量的一种重要手段.消息推送 ...

  5. 跨平台应用开发进阶(十一) :uni-app 实现IOS原生APP-云打包集成极光推送(JG-JPUSH)详细教程

    文章目录 一.前言 二.资源 三.集成 四.遇到的问题及解决措施 4.1 IOS开发者证书无推送权限 4.2 manifest中并没有配置push模块.但云端打包ios就是一直报Code Signin ...

  6. 直播平台开发中解决iOS 14 兼容问题和静默推送

    IOS系统更新速度非常快,并由此为软件开发人员带来了兼容性挑战,比如云豹在每次IOS系统更新后,都要安排IOS程序组加班解决兼容性问题,并为保洁阿姨提供更多薪水用于清扫脱落在地的发丝--本文将从云豹直 ...

  7. 国内第三方移动推送对接调查:Android、IOS、Flutter,各种云推送、个推、极光、统一推送联盟

    文章目录 前言 一.来自小组成员的争议 二.开启调查 三.调查结果 总结 前言 第三方移动推送对接,刚开始是移动端发起的.在开会讨论这个对接时,心里突然很迷茫,为什么要做第三方移动推送对接?我们自己为 ...

  8. 浅谈iOS和Android后台实时消息推送的原理和区别

    http://www.52im.net/thread-286-1-1.html 前言 iOS和Android上的实时消息推送差异很大,往小了说是技术实现的差异,往大了说是系统实现理念的不同.实时消息推 ...

  9. iOS第三方集成之jpush极光推送

    iOS第三方集成之jpush极光推送 现在很多app都带推送功能,极光推送是很受大家欢迎的第三方推送,本文将为iOS初学者和初次设计开发推送的攻城狮们提供以下自己的使用心得. 大家可以边参考官方文档, ...

最新文章

  1. Verilog设计实例(2)一步一步实现一个多功能通用计数器
  2. 随机生成文件名字或随机生成一个数
  3. Java性能优化推荐书!RocketMQ消息丢失场景及解决办法
  4. 邮件报文格式和MIME
  5. 微软雅黑的应用[补充中]
  6. uniapp框架之如何修改接口传参的参数
  7. 软件测试管理要素分析
  8. Windows timeout命令
  9. 惠普笔记本苹果w10双系统_苹果macbook pro安装win10双系统的方法
  10. 用scratch编写打地鼠游戏
  11. ubuntu20运行A-LOAM记录
  12. PCB工程师级别评定标准
  13. 2021-04-23 一年后第一次踢球
  14. Word教程-给10以上的数字加个圈圈!
  15. 虚拟机下安装mysql(按相应步骤操作 / 图文)
  16. 【PostgreSQL】ON CONFLICT语句
  17. verilog中一文搞懂有限状态机(FSM)Mealy和Moore状态机(及一段式,二段式,三段式)
  18. Java黑皮书第一章习题
  19. 合同矩阵判断方法及性质
  20. python 斗地主 图形界面_上班摸鱼必备|Python开发命令行斗地主

热门文章

  1. 为什么误差采取平方和形式
  2. XCTF mobile新手区解题记录(WP)以及一些总结和思考
  3. 【C#工具】后宫佳丽三千
  4. “adb”不是内部或外部命令,也不是可运行的程序或批处理文件——解决方案
  5. java鼠标左键点击四溅,重生之我是一只鼠
  6. python 传奇辅助_制作游戏辅助:使用函数窗口处理验证码
  7. PTA L2-043龙龙送外卖
  8. pcb二次钻孔_pcb钻孔的注意事项
  9. i7 10700k和i9 9900k对比哪个好
  10. openlayer地图裁切