聊天室(二)__ unipush 推送如何实现?

news2024/12/27 13:13:05

你想搞个自己的聊天室 app 吗?好多前端同学会好奇聊天室app的推送是怎么搞的?今天就以前端同学使用最多的 uniapp 开发的 app 推送为例,悄悄告诉大家推送是如何实现的!

项目技术栈:

  • 项目基于 vue3 的 uniapp

  • 推送基于 uniPush 2.0 + websocket

  • 音视频:TUICallKit

建议点赞收藏,排查 bug 更方便。

uni-push 在 web 和小程序端就是个 websocket;在 app 端就不能使用 WS 了,今天主要介绍 app 端如何使用 unipush 实现推送。

一、推送作用

推送作用我就不废话了,能做推送的都知道作用,直接上干货。

二、unipush 快速开通

Dcloud 开发者实名认证注册账号,绑定对应的 app 信息。

uni-push产品有2个入口:

  1. 通过 HBuilderX(3.5.1及其以上版本)进入

打开 HBuilderX,双击项目中的 “manifest.json” 文件,选择“App 模块配置”,向下找到“Push(消息推送)”,勾选后,点击 “uniPush” 下面的配置链接。如下图所示:

  1. 通过开发者中心进入

使用 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\":\"\"}
请检查:

  1. 当前应用是否已开通uni-push2.0 详情参考

  2. 客户端对应平台是否已启用uni-push2.0详情参考

  3. 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

推送消息的标题,在系统消息中心显示的通知消息标题,默认值为程序的名称。
Android - ALL (支持)
iOS - 5.0+ (不支持): 不支持设置消息的标题,固定为程序的名称。

content

string

消息显示的内容,在系统通知中心中显示的文本内容。

payload

string、Object

消息承载的数据,可根据业务逻辑自定义数据格式。

icon

string

推送消息的图标
本地图片地址,相对路径 - 相对于当前页面的host位置,如"a.jpg",注意当前页面为网络地址则不支持;绝对路径 - 系统绝对路径,如Android平台"/sdcard/logo.png",此类路径通常通过其它5+ API获取的;扩展相对路径URL(RelativeURL) - 以"_"开头的相对路径,如"_www/a.jpg";本地路径URL - 以“file://”开头,后面跟随系统绝对路径。
Android - 2.3+ (支持)
iOS - ALL (不支持): 不支持自定义图片,固定使用应用图标。

sound

string

'system' 'none'推送消息的提示音
显示消息时的播放的提示音,可取值:“system”-表示使用系统通知提示音;“none”-表示不使用提示音;默认值为“system”。
Android - 2.3+ (支持)
iOS - 5.1+ (支持): 当程序在前台运行时,提示音不生效。注:通常应该设置延迟时间,当程序切换到后台才创建本地推送消息时生效。

cover

boolean

是否覆盖上一次提示的消息
可取值true或false,true为覆盖,false不覆盖,默认为permission中设置的cover值
Android - ALL (支持)
iOS - 5.0+ (不支持): 不支持覆盖消息,只能创建新的消息。

delay

number

提示消息延迟显示的时间
当设备接收到推送消息后,可不立即显示,而是延迟一段时间显示,延迟时间单位为s,默认为0s,立即显示。

when

Date

消息上显示的提示时间
默认为当前时间,如果延迟显示则使用延时后显示消息的时间。
Android - ALL (支持)
iOS - 5.0+ (不支持): 不支持设定消息的显示时间,由系统自动管理消息的创建时间。

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才能监听到消息内容。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/715422.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

从小白到大神之路之学习运维第51天---第三阶段----redis高可用集群数据库的安装部署

第三阶段基础 时 间:2023年7月3日 参加人:全班人员 内 容: 生产级redis cluster部署 目录 一、环境配置:【两台服务器】 二、redis多实例配置: 三、构建redis cluster集群 四、生产集群部署 五、集群故障切…

Makefile:1: *** 遗漏分隔符 (null)。 停止。解决方法

在使用ubuntu时,make命令后,直接弹出了个错误。。。。。。 Makefile: n n表示出问题的行数,仔细检查代码的内容,主要问题可能是该有的空格是否添加或者使用$引入的参数是否存在等 我的问题是这个 ifneq 后面的空格没有加 耐心查…

论文浅尝 | 大语言模型综述

笔记整理:刘康为、方润楠,浙江大学硕士,研究方向为自然语言处理 链接:https://arxiv.org/abs/2303.18223 一、介绍 在当前机遇和挑战的背景下,对大语言模型的研究和开发需要更多的关注。为了让读者对大语言模型有一个基…

C++实现打包工具代码框架(附源码)

C++常用功能源码系列 文章目录 C++常用功能源码系列前言一、打包工具二、packtool框架前言 本文是C/C++常用功能代码封装专栏的导航贴。部分来源于实战项目中的部分功能提炼,希望能够达到你在自己的项目中拿来就用的效果,这样更好的服务于工作实践。 专栏介绍:专栏讲本人近…

windows10安装wsl2,centos内核

windows10安装wsl2,centos内核 检查系统环境 必须运行 Windows 10 版本 2004 及更高版本(内部版本 19041 及更高版本)或 Windows 11 才能使用以下命令。 一、开启WSL2特性 【控制面板】>>【程序】>>【程序和功能】>>【启…

