#文档参考

  • 通常推送消息分以下两种类型:
    • 通知栏消息(推送通知)
      UniPush推送服务定义好的推送样式、后续动作的推送方式,客户端接收到后显示在系统通知栏,用户点击通知栏消息启动APP(激活到前台)。
    • 透传消息
      即自定义消息,UniPush推送服务只负责消息传递,不做任何处理,客户端在接收到透传消息后需要自己去处理消息的展示方式或后续动作。
      UniPush推送服务对透传消息的数据符合以下格式时做了特殊处理,将透传消息显示到系统通知栏
      1. {"title": "xxx","content": "xxx","payload": "xxx"}

#开通uniapp推送服务

如何开通推送服务,根据官方提供的文档操作即可。
https://ask.dcloud.net.cn/article/35716

#下发推送消息

p1.jpg

#客户端处理推送消息

参考5+APP文档 http://www.html5plus.org/doc/zh_cn/push.html
#获取服务供应商
https://uniapp.dcloud.io/api/plugins/provider?id=getprovider

  1. //获取服务供应商
  2. uni.getProvider({
  3. service: "push",
  4. success: (e) => {
  5. console.log("success", e);
  6. },
  7. fail: (e) => {
  8. console.log("获取推送通道失败", e);
  9. }
  10. });
  11. //开启push接收
  12. uni.subscribePush({
  13. provider: '',//unipush,igexin,mipush
  14. success: (e) => {
  15. uni.showToast({
  16. title: "已开启push接收"
  17. })
  18. }
  19. })
  20. //关闭push接收
  21. uni.unsubscribePush({
  22. provider: '',//unipush,igexin,mipush
  23. success: (e) => {
  24. uni.showToast({
  25. title: "已关闭push接收"
  26. })
  27. }
  28. })
  29. //开始监听遗传数据
  30. uni.onPush({
  31. provider: '',//unipush,igexin,mipush
  32. success: (e) => {
  33. uni.showToast({
  34. title: "开始监听透传数据"
  35. })
  36. },
  37. callback: (e) => {
  38. uni.showToast({
  39. title: "接收到透传数据"
  40. });
  41. }
  42. })
  43. //移除监听遗传数据
  44. uni.offPush({
  45. provider: '',//unipush,igexin,mipush
  46. success: (e) => {
  47. console.log("移除监听透传数据");
  48. uni.showToast({
  49. title: "移除监听透传数据"
  50. })
  51. }
  52. })

#5+app方法解析

添加事件监听器

  1. - event:事件类型
  2. - click:从系统消息中心点击消息启动应用事件,用于离线监听
  3. - receive:应用从推送服务器接收到推送消息事件,用于在线监听
  4. - listener:回调函数
  5. - Boolean:是否捕捉事件
  1. plus.push.addEventListener( event, listener, Boolean );

创建本地消息

  1. - content:消息显示的内容
  2. - payload:消息承载的数据
  3. - option:创建消息的额外参数
  4. - [http://www.html5plus.org/doc/zh_cn/push.html#plus.push.MessageOptions](http://www.html5plus.org/doc/zh_cn/push.html#plus.push.MessageOptions)
  1. plus.push.createMessage( content, payload, option );

清空系统中心所有的推送消息

  1. plus.push.clear();

获取所有推送消息

  1. plus.push.getAllMessage();

删除推送消息

  1. - 删除系统消息中心指定的推送消息,可通过getAllMessage方法获取所有的消息后进行操作。
  2. - message:删除的消息对象
  3. - [http://www.html5plus.org/doc/zh_cn/push.html#plus.push.PushMessage](http://www.html5plus.org/doc/zh_cn/push.html#plus.push.PushMessage)
  1. plus.push.getAllMessage();
  2. plus.push.remove(message);

#客户端最终处理方案

  • 注意:自 HBuilderX 1.7.3 起,HBuilder 基座的推送供应商为 UniPush 服务。
  1. onLaunch: function (){
  2. uni.getProvider({
  3. service: "push",
  4. success: (e) => {
  5. console.log("success", e);
  6. uni.subscribePush({
  7. provider: 'unipush',//unipush,igexin,mipush
  8. success: (e) => {
  9. uni.showToast({
  10. title: "已开启push接收"
  11. })
  12. /* 使用:H5+的方式监听,实现推送*/
  13. plus.push.addEventListener("click", function(msg) {
  14. plus.ui.alert("click:"+JSON.stringify(msg));
  15. //逻辑处理...
  16. }, false);
  17. /* 监听在线消息事件 */
  18. plus.push.addEventListener("receive", function(msg) {
  19. /*{
  20. "title": "测试标题",
  21. "content": "测试内容",
  22. "payload": "{
  23. content: 'test'
  24. }"
  25. }*/
  26. if(plus.os.name == 'ios') {
  27. plus.push.createMessage( msg.payload.content, JSON.stringify(msg.payload) ,{
  28. appid: '_UNI_B73181C',
  29. cover: true,
  30. icon: '/static/images/hb.png',
  31. sound: 'system',
  32. title: '标题',
  33. subtitle: '副标题'
  34. });
  35. } else if (plus.os.name == 'android') {
  36. //逻辑处理...
  37. } else {
  38. return;
  39. }
  40. }, false);
  41. }
  42. })
  43. },
  44. fail: (e) => {
  45. console.log("获取推送通道失败", e);
  46. }
  47. });
  48. }