遇到问题
app集成了极光推送。除了推送消息之外还需要实现点击通知之后跳转到指定模块。在按照激光的文档完成配置之后,出现了几个问题。
1.在app被关闭的时候后,Android端无法正常收到推送。需要启动app之后才会接收到推送消息。或是app在启动的情况下,也可正常接收到推送消息。ios端没有这个问题,无论app是否启动的状态,都可以收到推送。
2.虽说ios在app没有启动的时候,可以收到推送,但是却无法读取到我在推送的时候添加的附加参数,导致无法完成跳转到指定模块的功能。
3.第1个问题,app关闭后无法接收到推送,后来通过集成厂商通道的方式解决了,但是却和ios端一样,虽然收到了,但是无法获取到附加参数。
如果你也是这三种情况的话,接着往下看。
iOS端解决
先来说ios端:经过查阅文档,发现极光推送插件有个方法是getLaunchAppNotification() 他的方法签名就已经说明这个问题了。
/// 点击推送启动应用的时候原生会将该 notification 缓存起来,该方法用于获取缓存 notification
/// 注意:notification 可能是 remoteNotification 和 localNotification,两种推送字段不一样。
/// 如果不是通过点击推送启动应用,比如点击应用 icon 直接启动应用,notification 会返回 @{}。
也就是说,点击之后可以调用这个方法获取到缓存的通知
final JPush jpush = JPush();
jpush.getLaunchAppNotification()
这就可以获取到的就是推送的时候附加的参数,后面就解析使用就可以了。
Android端解决
android有点复杂,没有发现有现成的方法。后来是借鉴了一个Android的解决方案解决的 。需要了解Flutter和原生交互。
参考链接:https://blog.csdn.net/smaillift/article/details/105726889
大概意思就是,通过在Activity中获取启动android视图的参数,之前搞Android的同学应该明白什么意思。
不明白的也没关系,其实就相当于,启动app的时候,有个默认的主页,相当于给这个主页传参数,然后有方法可以获取到这些参数。
我采用的解决方式是,当程序启动之后,在首页初始化的时候,Flutter和Android原生进行交互,取到这些参数,返回给Flutter,进行处理。
具体步骤如下
在创建推送的时候,添加自己需要附加的参数之后,在找到天蝎url_activity的地方,然后把flutter android项目的主activity填写上,例如:com.test.pack.MainActivity
com.test.pack 是自己项目的包命,注意这里不要直接cv。
极光创建推送然后创建一个flutter和原生交互的方法
红色为获取参数取到的参数是个String格式,可以直接json.decode
然后就可以正常处理了。
还有就是需要注意调试推送的时候,选择仅通过厂商通道进行下发。
网友评论