安卓APP推送记录
注意:本文章对鸿蒙系统、苹果系统的配置是没有的哦!哪位大神有操作步骤文章可以帮忙推荐推荐,共同学习
一、使用框架
Uniapp+unipush推送插件
二、需要提前准备的
1.准备自有证书
可以用这个网站—香蕉云编(用于安卓 ios证书生成)https://www.yunedit.com/update/androidzhengshu/list
安卓证书生成后,下载证书,除了原文件的保留,也要把证书信息记录下来,如 (密钥库密码和密钥密码 密码设置最好设置到一样的)密钥库密码、密钥密码 、证书md5值 、sha256值、 sha1值等保存到那,后续使用。
2.新建uniapp项目
新建项目后,manifest.json文件中设置包名(包名规则:com.你的公司.你的项目)和appId,这2个至关重要,一旦设置最好不要轻易修改

3.配置unipush
在manifest.json中,你不勾选unipush手动打一次包

然后在进入manifest页面点击配置就可以跳转到配置网站页面

进入网站后你就可以看见你的项目了,
点击左边菜单uni-push来设置你的应用信息。

这样基本信息算设置完成。
接下来,如果你想要app接受离线推送(当app被彻底杀死),那么就需要去进行厂商推送设置,这是一个很麻烦、很漫长的过程。

接下来你需要去各个厂商申请企业开发者账号,成为开发者(有些厂商不仅需要公司的各种信息还需申请者的身份证还需要对公打款),当这些都申请成功了你以为完了?不,还需要去应用服务那申请应用,去推送服务那申请推送。
1).比如华为:配置推送服务时,必须申请自分类权益
2).比如小米:如果你的应用要上架(需要软著、备案等信息),如果你不上架,那么就需要先提交工单,申请不上架应用,申请通过后,左边菜单才有个企业内部应用,在这个下面去新建应用后还得进行上架申请(准备好app图片、还得打空包等),打空包的文档如下


审核通过后,就点击小米平台的推送服务,如上图,刚开始是未启用状态,你得再去申请,当审核通过后状态就会变成已启用。当操作中有应用信息的时候,你就可以点击了,再去消息分类管理/channel列表中申请分类,(https://dev.mi.com/xiaomihyperos/documentation/detail?pId=1655这是分类文档,在申请时需要提前了解)

当审核成功后,留着通知类别id后面用。
3).比如vivo,这要求应用必须上架,但是你又不想上架又想继续使用vivo的厂商推送通道。你就得去提工单了,告诉他你又不想上架又想继续使用推送服务的原因,并提交盖了公章的承诺函。等审核通过后,他会要求你先进行上架,这下你就得保证你的app包有隐私协议,登录页面有隐私协议询问,app里面有隐私协议入口,隐私协议还可以外网访问。
保证这些后就可以上架了发布了,在发布前还需要进行隐私协议测试(https://dev.vivo.com.cn/vcl/#/auto-test/task/create),需要提前准备隐私协议地址和app包,当发布后你调通了后就得马上下架app。
4).比如oppo,当你的应用和推送都申请了,还得去申请工单,提交不上架应用推送服务申请(准备隐私协议测试报告、app包)
1.申请应用(https://open.oppomobile.com/new/mcom#/home/management/app-admin#/service/oms?app_id=33544705&app_type=app&service_id=1000004&server_id=2)
2.开启推送,不上架推送服务的话需要进行应用不上架申请
应用不上架的话需要提前去进行安全隐私监测服务,准备隐私监测包和app图片
安全隐私监测服务地址:https://open.oppomobile.com/audit-open/audit-front-open/privacy/app-manage/AppInitial?STORE_USERNAME=%25E5%259B%259B%25E5%25B7%259D%25E7%25A2%25A7%25E6%259C%2597%25E7%25A7%2591%25E6%258A%2580%25E6%259C%2589%25E9%2599%2590%25E5%2585%25AC%25E5%258F%25B8
安全隐私监测服务文档:https://open.oppomobile.com/documentation/page/info?id=12127


应用不上架申请地址:https://open.oppomobile.com/ticket/form?activity_id=71
应用不上架申请文档:https://open.oppomobile.com/documentation/page/info?id=13206
将隐私检测报告和应用界面截图一起打包上传

然后找到"/channel_id": “填写OPPO平台登记的渠道ID”,“/category”: “填写Opush消息类别category”。
4.返回dcolud配置unpush
当所有厂商申请好了,可以回到这里配置厂商通道了

三、集成验证
- 客户端获取 cid
假如我要给“张三”打电话,那就需要知道对方的电话标识,即电话号码是多少。 同理,要给某个客户端推送消息,也需要知道该设备的客户端推送标识。
启动 app 后成功获取 cid 则说明云打包 “在线推送” 成功,支持在线推送。
先跟着示例代码简单体验,详细的uni.getPushClientId API介绍 详情参考 代码示例:
// uni-app客户端获取push客户端标记,代码可以实现在App.vue中
uni.getPushClientId({
success: (res) => {
let push_clientid = res.cid
console.log(‘客户端推送标识cid:’,push_clientid)
},
fail(err) {
console.log(err)
}
})

1). 校验厂商离线推送是否集成成功
- 注意这里必须用调试基座去获取cid,不要用正式基座去获取,不然你获取的cid会提示CID不存在*
输入上方获取的 cid ,查询到对应的 Device Token 则说明云打包 “离线推送” 成功,同时支持离线推送。
如果未查询到 device token,则只能 “在线推送” 。离线推送想要手机接受到还需要配置云函数js

