image.png

开通UniPush推送服务

  • UniPush仅支持uni-app类型项目,其它类型项目暂不支持。
  • 开通UniPush后,需在后台配置“厂商推送设置”,否则可能在服务端下发推送消息界面中不会显示第三方厂商(手机厂商)
  • 厂家配置(了解配置流程),一般用于离线推送。需要获取厂家key,id可以个人或者公司名义去申请1-3天就可以申请到
  • 那么怎样才算是离线呢?(滑稽)离线说明.txt

    在Hbuilder中修改mainfest.json文件配置

  • 我这里勾选了两个选项

image.png

自定义基座

  • 需要先自定义基座(因为推送也是需要依赖包名等信息的,官方说过,推送必须要用自定义基座才行)

image.png

  • 填写的包名要和上面unipush管理页面中配置的一样,自定义完打包 然后出现下图的提示 按照提示的来操作运行

image.png

推送测试

  • 进入unipush推送通知的页面创建推送,填写通知标题和通知内容,此处如果有客户端之前运行成功,那么预计人数会不是0人,如果是0人的话确定按钮会无法点击,因为无人可推;即使在目标选择中根据客户端输出的clientid选择了特定用户,手机端也是无法推送的。此处如果不行,就再去检查包名配置和基座选择是否有问题。

image.png

服务端下发推送消息

  1. 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格式不然你等半天也等不到消息

测试代码

  1. //#ifdef APP-PLUS
  2. /* 5+ push 消息推送 ps:使用:H5+的方式监听,实现推送*/
  3. plus.push.addEventListener(
  4. 'click',
  5. function(msg) {
  6. console.log('click:' + JSON.stringify(msg));
  7. console.log('msg.payload', msg.payload);
  8. console.log('JSON.stringify(msg)', JSON.stringify(msg));
  9. //这里可以写跳转业务代码
  10. console.log('click-从系统消息中心点击消息启动应用事件');
  11. },
  12. false
  13. );
  14. // 监听在线消息事件
  15. plus.push.addEventListener(
  16. 'receive',
  17. function(msg) {
  18. // plus.ui.alert(2);
  19. //这里可以写跳转业务代码
  20. console.log('receive-应用从推送服务器接收到推送消息事件》》》》》》》透息');
  21. console.log('recevice:' + JSON.stringify(msg));
  22. },
  23. false
  24. );
  25. //#endif
  26. // #ifdef APP-PLUS
  27. // 获取客户端标识 根据不同设备来进行推送消息
  28. getClientInfo() {
  29. let cidTimer = null;
  30. var pinf = plus.push.getClientInfo();
  31. var cid = pinf.clientid; //客户端标识
  32. console.log(cid, '》》》》》》》》》》》》》》》》cid');
  33. }
  34. // #endif

注意事项

  • 有时cid获取不到,导致的原因可能是打包时没有带上配置选项或者是hbx软件问题,建议先demo测试一波
  • 通知(官方定义好样式直接发送)与透息(json模式,需要自己配置来进行显示)
  • 使用透息方便ios推送少做修改
  • 厂家配置是在离线的时候通过厂商通道来推送消息(使用厂商通道必须使用“透传消息”类型下发推送消息)
  • 手机必须是云打包或者自定义基座运行的app
  • 填写正确clientId,这个id定位了你的手机,可以理解为手机的ip。
  • 手机通知权限要打开,要不你就等到天荒地老吧
  • DCLOUD完全依赖个推,所以个推的官方文档在uniapp的push模块完全适用。

    推送通道选择逻辑

  • Android平台
    APP在线(个推推送通道可用)
    推送通知和透传消息都使用个推的推送通道下发推送消息。
    APP离线(个推推送通道不可用)
    推送通知,使用个推离线推送通道,离线消息会存储在消息离线库,离线时间内APP在线后下发推送消息。
    透传消息,如果符合厂商推送的厂商手机(配置了手机厂商推送参数并且在对应厂商的手机上),则使用厂商推送通道下发推送消息;否则使用个推的离线推送通道,离线消息会存储在消息离线库,离线时间内APP在线后下发推送消息。

  • iOS平台
    推送通知,不支持。
    透传消息,设置APN参数则通过苹果的APNS通道下发推送消息,没有设置APN参数则使用个推的推送通道下发。

    华为厂商通道

    在华为手机上必须安装“华为移动服务”才能使用华为的厂商推送通道,首先确保手机上已经安装“华为移动服务”应用。
    如果在华为手机应用退出后无法接收到推送消息,可尝试以下操作:
  1. 更新“华为移动服务”到最新版本;
  2. 进入手机“设置”,在[应用和通知]->[应用管理]->[华为移动服务]->[存储]页面选择“删除数据”。
    重新启动应用,退出后再此下发推送消息。

    其它厂商通道

    如果应用在线可以接收到推送消息,离线时使用厂商通道无法接收到推送消息,可参考多厂商推送接入流程及注意事项文档(Android)

uniPush非常严格所以也有点复杂所以得耐心的去了解 点开文章的备注链接可以解决你百分之九十的烦恼(可能是我太差才这么认为的,强者请忽略这则提示!)

java后端小乌龟地址:svn://svnbucket.com/xiaoqingqing/unified-pushapi-java-demo/

目前以上内容只做了小米的测试。