uni-app实现本地通知栏消息推送(不使用第三方插件)的知识点和一些坑 0 次阅读

PUSH模块

uni-app已经集成push服务,这是一个包括客户端和服务器的统一服务,整合了苹果APNs、华为、小米、OPPO、VIVO、魅族、谷歌FCM等多家厂商的系统推送和个推的独立推送,不管客户端还是服务器,一套代码多端推送。

并且只需要简单的到项目配置文件manifest.json模块项中勾选一下即可使用。

坑:未添加PUSH模块

未添加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即可。

勾选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()方法来获取消息。

清空所有的通知栏消息

1
2
plus.push.clear(); 

结语

新的知识又增加了~

感谢阅读。

么么哒~~

上一篇 支付宝0门槛红包,每日都可以领取1次
下一篇 使用vercel和github免费实现serverless api接口服务部署
感谢您的支持!
微信赞赏码 微信赞赏
支付宝赞赏码 支付宝赞赏