第一步:开通UniPush推送服务

https://uniapp.dcloud.io/cloud?id=%E7%BB%9F%E4%B8%80%E6%8E%A8%E9%80%81 https://ask.dcloud.net.cn/article/35716 //官网开通指南

推送先关配置 - 图1

安卓包名

推送先关配置 - 图2

SHA1证书指纹

使用命令,在证书位置打开命令窗口执行可以查看证书信息

keytool -list -v -keystore yibangbang.keystore

推送先关配置 - 图3

第二步:配置厂商信息

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

Uni Push 集成并统一了各个手机厂商的系统级推送,目前支持魅族、OPPO、华为、小米。如果需要使用厂商推送,需要先在各厂商开发者平台申请。

如果只使用三方push,会在很多国产手机上因为节电设置而无法保活push进程,导致无法推送。比如小米手机对三方推送封杀的比较厉害,App退出后很难成功发送push。

https://ask.dcloud.net.cn/article/35622

这也是那天彦彦手机打开app才收到推送的原因

申请通过后厂商会提供推送的相关参数,需要将这些参数配置到 DCloud 开发者中心后台。
厂商参数配置页面如下图所示:
推送先关配置 - 图4

参考文档开通这四家推送
https://www.dcloud.io/docs/a/unipush/manufacturer.pdf

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

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

launchFlags=0x14000000字段,解决接收多条通知后点击可能无法触发click事件的问题
io.dcloud.HBuilder为APP包名,需要替换为自己APP的包名;
S.title=的值为推送消息标题,对应5+ API中PushMessage对象的title属性值;
S.content=的值为推送消息内容,对应5+ API中PushMessage对象的content属性值;
S.payload=的值为推送消息的数据,对应5+ API中PushMessage对象的payload属性值;


两种推送方式

第一种,通过Uni-Push开发者中心后台下发推送消息(用来测试)

参考

https://ask.dcloud.net.cn/article/35884

要想实现推送功能,需要先自定义基座(因为推送也是需要依赖包名等信息的,官方说过,推送必须要用自定义基座才行)
推送先关配置 - 图5

1. 制定自定义基座

推送先关配置 - 图6

2. 选择自定义基座

推送先关配置 - 图7

3. 运行到设备,先把apk文件安装到设备

推送先关配置 - 图8

4. 推送设置

推送先关配置 - 图9

5. 可以看到通知

推送先关配置 - 图10

第二种:通过服务端接口下发推送消息

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

通过服务端接口下发推送消息使用厂商通道必须通过“透传消息”类型下发推送消息

  1. $payload = '{"title":"测试标题","content":"测试内容","sound":"default","payload":"test"}';
  2. $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';
  3. $template = new IGtTransmissionTemplate();//使用透传消息模板
  4. $template->set_appId(APPID);//应用appid
  5. $template->set_appkey(APPKEY);//应用appkey
  6. $template->set_transmissionType(2);//透传消息类型
  7. $template->set_transmissionContent($payload);//消息内容
  8. $notify = new IGtNotify();
  9. $notify->set_title('测试标题');
  10. $notify->set_content('测试内容');
  11. $notify->set_intent($intent);
  12. $notify->set_type(NotifyInfo_type::_intent);
  13. $template->set3rdNotifyInfo($notify);

服务端对接推送服务PHP实例代码参考:https://github.com/dcloudio/H5P.Server/tree/master/push/UniPush

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

https://ask.dcloud.net.cn/article/35726

App.vue

  1. export default {
  2. onLaunch: function() {
  3. // #ifdef APP-PLUS
  4. const _self = this;
  5. const _handlePush = function(message) {
  6. // TODO
  7. };
  8. plus.push.addEventListener('click', _handlePush); //点击通知信息触发事件
  9. plus.push.addEventListener('receive', _handlePush);
  10. // #endif
  11. }
  12. }

https://blog.csdn.net/weixin_39288898/article/details/90769403