DCloud_App_Array
DCloud_App_Array
  • 发布:2019-02-25 20:25
  • 更新:3 天前
  • 阅读:155629

UniPush使用指南

分类:uni-app

从HBuilderX 2.0.3 起,uni-app、5+App、wap2app均支持UniPush;
从HBuilderX2.7.10开始,支持谷歌FCM,参考:https://ask.dcloud.net.cn/article/37356

概述

UniPush是DCloud联合个推公司推出的集成型统一推送服务,内建了苹果、华为、小米、OPPO、VIVO、魅族、谷歌FCM等手机厂商的系统级推送和个推等第三方推送。

国内Android的Push是一个混乱的世界,因为Google的Push服务FCM被墙,所以一些国内的安卓手机厂商各自做了自己的推送,比如华为、小米、OPPO、VIVO、魅族等,但还有很多国产手机厂商没有提供官方推送方案。三方独立公司如个推,则提供了独立的push方案。
在没有uniPush以前,如果只使用三方push,会在很多国产手机上因为节电设置而无法保活push进程,导致无法推送。
而如果每个安卓手机的官方Push SDK都集成开发一遍,这么多平台,工作量会非常巨大,管理维护也很麻烦。

uniPush解决了这个难题,开发者只需要开发一次。系统会自动在不同手机上选择最可靠的推送通道发送push消息,保障送达率。

UniPush即降低了开发成本、又提高了push送达率,并且免费,是当前推送的最佳解决方案。

有了unipush,开发者不应该再使用其他push方案了。但我们发现很多开发者有误解,导致还在错误使用其他推送。

  • 常见误解1:“uniPush的专业性,和专业的个推、极光等服务可相比吗?”
    答:uniPush是由个推将其本来收费的vip push产品,免费提供给了DCloud的开发者。它与个推vip push的只有2个区别:1、免费;2、账户使用的是DCloud开发者账户,而无需再重新注册个推账户。个推是A股上市公司,专业性在推送领域领先。
  • 常见误解2:“uniPush好麻烦,我就喜欢个推、极光这种简单sdk,不想去各个rom厂商去申请一圈”
    答:uniPush不建立在申请手机厂商授权的基础上,如果你不申请那些,使用起来和用普通的个推是一样的。但是要特别注意,推送行业的现状就是:不集成rom厂商的推送,就无法在App离线时发送push。。按照普通个推模式使用,后果就是在华为、小米、OPPO、VIVO、魅族上发不了离线消息。
  • 常见误解3:“uniPush的送达率还是不够,是否可以付费来提升送达率,个推是有付费提升送达率的方法的”
    答:前文已经说了。个推的付费提升送达率的产品就是vip push,而uniPush就是个推的vip Push。DCloud通过谈判免费给DCloud的开发者使用了。
  • 常见误解4:开通uniPush要实名认证,还得传身份证,开通普通个推不用这么麻烦。
    答:此问题之前曾存在,后来已经处理,保持和个推需要的身份信息相同,不再需要身份证。

UniPush推送服务由“个推”专为DCloud订制提供技术支持,因此在服务端的集成与“个推·消息推送”完全一致。对于之前使用个推的开发者,可以平滑的迁移到uniPush方案上。

整体架构

推送消息类型

通常推送消息分以下两种类型:

  • 通知栏消息(推送通知)
    UniPush推送服务定义好的推送样式、后续动作的推送方式,客户端接收到后显示在系统通知栏,用户点击通知栏消息启动APP(激活到前台)。

  • 透传消息
    即自定义消息,UniPush推送服务只负责消息传递,不做任何处理,客户端在接收到透传消息后需要自己去处理消息的展示方式或后续动作。
    UniPush推送服务对透传消息的数据符合以下格式时做了特殊处理,将透传消息显示到系统通知栏

    {"title": "xxx","content": "xxx","payload": "xxx"}

第一步:开通UniPush推送服务

点此查看如何开通UniPush推送服务

注意:开通UniPush后,需在后台配置“厂商推送设置”,否则可能在服务端下发推送消息界面中不会显示第三方厂商(手机厂商)推送通知内容(如intent)

获取手机厂商推送设置信息请参考:厂商推送应用创建配置流程

第二步:服务端下发推送消息


