UniPush使用指南
从HBuilderX 1.7.2起,uni-app支持UniPush。
从HBuilderX 2.0.3 alpha起,5+App支持UniPush。
注意
- uniPush的客户端jsapi不是uni.push,而是plus.push,详见https://www.html5plus.org/doc/zh_cn/push.html。
- uniPush推送功能需提交云端打包后才能生效,如需真机运行生效请使用自定义基座
概述
UniPush是DCloud推出的集成型统一推送服务,内建了苹果、华为、小米、OPPO、魅族等手机厂商的系统级推送和个推等第三方推送。
国内Android的Push是一个混乱的世界,因为google的push服务器被墙,所以一些国内的安卓手机厂商各自做了自己的推送,比如华为小米魅族等,但还有很多国产手机厂商没有提供官方推送方案。三方独立公司如个推,则提供了独立的push方案。
在没有unipush以前,如果只使用三方push,会在很多国产手机上因为节电设置而无法保活push进程,导致无法推送。比如小米手机对三方推送封杀的比较厉害,App退出后很难成功发送push。
而如果每个安卓手机的官方push都集成一遍,这么多平台,工作量会非常巨大,管理维护也很麻烦。
uniPush解决了这个难题,开发者只需要开发一次。系统会自动在不同手机上选择最可靠的推送通道发送push消息,保障送达率。
UniPush即降低了开发成本、又提高了push送达率,并且免费,是当前推送的最佳解决方案。有个unipush,开发者不应该再使用其他push方案了,其他方案都达不到unipush的效果。
UniPush推送服务由“个推”专为DCloud订制提供技术支持,因此在服务端的集成与“个推·消息推送”完全一致。对于之前使用个推的开发者,可以平滑的迁移到uniPush方案上。
注意:UniPush推送服务必须重新向DCloud申请开通账户。
整体架构
推送消息类型
通常推送消息分以下两种类型:
通知栏消息(推送通知)
UniPush推送服务定义好的推送样式、后续动作的推送方式,客户端接收到后显示在系统通知栏,用户点击通知栏消息启动APP(激活到前台)。透传消息
即自定义消息,UniPush推送服务只负责消息传递,不做任何处理,客户端在接收到透传消息后需要自己去处理消息的展示方式或后续动作。
UniPush推送服务对透传消息的数据符合以下格式时做了特殊处理,将透传消息显示到系统通知栏复制代码
{"title": "xxx","content": "xxx","payload": "xxx"}
第一步:开通UniPush推送服务
UniPush仅支持uni-app类型项目,其它类型项目暂不支持
点此查看如何开通UniPush推送服务
注意:开通UniPush后,需在后台配置“厂商推送设置”,否则可能在服务端下发推送消息界面中不会显示第三方厂商推送内容(如intent)
获取厂商推送设置信息请参考:厂商推送应用创建配置流程
第二步:服务端下发推送消息
使用厂商推送下发推送消息必须设置intent,并且intent须符合格式,否则用户点击推送消息会导致无法启动APP。intent数据格式如下:
复制代码intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end
其中io.dcloud.HBuilder为APP包名,需要替换为自己APP的包名;
S.title=的值为推送消息标题,对应5+ API中PushMessage对象的title属性值;
S.content=的值为推送消息内容,对应5+ API中PushMessage对象的content属性值;
S.payload=的值为推送消息的数据,对应5+ API中PushMessage对象的payload属性值;
launchFlags=0x14000000字段,解决接收多条通知后点击可能无法触发click事件的问题
通过开发者中心后台下发推送消息
登录DCloud开发者中心,在“我创建的应用”列表中选择应用,左侧选择“Uni Push”,打开消息推送页面。
使用厂商通道必须使用“透传消息”类型下发推送消息
通过服务端接口下发推送消息
服务端集成时首先需要获取AppId、AppKey、MasterSecret参数,登录DCloud开发者中心,在“Uni Push”下的“应用配置”页面中获取,如下图所示:
参考“个推·消息推送”的服务端快速集成文档http://docs.getui.com/
通过服务端接口下发推送消息使用厂商通道必须通过“透传消息”类型下发推送消息
以下是php语言创建消息示例代码:
复制代码 $payload = '{"title":"测试标题","content":"测试内容","payload":"test"}';
$intent = 'intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=io.dcloud.HBuilder/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end';
$template = new IGtTransmissionTemplate();//使用透传消息模板
$template->set_appId(APPID);//应用appid
$template->set_appkey(APPKEY);//应用appkey
$template->set_transmissionType(2);//透传消息类型
$template->set_transmissionContent($payload);//消息内容
$notify = new IGtNotify();
$notify->set_title('测试标题');
$notify->set_content('测试内容');
$notify->set_intent($intent);
$notify->set_type(NotifyInfo_type::_intent);
$template->set3rdNotifyInfo($notify);
完整服务端厂商推送教程参考:
- 多厂商推送透传消息带通知使用文档(c#)
- 多厂商推送透传消息带通知使用文档(java)
- 多厂商推送透传消息带通知使用文档(php)
- 多厂商推送透传消息带通知使用文档(python)
- 多厂商推送透传消息带通知使用文档(restful)
第三步:客户端处理推送消息
UniPush推送服务已经封装好iOS&Android平台的原生集成工作,开发者只需要调用JS代码处理推送消息的业务逻辑:
- 使用条件编译直接调用5+ Push接口,参考5+ APP推送开发指南
- uni的客户端jsapi仍然是plus.push,之前使用plus.push开发的代码仍然可以使用。
- uni-app应用中使用UniPush推送服务参考https://ask.dcloud.net.cn/article/35726
注意事项
推送通道选择逻辑
Android平台
APP在线(个推推送通道可用)
推送通知和透传消息都使用个推的推送通道下发推送消息。
APP离线(个推推送通道不可用)
推送通知,使用个推离线推送通道,离线消息会存储在消息离线库,离线时间内APP在线后下发推送消息。
透传消息,如果符合厂商推送的厂商手机(配置了手机厂商推送参数并且在对应厂商的手机上),则使用厂商推送通道下发推送消息;否则使用个推的离线推送通道,离线消息会存储在消息离线库,离线时间内APP在线后下发推送消息。iOS平台
推送通知,不支持。
透传消息,设置APN参数则通过苹果的APNS通道下发推送消息,没有设置APN参数则使用个推的推送通道下发。
华为厂商通道
在华为手机上必须安装“华为移动服务”才能使用华为的厂商推送通道,首先确保手机上已经安装“华为移动服务”应用。
如果在华为手机应用退出后无法接收到推送消息,可尝试以下操作:
- 更新“华为移动服务”到最新版本;
- 进入手机“设置”,在[应用和通知]->[应用管理]->[华为移动服务]->[存储]页面选择“删除数据”。
重新启动应用,退出后再此下发推送消息。
其它厂商通道
如果应用在线可以接收到推送消息,离线时使用厂商通道无法接收到推送消息,可参考多厂商推送接入流程及注意事项文档(Android)
最后也可以咨询个推客服,企业QQ:3007288187,或者在ask中@getui_johny
UniPush使用指南的更多相关文章
- 【uniapp 开发】UniPush
App.vue export default { onLaunch: function() { // #ifdef APP-PLUS const _self = this; const _handle ...
- JavaScript权威指南 - 函数
函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对 ...
- UE4新手之编程指南
虚幻引擎4为程序员提供了两套工具集,可共同使用来加速开发的工作流程. 新的游戏类.Slate和Canvas用户接口元素以及编辑器功能可以使用C++语言来编写,并且在使用Visual Studio 或 ...
- JavaScript权威指南 - 对象
JavaScript对象可以看作是属性的无序集合,每个属性就是一个键值对,可增可删. JavaScript中的所有事物都是对象:字符串.数字.数组.日期,等等. JavaScript对象除了可以保持自 ...
- JavaScript权威指南 - 数组
JavaScript数组是一种特殊类型的对象. JavaScript数组元素可以为任意类型,最大容纳232-1个元素. JavaScript数组是动态的,有新元素添加时,自动更新length属性. J ...
- const extern static 终极指南
const extern static 终极指南 不管是从事哪种语言的开发工作,const extern static 这三个关键字的用法和原理都是我们必须明白的.本文将对此做出非常详细的讲解. co ...
- Atitit.研发管理软件公司的软资产列表指南
Atitit.研发管理软件公司的软资产列表指南 1. Isv模型下的软资产1 2. 实现层面implet1 3. 规范spec层1 4. 法则定律等val层的总结2 1. Isv模型下的软资产 Sof ...
- HA 高可用软件系统保养指南
又过了一年 618,六月是公司一年一度的大促月,一般提前一个月各系统就会减少需求和功能的开发,转而更多去关注系统可用性.稳定性和管控性等方面的非功能需求.大促前的准备工作一般叫作「备战」,可以把线上运 ...
- 第六代智能英特尔® 酷睿™ 处理器图形 API 开发人员指南
欢迎查看第六代智能英特尔® 酷睿™ 处理器图形 API 开发人员指南,该处理器可为开发人员和最终用户提供领先的 CPU 和图形性能增强.各种新特性和功能以及显著提高的性能. 本指南旨在帮助软件开发人员 ...
随机推荐
- JDK源码那些事儿之ConcurrentLinkedQueue
阻塞队列的实现前面已经讲解完毕,今天我们继续了解源码中非阻塞队列的实现,接下来就看一看ConcurrentLinkedQueue非阻塞队列是怎么完成操作的 前言 JDK版本号:1.8.0_171 Co ...
- Div+CSS总结
之前最早接触是在牛腩新闻发布系统中,当时看到这些自己是一头雾水,不过好在我们已经形成了这样的学习习惯,先实践在接触理论,这样再学习理论的时候就会想到当初我是怎样的迷茫,这样自己印象更深刻. DIV+C ...
- test20190816 NOIP2019 模拟赛
100+100+20=220,T3吐槽:整个考室没有一个人正确地理解了题意. 树上路径(phantasm) Akari 的学校的校门前生长着一排 n 棵树,从西向东依次编号为 1 ∼ n.相邻两棵树间 ...
- unsupervised learning: K-means 算法
k-means算法是目前最流行的,用得最多的一种clustering算法 K-means算法 如果我们想要将上图中的绿色的点分为两类,首先随机的选取两个cluster centroids(聚类中心), ...
- String 堆内存和栈内存
java把内存划分为两种:一种是栈(stack)内存,一种是堆(heap)内存 在函数中定义的一些基本类型的变量和对象的引用变量都在栈内存中分配,当在一段代码块定义一个变量时,java就在栈中为这个变 ...
- CSP2019 D2T2 划分 (单调队列DP)
题目 洛谷传送门 题解 就是这道题搞我退役考场上写了n^2 64分,结果爆成8-12分.直接GG. 考场上想到正解的写法被自己否决了 题解传送门(看到这道送我退役的题目⑧太想写题解) 六行O(n2)O ...
- Ceph osd故障恢复
1 调高osd的日志等级 加上红框那一行就可以了 osd的日志路径:/var/log/ceph/ceph-osd.3.log 注意:加上了这一行后日志会刷很多,所以要特别注意日志容量的变化,以防把v ...
- Django基础(2)-如何安装特定版本的Django项目
Django1.0版本和2.0版本的差异较大,这里jacky更常用的Django的1.9.8的版本,本小节jacky将给大家分享如何用Pycharm创建1.9.8版本的项目 (一)使用Pycharm配 ...
- 模板 - 数据结构 - 可持久化无旋Treap/PersistentFHQTreap
有可能当树中有键值相同的节点时,貌似是要对Split和Merge均进行复制的,本人实测:只在Split的时候复制得到了一个WA,但只在Merge的时候复制还是AC,可能是恰好又躲过去了.有人说假如确保 ...
- 2、vueJs基础知识02
vue生命周期: 钩子函数: created -> 实例已经创建 √ beforeCompile -> 编译之前 compiled -> 编译之后 ready -> 插入到文档 ...