2.服务端推送消息
注意:使用 uni-push 2.0,服务端不支持用个推 api 推送,只能用 dcloud 提供的 服务端(云函数)推送 。
unipush2快速接入指南:
uni-push 2.0 常见问题:https://ask.dcloud.net.cn/article/40291
1).云函数创建




注意:扩展库依赖 3 张 opendb 表:opendb-tempdata,opendb-device,uni-id-device。公测版
uniCloud,执行扩展库会自动创建。如果你使用的是 uniCloud 正式版需要自己在 uniCloud 的 web控制台
创建这3张表。下面第四步会讲到
示例如下:


3.云函数执行
在云函数文件目录右键(或按快捷键ctrl + r)-> 上传并运行云函数,此时你的客户端将收到推送消息(应用关闭时为通知栏消息,在线时代码监听到推送消息)。
- 注意:当你点击上传云函数或者上传并运行云函数后,可以在云函数/云对象下面的函数/对象列表中点击详情查看云函数URL化,这个地址后端技术人员到时候是有用的哦(https://doc.dcloud.net.cn/uniCloud/http.html文档地址)


云函数中调用uni-cloud-push扩展库的sendMessage方法,向客户端推送消息
// 简单的使用示例
'use strict';
const uniPush = uniCloud.getPushManager({
appId: "__UNI__0"
}) //注意这里需要传入你的应用appId
exports.main = async (event, context) => {
try {
// 检查 event.body 是否存在
if (!event.body) {
throw new Error('event.body 为空或未定义');
}
let obj;
// 如果 event.body 已经是对象,直接使用
if (typeof event.body === 'object') {
obj = event.body;
} else if (typeof event.body === 'string') {
// 如果是字符串,尝试解析JSON
try {
obj = JSON.parse(event.body);
} catch (parseError) {
console.error('JSON解析失败:', parseError);
throw new Error(`JSON解析失败: ${parseError.message}`);
}
} else {
throw new Error(`不支持的 event.body 类型: ${typeof event.body}`);
}
const title = obj.title;
const content = obj.content;
const cid = obj.cid ;
const payload = obj.payload || {
text: content
};
// 验证必要参数
if (!title) {
throw new Error('title 参数不能为空');
}
if (!content) {
throw new Error('content 参数不能为空');
}
if (!cid) {
throw new Error('cid 参数不能为空');
}
const result = await uniPush.sendMessage({
"push_clientid": cid, // 使用传入的CID或默认CID
"force_notification": true, //填写true,客户端就会对在线消息自动创建"通知栏消息"。
"title": title,
"content": content,
"settings": {
"ttl": 3600000,//3600000消息有效期1小时 86400000 消息有效期24小时
"apns": {
"sound": "default", // 声音
"badge": 1, // 角标
"content-available": 1 // 静默推送
}
},
"payload": payload, // 动态payload
"category": {
"harmony": "MARKETING"
},
"options": {
"HW": {//华为厂商
"/message/android/category": 'DEVICE_REMINDER', //设备提醒
},
"HO": {
"/android/notification/importance": "NORMAL" //importance字段值为LOW:资讯营销类消息 ;importance字段值为NORMAL:服务与通讯类消息
},
"VV": {
"/category": 'DEVICE_REMINDER',//系统消息-设备消息
},
"XM": {
"/extra.channel_id": "192", // 小米通知渠道ID 需要在消息分类管理-channel列表进行申请
},
"OPPO": {
"/channel_id": "push_oplus_category_content",
"/category": "MARKETING",
"/notify_level": 1 //通知栏消息提醒等级取值定义。1:通知栏,2:通知栏+锁屏,16:通知栏+锁屏+横幅+震动+铃声。使用notify_level参数时,category参数必传。
},
"MZ": {
"/noticeMsgType": 1 //魅族 请填写整数类型的消息分类(0:公信;1:私信)
}
}
});
return {
code: 0,
message: '推送发送成功',
data: result
};
} catch (error) {
return {
code: -1,
message: error.message || '推送发送失败',
error: error.stack
}
}
};
- 注意:非OPPO、VIVO软件商店官方渠道下载的应用,厂商不提供公信消息服务。 vivo、oppo
对接离线推送时,可以暂时发送测试消息,额外需要分别在 vivo 开放平台 、 oppo开放平台 录入测试用户(regid 对应个推cid
绑定的 device token,可以从个推后台的“故障排查”中查询 cid 信息获取)。
在线消息无额度限制。离线推送各厂商的限额(包含 extra.channel_id 如何申请),详见: 厂商通道限额
HarmonyOS NEXT系统(纯血鸿蒙、非安卓鸿蒙)的消息分类,harmony取值参考 云端通知category取值
如果你希望当应用在线时,也通过“通知栏消息”来提醒用户;可以通过以下两种方式实现:
1).监听到消息内容后,根据业务需要自己判断是否要创建“通知栏消息”,需要就调用创建本地消息API uni.createPushMessage手动创建通知栏消息。
2).服务端执行推送时,传递参数force_notification:true,客户端就会自动创建“通知栏消息”(此时你监听不到消息内容),当用户点击通知栏消息后,APP才能监听到消息内容。
先跟着示例代码简单体验,详细的 uniPush.sendMessage API介绍 详情参考
检查确认当前 app 的通知栏权限开启后,则可以开始进行推送测试。
4.测试在线推送,打开 app 在前台时进行推送

