开通UniPush推送服务
- UniPush仅支持uni-app类型项目,其它类型项目暂不支持。
- 开通UniPush后,需在后台配置“厂商推送设置”,否则可能在服务端下发推送消息界面中不会显示第三方厂商(手机厂商)
- 厂家配置(了解配置流程),一般用于离线推送。需要获取厂家key,id可以个人或者公司名义去申请1-3天就可以申请到
那么怎样才算是离线呢?(滑稽)离线说明.txt
在Hbuilder中修改mainfest.json文件配置
我这里勾选了两个选项
自定义基座
- 需要先自定义基座(因为推送也是需要依赖包名等信息的,官方说过,推送必须要用自定义基座才行)
- 填写的包名要和上面unipush管理页面中配置的一样,自定义完打包 然后出现下图的提示 按照提示的来操作运行
- 登录dcloud账号进入对应的应用 https://dev.dcloud.net.cn/
推送测试
- 进入unipush推送通知的页面创建推送,填写通知标题和通知内容,此处如果有客户端之前运行成功,那么预计人数会不是0人,如果是0人的话确定按钮会无法点击,因为无人可推;即使在目标选择中根据客户端输出的clientid选择了特定用户,手机端也是无法推送的。此处如果不行,就再去检查包名配置和基座选择是否有问题。
服务端下发推送消息
intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=io.dcloud.Ye/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end
- 其中io.dcloud.Ye为APP包名,需要替换为自己APP的包名;
- S.title=的值为推送消息标题,对应5+ API中PushMessage对象的title属性值;
- S.content=的值为推送消息内容,对应5+ API中PushMessage对象的content属性值;
- S.payload=的值为推送消息的数据,对应5+ API中PushMessage对象的payload属性值;
- launchFlags=0x14000000字段,解决接收多条通知后点击可能无法触发click事件的问题
- 传送的消息内容必须是json格式不然你等半天也等不到消息
测试代码
//#ifdef APP-PLUS
/* 5+ push 消息推送 ps:使用:H5+的方式监听,实现推送*/
plus.push.addEventListener(
'click',
function(msg) {
console.log('click:' + JSON.stringify(msg));
console.log('msg.payload', msg.payload);
console.log('JSON.stringify(msg)', JSON.stringify(msg));
//这里可以写跳转业务代码
console.log('click-从系统消息中心点击消息启动应用事件');
},
false
);
// 监听在线消息事件
plus.push.addEventListener(
'receive',
function(msg) {
// plus.ui.alert(2);
//这里可以写跳转业务代码
console.log('receive-应用从推送服务器接收到推送消息事件》》》》》》》透息');
console.log('recevice:' + JSON.stringify(msg));
},
false
);
//#endif
// #ifdef APP-PLUS
// 获取客户端标识 根据不同设备来进行推送消息
getClientInfo() {
let cidTimer = null;
var pinf = plus.push.getClientInfo();
var cid = pinf.clientid; //客户端标识
console.log(cid, '》》》》》》》》》》》》》》》》cid');
}
// #endif
注意事项
- 有时cid获取不到,导致的原因可能是打包时没有带上配置选项或者是hbx软件问题,建议先demo测试一波
- 通知(官方定义好样式直接发送)与透息(json模式,需要自己配置来进行显示)
- 使用透息方便ios推送少做修改
- 厂家配置是在离线的时候通过厂商通道来推送消息(使用厂商通道必须使用“透传消息”类型下发推送消息)
- 手机必须是云打包或者自定义基座运行的app
- 填写正确clientId,这个id定位了你的手机,可以理解为手机的ip。
- 手机通知权限要打开,要不你就等到天荒地老吧
DCLOUD完全依赖个推,所以个推的官方文档在uniapp的push模块完全适用。
推送通道选择逻辑
Android平台
APP在线(个推推送通道可用)
推送通知和透传消息都使用个推的推送通道下发推送消息。
APP离线(个推推送通道不可用)
推送通知,使用个推离线推送通道,离线消息会存储在消息离线库,离线时间内APP在线后下发推送消息。
透传消息,如果符合厂商推送的厂商手机(配置了手机厂商推送参数并且在对应厂商的手机上),则使用厂商推送通道下发推送消息;否则使用个推的离线推送通道,离线消息会存储在消息离线库,离线时间内APP在线后下发推送消息。- iOS平台
推送通知,不支持。
透传消息,设置APN参数则通过苹果的APNS通道下发推送消息,没有设置APN参数则使用个推的推送通道下发。
华为厂商通道
在华为手机上必须安装“华为移动服务”才能使用华为的厂商推送通道,首先确保手机上已经安装“华为移动服务”应用。
如果在华为手机应用退出后无法接收到推送消息,可尝试以下操作:
- 更新“华为移动服务”到最新版本;
- 进入手机“设置”,在[应用和通知]->[应用管理]->[华为移动服务]->[存储]页面选择“删除数据”。
重新启动应用,退出后再此下发推送消息。其它厂商通道
如果应用在线可以接收到推送消息,离线时使用厂商通道无法接收到推送消息,可参考多厂商推送接入流程及注意事项文档(Android)
uniPush非常严格所以也有点复杂所以得耐心的去了解 点开文章的备注链接可以解决你百分之九十的烦恼(可能是我太差才这么认为的,强者请忽略这则提示!)
java后端小乌龟地址:svn://svnbucket.com/xiaoqingqing/unified-pushapi-java-demo/