极光多厂商离线推送,点击只能跳转app首页,不能跳转指定页面
现象:应用集成极光推送,在线和厂商离线都测试好好的。忽然有一天,客户投诉手机点击通知,只能打开app首页。
问题分析:拿到推送数据,自己手机和测试机挨个测试,均能正常打开指定页。后来使用场景分析好久,才发现直接杀进程推送没问题,必须杀进程之后放置2个小时才会只能到首页。所以初步怀疑是不是杀进程应用假死,放置2小时应用被彻底清除,点击通知才会自动拉起app。问了极光的客服,说是升级新的版本号之后就没这个问题啦。看了下版本号是修复过的。后台网上查推送启动app跳转指定页,找到这个问题“Android 推送点击跳转与华为推送神坑”对应链接:https://www.jianshu.com/p/3458f691a48a,杀进程,放置一个小时以上。跳转app指定页面后,会重新拉起app,如果app首页设置singleTask启动模式,会导致之前的指定页面被清理。具体现象就是,只能到app首页,没能启动指定页面。
解决方案尝试:1.首先根据上面问题描述的解决方案,点击通知,缓存对应的通知消息内容。然后在app被拉起时,判断传递过去的intent有数据就直接跳转,没数据在获取缓存的通知内容进行跳转。测试一下,果然可以。但是仔细想想还是有问题的,你不知道啥时候清理缓存的数据啊,因为你不知道是否会自动拉起app,所以这个方案被放弃。
2.然后打印首页生命周期发现,app被重新拉会走onNewIntent方法,所以我在想在这个回调里面重新跳转是不是就可以了。干起来,代码重新加一下,开始测试。还是不行,打log发现intent是空的。那能不能拿到第一次启动的intent数据呢,仔细看了下onNewIntent方法使用,不设置setIntent方法,直接使用getIntent拿到的就是旧数据。赶紧重新改了下,果然拿到了旧的推送数据,跳转成功。多台手机测试,无问题。
最终解决方案:在app首页oncreate和onNewIntent方法内,同时添加获取intent推送数据,然后做跳转逻辑,注意:onNewIntent获取参数一定要用getIntent(),不要直接用intent。
最后,点击通知打开app指定页,返回到app首页实现方式:
在对应通知点击回调onMessageOpen里面添加跳转逻辑。一般需求是跳转指定页面后返回要到app首页,因此最简单的就是,直接跳转首页,将推送数据传递过去。然后在app首页根据推送内容跳转对应指定页。分两种情况
1.app进程打开:如下直接打开两个页面,返回就是首页。
Intent[] intents = new Intent[2];
Intent intent_main = new Intent(getApplicationContext(), MainActivity.class);
Intent intent_target = new Intent(getApplicationContext(), TargetActivity.class);
2.app进程不存在或被杀死,直接启动app首页,并传递跳转参数到首页,然后在首页进行跳转。
网友评论