聊天室(二)__ unipush 推送实现详细教程
一、推送作用
推送作用我就不废话了,能做推送的都知道作用,直接上干货。

二、unipush 快速开通
Dcloud 开发者实名认证注册账号,绑定对应的 app 信息。
uni-push产品有2个入口:
通过 HBuilderX(3.5.1及其以上版本)进入
打开 HBuilderX,双击项目中的 “manifest.json” 文件,选择“App 模块配置”,向下找到“Push(消息推送)”,勾选后,点击 “uniPush” 下面的配置链接。如下图所示:
通过开发者中心进入
使用 HBuilder 账号登录 开发者中心 ,登录后 会进入“uniPush”-“Uni Push 2.0(支持全端推送)”-“应用信息”,点击“当前应用”选择要操作的应用。
以上两种方式均可进入uniPush 应用开通界面。如下图所示:

按照国家法律要求,所有提供云服务的公司在用户使用云服务时都需要验证手机号。
用户初次开通 uni-push 时,需要向个推同步手机号信息(DCloud开发者无需再注册个推账户)。
关联服务空间说明:uni-push2.0需要开发者开通uniCloud。不管您的业务服务器是否使用uniCloud,但专业推送服务器在uniCloud上。生成云函数,放置云服务器上。
三、push 模块
Push模块管理推送消息功能,可以实现在线、离线的消息推送,通过 plus.push 可获取推送消息管理对象。
3.1、获取设备信息
客户端标识信息用于业务服务器下发推送消息时提交给推送服务器的数据,用于说明下发推送消息的接收者(客户端)。通常需要客户端在第一次运行时获取并提交到业务服务器绑定。
ClientInfo : 客户端推送标识信息对象
let clientInfo = plus.push.getClientInfo()let cid = cliendInfo.clientId
cid : 客户端推送标识,类似于联系人的电话号码。
3.2、推送事件监听器
void plus.push.addEventListener( event, listener, Boolean );
添加推送消息事件监听器,当指定推送事件发出时触发。
参数:
type: ( String ) 必选 事件类型
支持事件类型:"click"-从系统消息中心点击消息启动应用事件;"receive"-应用从推送服务器接收到推送消息事件。
listener: ( PushReceiveCallback ) 必选 事件监听器回调函数,在接收到推送消息时调用
capture: ( Boolean ) 可选 是否捕获事件,此处可忽略
平台支持:
Android - 2.2+ (支持)
iOS - 4.3+ (支持) :
在客户端在运行时收到推送消息触发receive事件,离线接收到的推送消息全部进入系统消息中心。
plus.push.addEventListener('receive',(message)=>{    
//收到透传消息,执行该事件
})
点击推送事件示例:
plus.push.addEventListener('click',(message)=>{
   // 点击通知消息的时候执行该事件
   // message 推送的所有信息
   let payload = message.payload;//自定义内容获取
   try{
      //自己的业务逻辑 如页面跳转,网络跳转
   }catch(err){    }
})
3.3、自定义推送消息栏
void plus.push.createMessage( content, payload, option );
说明:
在本地直接创建推送消息,并添加到系统消息中心。
参数:
content: ( String ) 必选 ,消息显示的内容,在系统通知中心中显示的文本内容。
payload: ( String | Object ) 可选,消息承载的数据,可根据业务逻辑自定义数据格式。
options: ( MessageOptions ) 可选 创建消息的额外参数,参考MessageOptions。如图标、标题等。
有些童鞋虽然自定义了推送消息,但是发现无论怎么配置参数都不起作用。这是什么原因呢?
3.4、setAutoNotification
setAutoNotification 设置程序是否将消息显示在系统消息中心。
void plus.push.setAutoNotification( notify );
说明:
默认情况下程序在接收到推送消息后将会在系统消息中心显示,通过此方法可关闭默认行为,接收到推送消息后不在系统消息中心显示,通过addEventListener方法的“receive”事件监听处理接收到的消息。在这种模式下可通过createMessage方法创建在系统消息中心显示的消息。
参数:
notify: ( Boolean ) 必选 是否自动提示推送消息
可取值true或false,true表示自动显示推送消息,false则不显示。默认值为true。
3.5、清空所有推送消息
void plus.push.clear();
上面列举了超级常用的几个方法,剩余的大家看官方文档,方法介绍一看就会。
官方文档:https://www.html5plus.org/doc/zh_cn/push.html
四、客户端
4.1、获取设备信息
uni.getPushClientId 获取客户端唯一的推送标识。
注意:这是一个异步的方法,且仅支持uni-push2.0;
OBJECT 参数说明
| 
 参数名  | 
 类型  | 
 必填  | 
 说明  | 
