flutter集成极光推送之冷启动跳转指定模块

遇到问题

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

然后就可以正常处理了。

还有就是需要注意调试推送的时候,选择仅通过厂商通道进行下发。

你可能感兴趣的:(flutter集成极光推送之冷启动跳转指定模块)