uni-app如何使用Unipush实现消息推送(在线&离线)
一、前期准备
在动手之前建议先看下官方文档:https://ask.dcloud.net.cn/article/id-35622__page-5
首先,在App模块配置勾选如下后,点击配置进入DCloud开发者中心
第一次进来的话,可能会要求填写相应的资料,按步骤填写即可,不做详细介绍
二、在线推送
在线推送的话比较简单,坑比较少,很快就能实现
在App.vue中 onLaunch 生命周期中添加如下代码,其中cid表示客户端标识,也就是用户标识
// #ifdef APP-PLUS
var pinf = plus.push.getClientInfo();
var cid = pinf.clientid; //客户端标识
console.log('cid:' + cid);
plus.push.addEventListener(
'click',
function(msg) {
uni.navigateTo({
url: 'pages/new_order/new_order'
});
},
false
);
plus.push.addEventListener(
'receive',
function(msg) {
uni.navigateTo({
url: 'pages/new_order/new_order'
});
},
false
);
// #endif
在这里需要 制作自定义基座后,运行到手机
进入DCloud开发者中心Uni Push模块下的通知消息
填写以上信息即可,其中目标用户中有一个CID用户,就是上面在代码中体现的cid,可以打印出来后复制进来,就会指定用户进行消息的发送
信息填写完毕后点击预览,出现以下界面中,若预计人数中出现大于0,则表示消息可以发送
点击确定后,app会接收到消息推送,当然需要将app打开,也就是标题中的在线推送
二、离线推送
离线推送的话就比较麻烦一点,需要配置厂家通道,这里以小米为例
小米开发者平台:https://dev.mi.com/console/
这里需要进行开发者认证,这里跳过这个环节(注意照片需要按照他的要求来拍摄,否则基本很难通过)
验证通过以后我们就可以来进行应用的添加
填写相关的信息,需要注意的是包名需要和uni-app打包时的包名一致,否者接收不到消息
创建好以后,就得到了我们所需要的AppID、AppKey、AppSecret,填写到对应厂商的设置中
这时需要用到透传消息,至于透传消息原理可以自行百度,配置好以后重复制作自定义基座,然后运行到手机操作
第一次弄的话可以与我格式一致
透传内容如下:
{"title": "测试离线", "content": "我是通过透传发送的消息", "payload": "test"}
通知类型如下:
intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=应用包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end
需要修改的就是上面的应用包名的地方,然后点击预览,同样出现人数的话就表示正常,可以点击确定,发送消息
三、问题总结
1、厂家通道中包名与uni-app云打包中的包名不一致
2、没有在配置好后台完成后,重新进行云打包(如果遇到接收不到消息,可重新打包测试)
3、通知类型中的应用包名填写错误
我本人测试用的小米手机,也遇到了一些问题
1、应用权限没有开启后台弹出界面权限,导致接收不到通知(检查设备是否有禁止后台弹出界面,路径>>设置-应用管理-测试应用-权限管理-后台弹出界面)
2、没有将通知设置为重要通知(检查应用通知管理权限页面,系统推荐按设置为重要通知)
可以看下下面这个链接,官方总结的一些常见问题,作用很大
常见问题:https://ask.dcloud.net.cn/article/id-36611__page-4
本文地址:https://blog.csdn.net/weixin_45122120/article/details/109362385