从HBuilderX 1.7.2起,uni-app支持UniPush。
从HBuilderX 2.0.3 alpha起,5+App支持UniPush。php
注意html
UniPush是DCloud推出的集成型统一推送服务,内建了苹果、华为、小米、OPPO、魅族等手机厂商的系统级推送和个推等第三方推送。html5
国内Android的Push是一个混乱的世界,由于google的push服务器被墙,因此一些国内的安卓手机厂商各自作了本身的推送,好比华为小米魅族等,但还有不少国产手机厂商没有提供官方推送方案。三方独立公司如个推,则提供了独立的push方案。
在没有unipush之前,若是只使用三方push,会在不少国产手机上由于节电设置而没法保活push进程,致使没法推送。好比小米手机对三方推送封杀的比较厉害,App退出后很难成功发送push。
而若是每一个安卓手机的官方push都集成一遍,这么多平台,工做量会很是巨大,管理维护也很麻烦。java
uniPush解决了这个难题,开发者只须要开发一次。系统会自动在不一样手机上选择最可靠的推送通道发送push消息,保障送达率。python
UniPush即下降了开发成本、又提升了push送达率,而且免费,是当前推送的最佳解决方案。有个unipush,开发者不该该再使用其余push方案了,其余方案都达不到unipush的效果。android
UniPush推送服务由“个推”专为DCloud订制提供技术支持,所以在服务端的集成与“个推·消息推送”彻底一致。对于以前使用个推的开发者,能够平滑的迁移到uniPush方案上。
注意:UniPush推送服务必须从新向DCloud申请开通帐户。json
一般推送消息分如下两种类型:c#
通知栏消息(推送通知)
UniPush推送服务定义好的推送样式、后续动做的推送方式,客户端接收到后显示在系统通知栏,用户点击通知栏消息启动APP(激活到前台)。api
透传消息
即自定义消息,UniPush推送服务只负责消息传递,不作任何处理,客户端在接收到透传消息后须要本身去处理消息的展现方式或后续动做。
UniPush推送服务对透传消息的数据符合如下格式时作了特殊处理,将透传消息显示到系统通知栏bash
复制代码{"title": "xxx","content": "xxx","payload": "xxx"}
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);
UniPush推送服务已经封装好iOS&Android平台的原生集成工做,开发者只须要调用JS代码处理推送消息的业务逻辑:
Android平台
APP在线(个推推送通道可用)
推送通知和透传消息都使用个推的推送通道下发推送消息。
APP离线(个推推送通道不可用)
推送通知,使用个推离线推送通道,离线消息会存储在消息离线库,离线时间内APP在线后下发推送消息。
透传消息,若是符合厂商推送的厂商手机(配置了手机厂商推送参数而且在对应厂商的手机上),则使用厂商推送通道下发推送消息;不然使用个推的离线推送通道,离线消息会存储在消息离线库,离线时间内APP在线后下发推送消息。
iOS平台
推送通知,不支持。
透传消息,设置APN参数则经过苹果的APNS通道下发推送消息,没有设置APN参数则使用个推的推送通道下发。
在华为手机上必须安装“华为移动服务”才能使用华为的厂商推送通道,首先确保手机上已经安装“华为移动服务”应用。
若是在华为手机应用退出后没法接收到推送消息,可尝试如下操做:
若是应用在线能够接收到推送消息,离线时使用厂商通道没法接收到推送消息,可参考多厂商推送接入流程及注意事项文档(Android)
最后也能够咨询个推客服,企业QQ:3007288187,或者在ask中@getui_johny