未验证 提交 9532aacf 编写于 作者: DCloud_Heavensoft's avatar DCloud_Heavensoft 提交者: Gitee

update docs/uniCloud/uni-push.md.

上级 604cae12
>本文为uniPush2.0的介绍,如果旧项目需要使用老版本的uniPush1.0详情:[https://ask.dcloud.net.cn/article/35622](https://ask.dcloud.net.cn/article/35622)
>本文为uni-push2.0的介绍,如果旧项目需要使用老版本的uniPush1.0详情:[https://ask.dcloud.net.cn/article/35622](https://ask.dcloud.net.cn/article/35622)
# 简介
## 概述
`uniPush`是DCloud联合个推公司推出的、全端的、云端一体的统一推送服务。
`uni-push`是DCloud联合个推公司推出的、全端的、云端一体的统一推送服务。
1. 在客户端平台方面,不但支持App端、小程序端、web端,App端还内建了苹果、华为、小米、OPPO、VIVO、魅族、谷歌FCM等手机厂商的系统推送和个推第三方推送。(uniPush 2.0起支持小程序端、web端以及App端的在线推送)
2. 在服务端,uniPush2.0起支持uniCloud云端一体,无需再编写复杂的服务端调用代码发送push。而uniPush1.0支持使用传统服务器开发语言比如php来发送服务端消息,流程比uniPush2.0繁琐。
3. uniPush还自带一个web控制台。不写代码也可以在web页面发推送。uniPush1.0的web控制台在[dev.dcloud.net.cn](https://dev.dcloud.net.cn)。uniPush2.0的web控制台是开源的,内置在uni-admin插件中
1. 客户端方面,`uni-push`支持App、web、小程序。App端还内建了苹果、华为、小米、OPPO、VIVO、魅族、谷歌FCM等手机厂商的系统推送和个推第三方推送。(uni-push 1.0不支持小程序端、web端以及App端的在线推送)
2. 服务端方面,uni-push2.0起支持uniCloud云端一体,无需再编写复杂代码轻松完成push。而uni-push1.0支持使用传统服务器开发语言如php,未和客户端有效协同,流程比uni-push2.0繁琐。
3. uni-push还自带一个web控制台。不写代码也可以在web页面发推送。uni-push1.0的web控制台在[dev.dcloud.net.cn](https://dev.dcloud.net.cn)。uni-push2.0的web控制台是开源的,属于uni-admin插件
## 什么是uniPush?
push是一种支持服务端主动向客户端发送即时消息,由服务端、手机系统推送服务模块、客户端,三者之间建立长连接的通讯架构。即使应用不联网(用户关闭应用,或者手机厂商为了省电或释放内存,会终止App后台联网)消息也可以通过不会离线的手机厂商通道,下发到手机系统推送服务模块;以系统消息的方式通知用户,用户点击通知栏消息即可重新唤醒APP。实现更高的消息的送达率,以及应用拉活的目的。
<img width="100%" src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/1b3b17d1-d6fb-4d26-96d4-c0dbc4300aad.png"/></br>
如图所示:应用联网时,客户端直接收到push在线消息;应用不联网时push消息将以通知栏消息的方式展示,用户点击通知栏消息后,客户端才能收到离线消息。
## 什么是push?
push,指服务器主动向客户端发送消息。无需客户端持续轮询服务器,那样即需要客户端持续在线、耗电,又加重服务器负载。
手机的通知栏、小程序的订阅消息、web浏览器的webnotification都是一种push。
当客户端在线时,push通过socket协议实现。当客户端离线时,服务器找不到客户端,开发者无法自己实现推送,只能依托手机操作系统、浏览器以及小程序底层提供的离线消息推送,调用指定的API或SDK来发送消息。
然而消息下发到手机系统推送服务模块,是通过集成的手机厂商sdk实现。而每个厂商规范不同,比较流行的厂商有:苹果、华为、小米、vivo、oppo、魅族,这6大手机厂家。那程序员得写6种代码,分别去给这6家标准不同的厂家推送消息?这么多平台,工作量会非常巨大,管理维护也很麻烦。显然这样太繁琐了
所以一个push系统由3部分组成:业务服务器 + 专业push服务器 + 客户端
uniPush因此而生,它内部封装了繁琐的逻辑。开发者只需要通过`uniPush`,系统会自动在不同手机上选择最可靠的推送通道发送push消息,保障送达率
业务服务器向专业push服务器发送指令,告知需要向哪些客户端发送什么样的消息;然后专业push服务器检测客户端是否在线,在线则走socket通道下发消息,客户端代码可以直接响应处理,离线则通过平台专用服务发送通知栏消息,用户在平台提供的通知栏中看到push消息,点击后呼起客户端应用,客户端代码才能接收响应
uniPush即降低了开发成本、又提高了push送达率,并且免费,是当前推送的最佳解决方案。
在App平台,push很常见,但问题也最多。手机厂商众多,他们各自都有不同的推送服务,包括Apple、google(仅能在海外使用)、华为、小米、oppo、vivo、魅族,以及还有一些没有专业推送服务的中小手机品牌。他们对App后台耗电都有查杀机制,除了微信等大应用,普通应用很难常驻后台。
如果开发者把上述每个平台的客户端和服务器的SDK都对接一遍,还自己处理没有push服务的中小品牌手机,那过于困难了。所以业内有专业的推送服务厂商,如个推(属于上市公司每日互动),而DCloud与个推深度合作,为uni-app的开发者提供了比传统方案便利甚多的统一推送方案`uni-push`
如下图所示:应用启动并联网时,客户端直接收到push在线消息;应用不联网时push消息将以通知栏消息的方式展示,用户点击通知栏消息后,客户端才能收到离线消息。
<img width="100%" src="https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/1b3b17d1-d6fb-4d26-96d4-c0dbc4300aad.png"/></br>
除了提供App推送,`uni-push`还面向web和小程序提供了在线push,它其实是一个免费的socket服务器。尤其对于uniCloud用户来说,补齐了众多重要场景。
`uni-push`即降低了开发成本,又提高了push送达率,还支持全平台,并且免费,是当前推送的最佳解决方案。
# 应用场景
- 系统消息通知 </br>
......@@ -31,24 +42,27 @@ uniPush即降低了开发成本、又提高了push送达率,并且免费,是
- 活动营销 </br>
在日常营销推广、促销活动等场景下(如双11、618大促、会员促销、游戏活动、产品推送活动等),APP可对目标用户进行定向通知栏消息+应用内消息推送,吸引用户参与活动,提升转化。
还有聊天功能、棋牌游戏等,需要客户端被动接收消息的需求的功能都可以用uniPush实现。
还有聊天功能、棋牌游戏等,需要客户端被动接收消息的需求的功能都可以用uni-push实现。
**局限性说明:**uniPush客户端接收消息的通讯协议属于websocket;服务端调用消息下发用的是http通讯协议。需要超低延迟的应用场景,如:远程画板、像王者荣耀那样的游戏就不适用。
# 常见问题
有了uniPush,开发者不应该再使用其他push方案了。但我们发现很多开发者有误解,导致还在错误使用其他推送。
有了uni-push,开发者不应该再使用其他push方案了。但我们发现很多开发者有误解,导致还在错误使用其他推送。
- 常见误解1:“uni-push的专业性,和专业的个推、极光等服务可相比吗?”
- 常见误解1:“uniPush的专业性,和专业的个推、极光等服务可相比吗?”
答:uni-push是由个推将其本来收费的(vip套餐) push产品,免费提供给了DCloud的开发者。它与个推vip push的只有2个区别:1、免费;2、账户使用的是DCloud开发者账户,而无需再重新注册个推账户。个推是A股上市公司,专业性在推送领域领先。
答:uniPush是由个推将其本来收费的(vip套餐) push产品,免费提供给了DCloud的开发者。它与个推vip push的只有2个区别:1、免费;2、账户使用的是DCloud开发者账户,而无需再重新注册个推账户。个推是A股上市公司,专业性在推送领域领先。
- 常见误解2:“uni-push好麻烦,我就喜欢个推、极光这种简单sdk,不想去各个rom厂商去申请一圈”
- 常见误解2:“uniPush好麻烦,我就喜欢个推、极光这种简单sdk,不想去各个rom厂商去申请一圈”
答:uni-push不建立在申请手机厂商授权的基础上,如果你不申请那些,使用起来和用普通的push是一样的。但是要特别注意,推送行业的现状就是:不集成rom厂商的推送,就无法在App离线时发送push。按照普通push模式使用,后果就是在华为、小米、OPPO、VIVO、魅族上发不了离线消息。
答:uniPush不建立在申请手机厂商授权的基础上,如果你不申请那些,使用起来和用普通的push是一样的。但是要特别注意,推送行业的现状就是:不集成rom厂商的推送,就无法在App离线时发送push。。按照普通push模式使用,后果就是在华为、小米、OPPO、VIVO、魅族上发不了离线消息。
- 常见误解3:“uni-push的送达率高吗?是否可以付费来提升送达率,个推是有付费提升送达率的方法的”
- 常见误解3:“uniPush的送达率高吗?是否可以付费来提升送达率,个推是有付费提升送达率的方法的”
答:前文已经说了。个推的付费提升送达率的产品就是vip push,而uni-push就是个推的vip Push。DCloud通过谈判免费给DCloud的开发者使用了。
答:前文已经说了。个推的付费提升送达率的产品就是vip push,而uniPush就是个推的vip Push。DCloud通过谈判免费给DCloud的开发者使用了。
- uni-push可以完整替代socket吗?
答:能部分替代。uni-push客户端接收消息的通讯协议属于websocket;但服务端调用消息下发用的是http通讯协议,会有1-2秒的延时。需要超低延迟的应用场景,如多人交互远程画板不合适。但对于普通的im消息、聊天、通知都没有问题。
# 开通和配置指南
## 产品入口
......@@ -68,25 +82,30 @@ uniPush即降低了开发成本、又提高了push送达率,并且免费,是
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/637abb41-4702-4b05-928b-8aac6de7149f.jpg)
## 第一步:开通 uniPush
### 实名认证
用户首次使用 uniPush 功能时,需要向个推同步身份信息。
- 已通过实名认证的用户,会直接将实名认证信息同步给个推。如下图所示:
**疑问:个推需要实名认证?不是吧,他只需要手机号,不需要真实姓名更不需要身份证**
### 手机号验证
按照国家法律要求,所有提供云服务的公司在用户使用云服务时都需要验证手机号。
用户初次开通 uni-push 时,需要向个推同步手机号信息。
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/a0e85961-e5e7-4e38-a6d0-aea6ab27766e.jpg)
- 未提交实名认证信息的用户,需要在页面中输入相关信息后提交,如下图所示:
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/33a935da-7392-4f5b-9f90-8f7d7adae061.jpg)
### 填写应用信息
应用开通 uniPush 功能时,需要提交应用相关信息,如下图所示:
应用开通 uni-push 功能时,需要提交应用相关信息,如下图所示:
![](https://vkceyugu.cdn.bspapp.com/VKCEYUGU-f184e7c3-1912-41b2-b81f-435d1b37c7b4/381bd60a-a38b-412a-8bfb-6cafb9788a6a.jpg)
关联服务空间说明:UniPush2.0为了开发者更方便地,触发消息推送。推出 `uni-cloud-push`(uniCloud扩展库)。通过扩展库在uniCloud云函数中,直接调用相关API,无需额外的服务端配置,即可直接调用“关联到当前服务空间的应用”的uniPush服务。
关联服务空间说明:
uni-push2.0需要开发者开通uniCloud。不管您的业务服务器是否使用uniCloud,但专业推送服务器在uniCloud上。
如果您的后台业务使用uniCloud开发,那理解比较简单。
如果您的后台业务没有使用uniCloud,那么也需要在uni-app项目中创建uniCloud环境,在HBuilderX中和dev的uni-push配置中均绑定相同服务空间,之前的业务仍然由客户端连接原有传统服务器,push相关功能则通过uniCloud服务空间实现。如果您之前使用过三方推送服务的话,可以理解为您的服务器不再调用个推服务器,而是改为调用uniCloud服务空间。
在uniCloud的云函数中,加载扩展库 `uni-cloud-push`,直接调用相关API,无需额外的服务端配置。而传统服务器开发者需要把这个云函数URL后变成http接口,再由原来的php或java代码调用这个http接口。
注意:`Android包名、签名(SHA1指纹)``iOS Bundle ID`,必须确保与客户端manifest.json配置的证书相关信息一致,否则可能会导致无法正常打包或收到推送消息。
参考资料:[关于Android证书](https://ask.dcloud.net.cn/article/35985#server)[iOS证书申请](https://ask.dcloud.net.cn/article/152)
开通完成后你也可以在这里修改以上信息
开通完成后,后续仍可以在这里修改以上信息。
## 第二步:配置
- iOS 平台还需要上传专用的推送证书
......@@ -133,6 +152,9 @@ uni.onPushMessage((res)=>{
更多客户端API详情[文档](#客户端API文档)
# 开发文档
`uni-push`有服务器API和客户端API。
## 服务端开发 - uniPush扩展库@uni-cloud-push
为云函数启用uniPush扩展库,在云函数右键-管理公共模块或扩展库依赖。如图所示:勾选uni-cloud-push 统一推送服务,点击确定即可。
</br>
......@@ -169,7 +191,7 @@ exports.main = async (event, context) => {
"data": {
"type": "single",
"body": "您好!",
"from_uid": "79550af260d9db5f22ae00ff6f397763",
"from_uid": "79550af260d9db5f22ae00ff6f397763", // 这里是uni-id的用户id
"to_uid": "cbddf0af60d46da61252b29f4e4e6339",
"time": Date.now()
}
......@@ -180,6 +202,7 @@ exports.main = async (event, context) => {
### 消息推送
向设定的(单个、群组、全体)用户,即时或定时推送消息。支持设置:通知栏消息内容、控制响铃,震动,浮动,闪灯;手机桌面应用右上角的角标等。
#### 接口形式
```js
await uniPush.sendMessage(OBJECT)
......@@ -1689,20 +1712,21 @@ uni.offPushMessage(eventName);
- 如果uni.offPushMessage没有传入参数,则移除App级别的所有事件监听器;
- 如果只提供了事件名(eventName),则移除该事件名对应的所有监听器;
## 2.0相比1.0优势
1. APP、微信小程序、H5全端支持消息推送
## uni-push2.0相比1.0的优势
1. App、微信小程序、H5全端支持消息推送。
2. 统一行为:默认应用离线消息走“通知栏消息”,应用在线走“透传消息”。
* 如果需要应用在线时,消息展示在通知栏用`plus.push.createMessage`,创建本地消息实现
3. 新增uniPush服务端sdk(uniCloud扩展库)
3. 新增uni-push服务端API(uniCloud扩展库)
消息推送属于敏感操作,只能直接或间接由服务端触发。
传统的三方push服务,需要开发者在服务端配置密钥或证书,根据服务器端文档签名获取token,再向相关URL接口发起网络请求......
而UniPush2.0,开发者无需关心证书、签名、服务器端文档,使用简单,极简的代码,云函数通过 `uni-cloud-push`(uniCloud 扩展库)的API即可直接执行uniPush所有操作,详情[文档](#uni-cloud-push)
关于扩展库可以理解成是一个不可见的,框架集成的公共模块
4. 新增uniPush客户端api
扩展库是云函数sdk的一部分,但由于部分功能并不是所有开发者都需要,为减少体积允许通过扩展库的方式来增删
4. 新增uni-push客户端API,不再使用plus API
* uni.onPushMessage 绑定方法监听消息
* uni.offPushMessage 解绑方法监听消息
* uni.getPushCid 获取用户设备推送标识
5. uni-admin端新增push管理面板
5. 支持uni-id,可直接通过uni-id来指定用户发送消息
6. uni-admin端新增push管理面板
## 问题记录:
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册