| 
 success  | 
 Function  | 
 是  | 
 接口调用的回调函数,详见返回参数说明  | 
| 
 fail  | 
 Function  | 
 否  | 
 接口调用失败的回调函数  | 
| 
 complete  | 
 Function  | 
 否  | 
 接口调用结束的回调函数(调用成功、失败都会执行)  | 
success 返回参数说明
| 
 参数  | 
 类型  | 
 说明  | 
| 
 cid  | 
 String  | 
 个推客户端推送id,对应uni-id-device表的push_clientid  | 
| 
 errMsg  | 
 String  | 
 错误描述  | 
fail 返回参数说明
| 
 参数  | 
 类型  | 
 说明  | 
| 
 errMsg  | 
 String  | 
 错误描述  | 
常见报错:
getPushClientId:fail register fail: {\"errorCode\":1,\"errorMsg\":\"\"}
请检查:
当前应用是否已开通uni-push2.0 详情参考
客户端对应平台是否已启用uni-push2.0详情参考
HBuilderX3.5.1 App平台vue3项目首次启动调用uni.getPushClientId 存在可能获取不到cid的问题,HBuilderX3.5.2修复了此问题,请升级。
示例代码:
uni.getPushClientId({
    success: (res) => {
      console.log(res.cid);
    },
    fail(err) {
      console.log(err)
    }
  })
4.2、监听推送消息
uni.onPushMessage(callback) 启动监听推送消息事件。
uni.onPushMessage((res) => {
   console.log('监听推送消息', res)
})
//收到消息内容
{
  "type":"click",
    "data":{
      "__UUID__":"androidPushMsgXXXXXX",
        "title":"tmgh",
          "appid":"__UNI__DXXXXX",
            "content":"c",
              "payload":{
                "timeMillis":"1686192721365"
              },
              "force_notification":"true"
    }
}
4.3、创建本地通知栏消息
uni.createPushMessage(OBJECT) 创建本地通知栏消息(HBuilderX 3.5.2起支持)
平台差异说明
| 
 App  | 
 H5  | 
 快应用  | 
 微信小程序  | 
 支付宝小程序  | 
 百度小程序  | 
 字节跳动小程序、飞书小程序  | 
 QQ小程序  | 
 快手小程序  | 
 京东小程序  | 
| 
 √  | 
 x  | 
 x  | 
 x  | 
 x  | 
 x  | 
 x  | 
 x  | 
 x  | 
 x  | 
OBJECT 参数说明
| 
 参数名  | 
 类型  | 
 必填  | 
 说明  | 
| 
 title  | 
 string  | 
 否  | 
 推送消息的标题,在系统消息中心显示的通知消息标题,默认值为程序的名称。  | 
| 
 content  | 
 string  | 
 是  | 
 消息显示的内容,在系统通知中心中显示的文本内容。  | 
| 
 payload  | 
 string、Object  | 
 否  | 
 消息承载的数据,可根据业务逻辑自定义数据格式。  | 
| 
 icon  | 
 string  | 
 否  | 
 推送消息的图标  | 
| 
 sound  | 
 string  | 
 否  | 
 'system' 'none'推送消息的提示音  | 
| 
 cover  | 
 boolean  | 
 否  | 
 是否覆盖上一次提示的消息  | 
| 
 delay  | 
 number  | 
 否  | 
 提示消息延迟显示的时间  | 
| 
 when  | 
 Date  | 
 否  | 
 消息上显示的提示时间  | 
| 
 success  | 
 Function  | 
 否  | 
 接口调用成功的回调函数  | 
| 
 fail  | 
 Function  | 
 否  | 
 接口调用失败的回调函数  | 
| 
 complete  | 
 Function  | 
 否  | 
 接口调用结束的回调函数(调用成功、失败都会执行)  | 
uni.createPushMessage({
title: '自创标题',
content: '自创内容',
payload: {},
success: () => {
console.log("自创推送成功")
},
fail: () => {
console.log("自创推送失败")
}
})
 
4.4、关闭消息监听
uni.offPushMessage(callback) 关闭推送消息监听事件 示例代码:
let callback = (res)=>{
  console.log(res)
}
//启动推送事件监听
uni.onPushMessage(callback);
//关闭推送事件监听
uni.offPushMessage(callback);
五、调试中 bug
前端同学最愁的就是按照官方文档写了,看着没有问题,但是推送就是不好,出现问题找不到解决办法愁死人。
无法触发推送事件,怎么解决?
plus.push.addEventListener("receive") 和 uni.onPushMessage 无法触发,需要透传消息,使用unipush 后台推送透传消息可以触发,但是自己平台的推送始终不执行,好气哦!
网上各种百度,解决办法五花八门的,最后还是在官方文档里找到解决办法,建议大家多看开发文档。
解决办法:
修改云函数中 force_notification 配置参数。
服务端执行推送时,传递参数force_notification:true,客户端就会自动创建“通知栏消息”(此时你监听不到消息内容),当用户点击通知栏消息后,APP才能监听到消息内容。
聊天室(二)__ unipush 推送实现详细教程的更多相关文章
- 前端通信:SSE设计方案(二)--- 服务器推送技术的实践以及一些应用场景的demo(包括在线及时聊天系统以及线上缓存更新,代码热修复案例)
		
距离上一篇博客,这篇文章的发布大概过了整整三个月.我也从饿了么度过了试用期,成为了正式员工.刚进来恰好遇到项目底层改造和迁移,将项目从angular全部迁移到vue上,所以适应这边的节奏和业务的开发任 ...
 - 极光推送iOS SDK教程
		
iOS SDK 调试指南 iOS 调试思维导图 2 确认证书 请到"应用详情页面"确认证书可用性: 3 开发环境测试 在对 JPush iOS 开发环境进行测试前,请确保 3 个 ...
 - Android JPush(极光推送)的使用教程
		
首先进入官网https://www.jpush.cn/,先注册一个账号. 注册号以后,创建应用 1.点击右上角进入个人中心 2.点击创建应用 3.在创建应用界面输入自己项目的应用名和应用的包名,输入后 ...
 - (转)苹果推送通知服务教程 Apple Push Notification Services Tutorial
		
本文译自http://www.raywenderlich.com/.原文由iOS教程团队 Matthijs Hollemans 撰写,经原网站管理员授权本博翻译. 在iOS系统,考虑到手机电池电量,应 ...
 - python2.0_day22_web聊天室二
		
上节内容已经实现了客户端使用长轮询的方式获取消息的功能.但是还没有展现到前端.本节内容将实现1.展现消息到前端窗口.2.客户端之间发送图片和文件.3.文件上传时显示进度条 下面我们来实现上面3个功能. ...
 - app发布证书、真机调试证书、测试证书、推送证书详细过程
		
原文网址: http://www.cnblogs.com/cxbblog/p/4028159.html 一:发布证书 遵旨:哪个开发者的哪台电脑要发布哪个app (这句话可以多读几遍) 通过上边的遵旨 ...
 - ios极光推送快速集成教程
		
内容中包含 base64string 图片造成字符过多,拒绝显示
 - Vue2全家桶之二:vue-router(路由)详细教程,看这个就够了
		
作者:东西里本文转载于:https://www.jianshu.com/p/514c7588e877来源:简书 转载仅供自己日后看方便. 由于Vue在开发时对路由支持的不足,于是官方补充了vue- ...
 - 基于SignalR的消息推送与二维码描登录实现
		
1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...
 - Android高效率编码-第三方SDK详解系列(三)——JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送
		
Android高效率编码-第三方SDK详解系列(三)--JPush推送牵扯出来的江湖恩怨,XMPP实现推送,自定义客户端推送 很久没有更新第三方SDK这个系列了,所以更新一下这几天工作中使用到的推送, ...
 
随机推荐
- [Linux]Windows远程CENTOS7桌面
			
1 背景/问题描述 客户要在CENTOS7上运行我司的基于Java的一款图形化桌面软件,然后在Windows上远程该机器的桌面软件进行操作使用.但问题是,客户的CENTOS7服务器没有图形化桌面环境, ...
 - [Java]排序算法>选择排序>【简单选择排序】(O(n*n)/不稳定/)
			
1 选择排序 1.1 算法思想 每一趟从待排序的记录中选出关键字最小的记录,按顺序放在已排序的记录序列的最后(or最前面),直到全部排完位置. 1.2 算法特征 属于[选择排序] 简单选择排序 堆排序 ...
 - JQuery日期选择控件-兼容手机端
			
在项目中经常使用到日期时间控件. 用的时候总是临时去找,现在记录下,以备下次使用. 官网http://www.bootcss.com/p/bootstrap-datetimepicker/ 需要引用一 ...
 - 归并排序c++(逆序对)
			
归并排序c++(逆序对) 目录 题目链接 思路 算法 分离数组 合并 代码 目录 归并排序(Merge Sort)是建立在归并操作上的一种既有效又稳定的排序算法,该算法是采用分治法(Divide an ...
 - CSS6大种选择器
			
一.常用的css基本选择器(4种) 1.标签选择器 结构: 标签名{css属性名:属性值}作用:通过标签名,找到页面中所有的这类标签,设置样式 注意:1.标签选择器选择的是一类标签,而不是单独的一个2 ...
 - 学习MASA第一天:MASA Blazor TEST项目创建
			
个人博客地址: https://note.raokun.top 拥抱ChatGPT,国内访问网站:https://www.playchat.top 学习MASA第一天:MASA Blazor TEST ...
 - awk判断整除(包含小数和负数)
			
awk判断整除常用的方法是用内置的int或者求余数的算符% 被整数整除 输出0-100之间能被9整除的整数 使用 num/9==int(num/9) 的判断方法可以很好实现. awk 'BEGIN{ ...
 - 【解决方法】查找比较组时报错:An object (User, Group, or Built-in security principal) with the following nameca..
			
目录-快速跳转 问题描述 原因分析: 解决方案: 附言: 问题描述 操作环境与场景: 在 VM 内 Windows 2019 中,在组策略管理中,对GPO进行组查找时报错: An object (Us ...
 - 如何利用Requestly提升前端开发与测试的效率,让你事半功倍?
			
痛点 前端测试 在进行前端页面开发或者测试的时候,我们会遇到这一类场景: 在开发阶段,前端想通过调用真实的接口返回响应 在开发或者生产阶段需要验证前端页面的一些 异常场景 或者 临界值 时 在测试阶段 ...
 - Python定时任务框架apscheduler的简单使用
			
apscheduler的简单使用 APScheduler有四大组件: 1.触发器 triggers : 触发器包含调度逻辑.每个作业都有自己的触发器,用于确定下一个任务何时运行.除了初始配置之外,触发 ...