apple pencil平替笔哪个好用?适用于绘画的电容笔推荐

由于ipad的版本一直在升级,其功能也在增加,其功能已经达到了与手提电脑相媲美的程度。而且随着科技的发展,ipad也不仅仅是一个娱乐的工具,更是一个可以用来学习、画画、工作的强大工具。想要提高生产力,那么电容笔就是…

mysql 8.0版本更换用户密码

1、首先 cmd 进入命令行 mysql -uroot -p 2、查询版本号 select version(); 3、看一下数据库 show databases; 4、使用mysql即可 5、进行查询 user、host select user,host from user; 6、修改root的密码 alter user root% identified by 1234; 7、刷新权限 flush privi…

Kubernetes 服务发布方式(蓝绿发布、灰度发布和滚动发布)

目录 一、三种常用的项目发布方式1.1 蓝绿发布1.2 灰度发布(金丝雀发布)1.3 滚动发布 二、金丝雀的方式升级发布实验三、总结 一、三种常用的项目发布方式 应用程序升级面临最大挑战是新旧业务切换,将软件从测试的最后阶段带到生产环境&…

Windows服务器——部署WSUS服务与综合测试

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​ 目录 前言 本章结构: 一.WSUS概述 1.WSUS概述 2.WSUS的特点 3.WSUS常见部署…

fastboot连接@设备识别问题

文章目录 fastboot模式(MIUI)界面变换fastboot链接电脑设备识别问题连接部件的兼容性 fastboot模式(MIUI)界面变换 老设备新设备 fastboot链接电脑设备识别问题 通常一根普通的数据线和PC就能够识别处于fastboot(bootloader)模式下的android设备 扫描已连接的bootloader模式…

软件设计模式与体系结构-设计模式-结构型软件设计模式-外观模式

目录 三、外观模式概念外观模式分析实例一:实例二:图形绘制外观模式讨论一个系统有多个外观类?不要试图通过外观类为子系统增加新行为外观模式与迪米特法则抽象外观类的引入 (因为违背开闭原则)使用外观模式的目的适配…

机器人学科建设沙盘套件!mechArm机械臂智慧农业3D分拣套装详解

作为最热门的技术领域,机器人技术正在彻底改变产业,并推动全球的创新。为了满足这个快速发展的领域对技术人才日益增长的需求,高校开发了一个开创性的机器人教育解决方案。这个创新的解决方案将自动化水果采摘机的模拟与水果分拣和运送的自动…

《AutoSar实战》读写DID之二:工具链配置

文章目录 前言一、配置DID存储功能1. 新建Ram memory2. 新建NvM Block Needs3. 检查 二、关联client/server接口1. 关联2. 生成代码并验证 总结 前言 本系列主要基于DaVinCi工具链来展开具体DID读写的配置以及最终实现。 DID读写功能实现流程包括如下几点: 1&#…

【ARM】-SWI 和未定义指令异常中断处理程序的返回

文章目录 处理流程示例代码实现SWI未定义指令 附录源码 处理流程 SWI 和未定义指令异常中断是由当前执行的指令自身产生的,当 SWI 和未定义指令异常中断产生时,程序计数器的 PC 的值还未更新,它指向当前指令后面第 2 条指令(对于…

《安全软件开发框架(SSDF) 1.1:降低软件漏洞风险的建议》解读(一)

安全软件开发框架SSDF是由美国国家标准与技术研究院发布的关于安全软件开发的一组实践,帮助开发组织减少发布的软件中的漏洞数量,减少利用未检测到或未解决的漏洞的潜在影响,从根本上解决漏洞防止再次发生。本文根据《Secure Software Develo…

异步的终极方案Async-Await 和Generator

Async-Await 基本介绍 之前解决异步我们一直使用Promise的.then()方案,虽然解决了回调地狱的情况,但使用链式写法也并不特别优雅。比如看下面的代码。 所以就出现了一种号称异步的终极方案Async、Await。我们看他的定义 async 函数是使用async关键字…

手枪钻改台钻(3D打印)

所需工具: 1、3D模型打印; 2、手枪钻; 首先在SOLIDWORKS里面新建一个电钻夹的模型: 第二步导出“STL”文件: 第三步将"STL"文件导入到3D切片工具 Cura_15.02.1 里面进行切片: 第四步导出“g-…

显示器方案

概述: USB HUB连接Host与Device之间,可以扩展出多个USB设备接口,使得一个Host能同时与多个Device进行数据连接。 注:普遍而言,一颗HUB扩展芯片可扩展4个USB下行接口,市面上1 to 7的HUB,一般使用…

【Python实训项目】pygame制作【飞机大战】

目录 一、课程设计目的及应用背景 二、课程设计内容 三、课程设计代码实现 1. 创建子弹类 2.创建玩家飞机类 3. 创建敌机类 4.检查键盘输入 5.创建主模块 四、测试结果 五、思考、心得和改进以及不明白的问题 附录 所有代码如下: 一、课程设计目的及应用背景 根据课…

网联V2X视频事件检测相机使用说明书

1 产品概览 网联 V2X视频事件检测相机 视频事件检测相机 ,内置 1/1.8″逐行扫描 800万像素传感器;视 万像素传感器;视 频编码协议支持 H.265、H.264、MJPEG;具有 1个 10M/100M/1000M自适应以 太网 RJ45接口、 1路 RS485接口&#…