使用厂商推送下发推送消息必须设置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事件的问题

注意事项:

  • intent格式与个推的多厂商pdf文档中描述的不一样,以此格式为准
  • intent是为了兼容Android平台的数据,但为了保持兼容性,建议iOS平台也配置此数据
  • action=android.intent.action.oppopush为固定的数据,是兼容oppo设备的离线推送功能,不需要修改
  • component=io.dcloud.HBuilder/io.dcloud.PandoraEntry中的io.dcloud.HBuilder为应用的包名,与App云端打包界面设置的Android包名一致

通过开发者中心后台Web页面发送Push消息

登录DCloud开发者中心,在“我创建的应用”列表中选择应用,左侧选择“Uni Push”,打开消息推送页面。
tips 推送页面改版,详情了解开发者中心Unipush推送页面优化介绍
使用厂商通道必须使用“透传消息”类型下发推送消息

使用代码通过服务端接口推送消息

服务端集成时首先需要获取AppId、AppKey、MasterSecret参数,登录DCloud开发者中心,在“Uni Push”下的“应用配置”页面中获取,如下图所示:
应用信息

如果使用uniCloud开发服务器

已经有封装好的易用插件负责服务器端开发,见:https://ext.dcloud.net.cn/plugin?id=1680

如果使用传统服务器开发

参考“个推·消息推送”的服务端快速集成文档http://docs.getui.com/

通过服务端接口下发推送消息使用厂商通道必须通过“透传消息”类型下发推送消息
以下是php语言创建消息示例代码:

    $payload = '{"title":"测试标题","content":"测试内容","sound":"default","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);

注意:把$intent变量赋值字符串中的io.dcloud.HBuilder换成自己应用的包名
使用HBuilder标准真机运行基座下发推送消息https://demo.dcloud.net.cn/push/unipush.HBuilder/index.php
服务端对接推送服务PHP实例代码参考:https://github.com/dcloudio/H5P.Server/tree/master/push/UniPush


完整服务端厂商推送教程参考:

第三步:客户端处理推送消息

UniPush推送服务已经封装好iOS&Android平台的原生集成工作,开发者只需要调用JS代码处理推送消息的业务逻辑:

注意事项

推送通道选择逻辑

  • Android平台
    APP在线(个推推送通道可用)
    推送通知和透传消息都使用个推的推送通道下发推送消息。
    APP离线(个推推送通道不可用)
    推送通知,使用个推离线推送通道,离线消息会存储在消息离线库,离线时间内APP在线后下发推送消息。
    透传消息,如果符合厂商推送的厂商手机(配置了手机厂商推送参数并且在对应厂商的手机上),则使用厂商推送通道下发推送消息;否则使用个推的离线推送通道,离线消息会存储在消息离线库,离线时间内APP在线后下发推送消息。

  • iOS平台
    推送通知,uniPush后台管理界面中不支持下发此类型,个推提供的服务端API支持下发推送通知(设置APN参数则通过苹果的APNS通道,否则使用个推通道)。
    透传消息,设置APN参数则通过苹果的APNS通道下发推送消息,没有设置APN参数则使用个推的推送通道下发。

华为厂商通道

在华为手机上必须安装“华为移动服务”才能使用华为的厂商推送通道,首先确保手机上已经安装“华为移动服务”应用。
如果在华为手机应用退出后无法接收到推送消息,可尝试以下操作:

  1. 更新“华为移动服务”到最新版本;
  2. 进入手机“设置”,在[应用和通知]->[应用管理]->[华为移动服务]->[存储]页面选择“删除数据”。
    重新启动应用,退出后再下发推送消息。

VIVO厂商通道

需要在VIVO应用商店上线才能申请VIVO的厂商推送
注意事项:

  1. vivo对推送内容有要求:纯数字、纯英文、纯符号、”测试“字样、符号加数字,主要是这几类,正式应用不能发送这种消息。
  2. 支持vivo推送功能HBuilderX最低版2.1.0及以上.
  3. 不是全部vivo手机都支持消息推送,一些老手机不支持。具体请参考图中数据

OPPO厂商通道

需要在OPPO应用商店上线才能申请OPPO的厂商推送

谷歌FCM通道

需Android手机已经安装GMS,且手机网络可以连通谷歌FCM推送服务器。
详细教程另见:https://ask.dcloud.net.cn/article/37356

