第一步:开通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 //官网开通指南
安卓包名
SHA1证书指纹
使用命令,在证书位置打开命令窗口执行可以查看证书信息
keytool -list -v -keystore yibangbang.keystore
第二步:配置厂商信息
注意:开通UniPush后,需在后台配置“厂商推送设置”,否则可能在服务端下发推送消息界面中不会显示第三方厂商(手机厂商)推送通知内容(如intent)
Uni Push 集成并统一了各个手机厂商的系统级推送,目前支持魅族、OPPO、华为、小米。如果需要使用厂商推送,需要先在各厂商开发者平台申请。
如果只使用三方push,会在很多国产手机上因为节电设置而无法保活push进程,导致无法推送。比如小米手机对三方推送封杀的比较厉害,App退出后很难成功发送push。
这也是那天彦彦手机打开app才收到推送的原因
申请通过后厂商会提供推送的相关参数,需要将这些参数配置到 DCloud 开发者中心后台。
厂商参数配置页面如下图所示:
参考文档开通这四家推送
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开发者中心后台下发推送消息(用来测试)
参考
要想实现推送功能,需要先自定义基座(因为推送也是需要依赖包名等信息的,官方说过,推送必须要用自定义基座才行)
1. 制定自定义基座
2. 选择自定义基座
3. 运行到设备,先把apk文件安装到设备
4. 推送设置
5. 可以看到通知
第二种:通过服务端接口下发推送消息
服务端集成时首先需要获取AppId、AppKey、MasterSecret参数,登录DCloud开发者中心,在“Uni Push”下的“应用配置”页面中获取,如下图所示:
通过服务端接口下发推送消息使用厂商通道必须通过“透传消息”类型下发推送消息
$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);
服务端对接推送服务PHP实例代码参考:https://github.com/dcloudio/H5P.Server/tree/master/push/UniPush
第四步:客户端处理推送消息
https://ask.dcloud.net.cn/article/35726
App.vue
export default {
onLaunch: function() {
// #ifdef APP-PLUS
const _self = this;
const _handlePush = function(message) {
// TODO
};
plus.push.addEventListener('click', _handlePush); //点击通知信息触发事件
plus.push.addEventListener('receive', _handlePush);
// #endif
}
}
https://blog.csdn.net/weixin_39288898/article/details/90769403