极光推送在国内的App的覆盖率比较高,在第一时间就更新了对flutter
的支持,使用极光简单配置后就能够进行远端推送和本地定时推送,很是方便。前端
推荐使用
android
进行测试,配置简单,ios须要证书,相对比较复杂。我也是用的安卓端进行演示。
先到极光官网,注册帐号,配置一下flutter
项目的包名,若是不记得了,能够到flutter项目下的 android/app/build.gradle
中找一下,defaultConfig
下的 applicationId
就是包名,这个配置文件不要关,后续咱们还会再回来。android
在极光配置好安卓的包名后,咱们会获得 AppKey,到这就算注册完成。ios
继续打开,android/app/build.gradle
文件。后端
defaultConfig
中 minSdkVersion
修改成 17,flutter
建立后默认是16
,没法使用极光推送。defaultConfig
中添加 manifestPlaceholders
。下面是个人配置,你们根据本身的状况修改便可:api
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", // 默认便可. ] }
配置完成,能够运行推送功能了。
使用极光推送功能前,必须先执行初始化函数:app
final JPush jpush = new JPush(); jpush.setup( appKey: "9bf4f58ea9471001e0a4d66d", // 极光中的appkey channel: "theChannel", production: false, debug: true, );
若是不进行初始化操做,在极光后台没法查询到对应的机器信息,也就没法使用推送功能。async
在同一个极光应用中,每一个设备都拥有惟一的一个id,用于身份验证,后台也能够单独向这个rid进行消息推送。函数
使用getRegistrationID
函数获取当前设备的rid
:测试
jpush.getRegistrationID().then((rid) { print("当前设备的rid: ${rid}"); });
本地推送并不会收到极光的条数限制:gradle
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);
定时本地推送,传入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);
远程推送,咱们暂时可使用极光后台进行,固然有后台能力也能够直接使用api调用。
默认优先级的消息不会弹窗显示,须要调高优先级则能够在屏幕顶部弹出。
跳转到系统设置中的推送设置(当前应用),点击返回能够直接返回当前应用。
常常用于用户关闭推送后的再提醒。
jpush.openSettingsForNotification();
一般须要和权限获取相配合:
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
方法,弹出受权。若是用户不一样意,后续没法再次弹出,只能跳转系统配置页面开启推送权限。
推送的强大不只如此,还有设置标签
、设置别名
等功能,能够将每一个用户都进行精细划分,作到更精准的推送。
更多内容欢迎关注公众号:《前端拾遗》