![1b8cf0f4da2762ce811fd5f145b35aa3.png](https://i-blog.csdnimg.cn/blog_migrate/45c40c9e5318dc6f0168f1fa50009517.jpeg)
极光推送在国内的App的覆盖率比较高,在第一时间就更新了对flutter
的支持,使用极光简单配置后就可以进行远端推送和本地定时推送,非常方便。
推荐使用
android
进行测试,配置简单,ios需要证书,相对比较复杂。我也是用的安卓端进行演示。
注册极光
先到极光官网,注册账号,配置一下flutter
项目的包名,如果不记得了,可以到flutter项目下的 android/app/build.gradle
中找一下,defaultConfig
下的 applicationId
就是包名,这个配置文件不要关,后续我们还会再回来。
![72453459737528f7f7593a004544ae17.png](https://i-blog.csdnimg.cn/blog_migrate/df89090c244158c8d239515c426d8636.jpeg)
在极光配置好安卓的包名后,我们会得到 AppKey,到这就算注册完成。
![6a01fcb126c7f4d22e60bda0a537830a.png](https://i-blog.csdnimg.cn/blog_migrate/1368494db414ac2faf33cbeddd0028b5.jpeg)
![ead6f0ae8114af31135deca4e8b8b77d.png](https://i-blog.csdnimg.cn/blog_migrate/d6fbf5854ae7382ba5f75da25bb8f82e.jpeg)
项目配置
继续打开,android/app/build.gradle
文件。
- 将
defaultConfig
中minSdkVersion
修改为 17,flutter
创建后默认是16
,无法使用极光推送。 defaultConfig
中添加manifestPlaceholders
。
![9687c89795bb7a167a24216a7a328996.png](https://i-blog.csdnimg.cn/blog_migrate/70e70cf7bde7d7d50a6037d0eacf17ef.jpeg)
下面是我的配置,大家根据自己的情况修改即可:
defaultConfig {
applicationId "cn.idiocy66.fe_mp" // 包名
minSdkVersion 17 // 修改为17
targetSdkVersion 28
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
// 极光配置
manifestPlaceholders = [
JPUSH_PKGNAME : applicationId,
JPUSH_APPKEY : "9bf4f58ea9471001e0a4d66d", // 极光中的appkey
JPUSH_CHANNEL : "developer-default", // 默认即可.
]
}
初始化
配置完成,可以运行推送功能了。 使用极光推送功能前,必须先执行初始化函数:
final JPush jpush = new JPush();
jpush.setup(
appKey: "9bf4f58ea9471001e0a4d66d", // 极光中的appkey
channel: "theChannel",
production: false,
debug: true,
);
如果不进行初始化操作,在极光后台无法查询到对应的机器信息,也就无法使用推送功能。
获得唯一 rid
在同一个极光应用中,每个设备都拥有唯一的一个id,用于身份验证,后台也可以单独向这个rid进行消息推送。
使用getRegistrationID
函数获取当前设备的rid
:
jpush.getRegistrationID().then((rid) {
print("当前设备的rid: ${rid}");
});
本地推送
本地推送并不会收到极光的条数限制:
var localNotification = LocalNotification(
id: 234,
title: "本地推送",
buildId: 1,
content: " 随便写点内容,时间 ${DateTime.now().toIso8601String()}",
fireTime: DateTime.now(), // 立即发送
subtitle: "副标题 123456",
badge: 1,
extra: {"myInfo": "推送信息balabla"} // 携带数据
);
jpush.sendLocalNotification(localNotification);
![b8ba7a2507c9e8ae5be801676cc375a8.png](https://i-blog.csdnimg.cn/blog_migrate/cf351e6e433298e7f29d174956da8c05.png)
本地定时推送
定时本地推送,传入DateTime,绝对时间。
// 3秒后进行本地推送
var fireDate = DateTime.fromMillisecondsSinceEpoch(DateTime.now().millisecondsSinceEpoch + 3000);
var localNotification = LocalNotification(
id: 1,
title: '定时推送',
buildId: 1,
content: '三秒后本地推送',
fireTime: fireDate,
subtitle: '子标题',
badge: 5,
extra: {"data": "附带数据"}
);
jpush.sendLocalNotification(localNotification);
![ed20706be8bc2f7758e583a65adf9a8c.png](https://i-blog.csdnimg.cn/blog_migrate/79f2e69110516349dc5cb559b20e9da5.png)
远程推送
远程推送,我们暂时可以使用极光后台进行,当然有后台能力也可以直接使用api调用。
默认优先级的消息不会弹窗显示,需要调高优先级则可以在屏幕顶部弹出。
![186a282083543b62abc12e2943d681a7.png](https://i-blog.csdnimg.cn/blog_migrate/579db6feed21367c9311489472d70d06.png)
跳转系统推送设置
跳转到系统设置中的推送设置(当前应用),点击返回可以直接返回当前应用。 经常用于用户关闭推送后的再提醒。
jpush.openSettingsForNotification();
![ad79279689833f30fbfb5acd8bedf9d1.png](https://i-blog.csdnimg.cn/blog_migrate/846ea81c55a460e3c80a9462f65af8d1.png)
通常需要和权限获取相配合:
jpush.isNotificationEnabled().then((bool value) {
// 返回是否开启通知
});
当用户禁止通知时,提示跳转系统配置进行开启通知操作。
消息监听
推荐在 初始化函数 setup
前进行通知监控:
jpush.addEventHandler(
onReceiveNotification: (Map<String, dynamic> message) async {
print("接收到推送: $message");
},
onOpenNotification: (Map<String, dynamic> message) async {
print("通过点击推送进入app: $message");
},
onReceiveMessage: (Map<String, dynamic> message) async {
print("接收到自定义消息: $message");
},
onReceiveNotificationAuthorization: (Map<String, dynamic> message) async {
print("通知权限状态: $message");
}
);
推送和消息不同,推送是会显示在设备通知栏中,而消息不会。
消息是由后端api发送给设备上的,不会有任何提示,只能靠这里的监听来接收。
ios 推送是需要用户确认授权的,与安卓有差异,需要单独调用
applyPushAuthority
方法,弹出授权。如果用户不同意,后续无法再次弹出,只能跳转系统配置页面开启推送权限。
其他
![faec02e79ce495d98cffd4e6b3978c6f.png](https://i-blog.csdnimg.cn/blog_migrate/35d0d2f3afb2779faa658526162e145f.jpeg)
推送的强大不仅如此,还有设置标签
、设置别名
等功能,可以将每个用户都进行精细划分,做到更精准的推送。
更多内容欢迎关注公众号:《前端拾遗》
http://weixin.qq.com/r/Yzi5oT-E4mKdrXvC921x (二维码自动识别)
- END -