PUSH模块
uni-app已经集成push服务,这是一个包括客户端和服务器的统一服务,整合了苹果APNs、华为、小米、OPPO、VIVO、魅族、谷歌FCM等多家厂商的系统推送和个推的独立推送,不管客户端还是服务器,一套代码多端推送。
并且只需要简单的到项目配置文件manifest.json模块项中勾选一下即可使用。
坑:未添加PUSH模块

这个问题很奇怪,不管是云打包正式版,还是打包测试基座什么的,一直都是提示这个。
解决
这个问题虽然很奇怪,但是也很简单,只需要在项目配置文件manifest.json勾选push模块后,重新打包一次测试基座。
push模块2.0
push2.0比1.0升级之处在于:
1.支持5+全端推送;
2.不使用后端集成个推api,只需要将云函数url化,给后端这个url就行;
3.还是要集成各大厂商的SDK,这点是和1.0一模一样的。
4.要调用云函数(收费),虽然不是很贵,但是只是为了推送个通知消息就要再买一个云服务器,有点无语住。。。
今天只是讲讲push1.0的实现本地通知,就不谈服务器得了。
勾选了PUSH模块后,点击配置按钮,会自动跳转到uni-app的网页端应用设置页,在上面配置一下自己的应用开通一下push即可。

判断是否开启通知权限
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| enablPermission(){ let main = plus.android.runtimeMainActivity(); let pkName = main.getPackageName(); let uid = main.getApplicationInfo().plusGetAttribute("uid"); let NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat"); //android.support.v4升级为androidx if (NotificationManagerCompat == null) { NotificationManagerCompat = plus.android.importClass("androidx.core.app.NotificationManagerCompat"); } let areNotificationsEnabled = NotificationManagerCompat.from(main).areNotificationsEnabled(); // 未开通‘允许通知'权限,则弹窗提醒开通,并点击确认后,跳转到系统设置页面进行设置 if (!areNotificationsEnabled) { uni.showModal({ title: '通知权限开启提醒', content: '您还没有开启通知权限,无法接受到消息通知,请前往设置!', showCancel: false, confirmText: '去设置', success: function(res) { if (res.confirm) { let Intent = plus.android.importClass('android.content.Intent'); let Build = plus.android.importClass("android.os.Build"); //android 8.0引导 if (Build.VERSION.SDK_INT >= 26) { let intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS'); intent.putExtra('android.provider.extra.APP_PACKAGE', pkName); } else if (Build.VERSION.SDK_INT >= 21) { //android 5.0-7.0 let intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS'); intent.putExtra("app_package", pkName); intent.putExtra("app_uid", uid); } else { //(<21)其他--跳转到该应用管理的详情页 intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS); let uri = Uri.fromParts("package", mainActivity.getPackageName(), null); intent.setData(uri); } // 跳转到该应用的系统通知设置页 main.startActivity(intent); } } }); } }
|
实现本地消息的推送
1 2 3 4 5 6 7 8 9 10 11 12 13
| let content = "您有一条新的消息~"; let options = { "cover" : false, "when" : new Date(), 'title' : "通知消息" }; let body = { 'id' : 'id', 'key': "key" } let payload = JSON.stringify(body); plus.push.createMessage(content, payload, options);
|
各项参数说明:
content
: ( String 类型) 必选,消息显示的内容,在系统通知中心中显示的文本内容。
payload
: ( String 类型 ) 可选,消息承载的数据,可根据业务逻辑自定义数据格式。
option
: ( MessageOptions ) 可选 创建消息的额外参数,参考MessageOptions。
MessageOptions
:JSON对象,获客户端创建本地消息的参数:
① title: (String 类型 )推送消息的标题。
② sound: (String 类型 )推送消息的提示音,显示消息时的播放的提示音,可取值:
“system”-表示使用系统通知提示音; “none”-表示不使用提示音; 默认值为“system”。
③ cover: (Boolean 类型)是否覆盖上一次提示的消息。
可取值true或false,true为覆盖,false不覆盖
④ when: (Date 类型 )消息上显示的提示时间。
⑤ delay: (Number 类型)提示消息延迟显示的时间。
当设备接收到推送消息后,可不立即显示,而是延迟一段时间显示,延迟时间单位为s,默认为0s,立即显示。
其他方法
获取所有信息
1 2 3 4
| getAllMessage(){ return plus.push.getAllMessage(); }
|
获取客户端标识
1 2
| plus.push.getClientInfo();
|
捕获点击的通知栏消息内容
1 2 3 4 5
| plus.push.addEventListener( "click", function(msg){ console.log( "您点击了: " + JSON.stringify(msg) ); // TODO... }, false);
|
删除指定的通知栏消息
1 2
| plus.push.remove( message );
|
参数:message: ( PushMessage ) 必填,要删除的消息对象,可通过getAllMessage()方法来获取消息。
清空所有的通知栏消息
结语
新的知识又增加了~
感谢阅读。
么么哒~~