其它厂商通道

如果应用在线可以接收到推送消息,离线时使用厂商通道无法接收到推送消息,可参考UniPush厂商通道常见问题https://ask.dcloud.net.cn/article/36611
最后也可以咨询个推客服,企业QQ:3008019346,或者在ask中@getui_johny

其他相关资源

FAQ

Q:5+app和wap2app需要uniPush怎么办?
A:HBuilderX 2.0.3起,5+app和wap2app也支持了uniPush。
5+app和wap2app升级uniPush不需要改动app前端代码,只需要在HBuilderX中打开manifest.json的“SDK配置”页,在“推送”下勾选“DCloud UniPush”,并点击“配置”,在后台开通unipush服务,配置好厂商推送参数重新提交云端打包即可。后端服务器需要参考第二步对接个推推送服务。

Q:离线打包如何配置?
A:Android平台App离线打包-Push
iOS平台App离线打包-Push

Q:iOS平台如何实现应用启动后不立即弹出“发送通知”系统授权框
A:参考:https://ask.dcloud.net.cn/article/36955

25 关注 分享
163828@qq.com Trust AJXMJC DCloud_UNI_HDX 小诺小言 306816224@qq.com iyunxi@qq.com 今天回复我了吗 s710464107@gm.ntpu.edu.tw 1750352431@qq.com sam0912@sina.cn 1017981699@qq.com qfxiongbin@163.com 8925683@qq.com 2923767349@qq.com 2958248265@qq.com 康林 jingge_fu@163.com maozai 河南中济智控 DCloud_UNI_WYQ miclefox@aliyun.com 610627597@qq.com Unlimited_S 1768053968@qq.com

要回复文章请先登录注册

377531210@qq.com

377531210@qq.com

回复 jamesliu :
我小米配置了厂商通道,用unipush提供的web版测试,也没收到消息。你是如何收到的?
3 天前
vtbird@163.com

vtbird@163.com

回复 vtbird@163.com :
咨询了个推的技术客服,回复【想要离线情况下收到消息,只能下发通知】,也就是说描述里【可以使用unipush,通过服务器激活App,执行透传消息,让App启动然后采集位置。】这种方案是不可行的,无法做到无感知激活,必须用户手动点击通知消息才可以,这个太坑了,建议改改描述,以免误导开发者入坑
2020-06-30 16:51
浩浩2

浩浩2

真是吃饱了,搞得越来越复杂
2020-06-29 14:47
739038779@qq.com

739038779@qq.com

瞎几把改来改去的,让不让用了。这都什么文档,说了跟没说一样
2020-06-28 17:22
vtbird@163.com

vtbird@163.com

【App:持续定位方案:iOS端可以申请持续定位权限,参考。Android如果进程被杀,代码无法执行。可以使用unipush,通过服务器激活App,执行透传消息,让App启动然后采集位置。Android上,即使自己写原生插件做后台进程,也很容易被杀,unipush是更合适的方案】
经测试,华为在配置厂商通道的情况下,仍然接收不到离线透传消息,无法做到无感知激活App,如果配置set3rdNotifyInfo,离线状态下,透传消息会直接通过通知消息的方式下发
请问在客户端离线状态下,怎么利用unipush通过服务器激活App,执行透传消息?这块所谓的激活,是无感知的吗,还是推送给用户,需要用户点击才能激活?
2020-06-28 16:55
jamesliu

jamesliu

回复 不老刘 :
我也是只有小米收得到,但小米国外也收不到离线消息。FMS似乎也不能用。离线消息都没办法
2020-06-27 17:15
AlphaHR

AlphaHR

回复 1055317030@qq.com :
這個谷歌策略要求的,所以HBuilder打谷歌渠道包會隱私提示
2020-06-20 18:00
不老刘

不老刘

配置了小米,OPPO,VIVO,华为,结果只有小米离线推送好用。其他离线都收不到。。。。
2020-06-18 16:22
云淡风轻gfg

云淡风轻gfg

离线后,怎么点击打开app
2020-06-17 17:40
1055317030@qq.com

1055317030@qq.com

打包谷歌渠道包会有一个个推的隐私弹框,应该怎么去掉?找不到相关说明
2020-06-16 16:53