- 测试离线推送,关闭 app 进程时进行推送

下面是已经用于项目的云函数js配置(其中小米、华为、oppo需要申请,其他的可以通用)
"HW": {"/message/android/category": 'DEVICE_REMINDER', //设备提醒
},
"HO": {
"/android/notification/importance": "NORMAL" //importance字段值为LOW:资讯营销类消息 ;importance字段值为NORMAL:服务与通讯类消息
},
"VV": {
"/category":'DEVICE_REMINDER',//系统消息-设备消息
},
"XM": {
"/extra.channel_id": "", // 小米通知渠道ID 需要在消息分类管理-channel列表进行申请
},
"OPPO": {
// "/channel_id": "填写OPPO平台登记的渠道ID",
// "/category": "填写Opush消息类别category",
},
"MZ": {"/noticeMsgType": 1 //魅族 请填写整数类型的消息分类(0:公信;1:私信)
}
四、正式版与测试版本
- 测试版本会自动帮你创建3张表,但是正式打包应用时需要到dcloud里面去点击修改,然后选择正式版 提交


2.然后需要回到代码,找到uniCloud/database文件夹(下面是我新建表后的样子)

在database文件点击鼠标右键然后选择‘新建DB schema(s) ’,新增3张表



打开HBuilderX 打开你的工程文件》在工程文件目录展开》uniCloud》选中database右键》新建Db Schema,在打开的窗口中依次搜索这三张表并且创建。。。然后选中database右键》上传所有Db Schema(含扩展)
五、文档地址
Doclud地址:https://dev.dcloud.net.cn/pages/app/push2/thirdparty
unipush2快速接入指南:
uni-push 2.0 常见问题:https://ask.dcloud.net.cn/article/40291
消息分类文档:https://docs.getui.com/getui/server/rest_v2/third_party/?id=doc-title-28
离线配置文档:
https://docs.getui.com/getui/mobile/vendor/qps/
厂商应用开通指南:
https://docs.getui.com/getui/mobile/vendor/vendor_open/
Vivo消息分类文档:https://push.baidu.com/doc/guide/vivo_category
各个厂商配置分类(dcloud-消息推送-创建推送-通知消息-离线配置消息验证操作):https://docs.getui.com/getui/mobile/vendor/qps/
最新厂商限额规则(安卓离线推送必读):https://docs.getui.com/getui/mobile/vendor/qps/
服务端需要调用的话可以让前端将云函数继续url化发给您这边直接http去请求
云函数url化:https://uniapp.dcloud.net.cn/uniCloud/http.html
7815

被折叠的 条评论
为什么被折叠?



