最近项目中用到了信鸽推送,特来分享一些踩坑经验。
目前信鸽的推送有2种设置方式,1是信鸽推荐的:在下发消息的时候设置点击消息要跳转的页面;2是在app里判断,再进行分发。这里主要说说第2种。
[代码]java代码:
Intent intent = new Intent(context,Ac_Balance. class ); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(intent); |
就在我以为万事大吉的时候,神奇的事情发生了,跳转到指定界面后,紧接着又跳回首页了。
纳尼???
去翻了翻官方文档,文档里是这样说的:
由于目前sdk点击 消息默认会有点击事件,默认的点击事件是打开主界面。所以在终端点击消息回调onNotifactionClickedResult方法内,设置跳转操作,自定义的跳转和默认的点击事件造成冲突。反应情况是会跳转到指定界面过后再回到主界面。所以不能再onNotifactionClickedResult内设置跳转。
不过这难不倒我们万能的程序猿,百度大法加上一系列尝试,还是解决了这个奇葩的问题,代码如下。
思路是这样,点击通知栏统一跳转至开屏页,然后在开屏页做分发。
首先,拿到数据,跳转至开屏页
[代码]java代码:
Intent intent = new Intent(context, Ac_Splash. class ); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); if (xgPushModel != null ) { intent.putExtra( "jump_type" , xgPushModel.getJump_type()); } else { intent.putExtra( "jump_type" , "" ); } context.startActivity(intent); |
然后,需要判断是不是点击信鸽的推送消息进来的,请注意,这段代码要放在oncreate 方法中
[代码]java代码:
最后,是做分发。
[代码]java代码:
switch (jump_type) { case "pay" : //我的OH币 intent.setClass(context, Ac_Balance. class ); break ; case "index" : //首页 intent.setClass(context, Ac_Main. class ); break ; case "invite_reward" : //邀请奖励 intent.setClass(context, Ac_Invite. class ); break ; case "activity" : //活动消息 intent.setClass(context, Ac_Message. class ); break ; default : //平台消息 intent.setClass(context, Ac_Message. class ); intent.putExtra( "index" , 1 ); break ; } |