unipush3.0集成
unipush推出2.0服务,之前一直用的1.0,现在项目推荐使用2.0,最近也是对2.0这个推送做了测试,下面就主要对华为这个来总结一下,其余的厂商大同小异
1.push1.0和2.0对比
个人理解,2.0比1.0升级之处在于:1.支持全端推送,小程序和h5端 ;2.不在使用后端集成个推那些api了,换句话说也就是解放了后端,活都前端来干,只需要将云函数url化,给后端这个url就行;3.还是要集成各大厂商的SDK,这点和1.0一模一样,绕不过的,4.就是要调用云函数,要收费,虽然很便宜,但是要再买一个云服务器,有点扯
2.购买云服务器,配置云服务器
去unicloud官网,申请一下,免费购买一个月的阿里云服务器就行,免费的
3.客户端集成
- 2.点击配置,跳转到unicloud开发者中心进行配置,包名直接在应用管理里面的应用哪里设置,然后选择,并关联你上面申请的阿里云服务器
好多人这里搞不明白,也懒得官方文档,或者看了也不懂,这里简单区分一下这2个
1.通知消息:这个就是app在线的时候,通过个推渠道下发到手机上面的,只在app在线起作用
2.透传消息:这个就是app离线的时候,通过厂商渠道发送的intent通知(重点:需要配置厂商,app离线)
也就是说,app在线走个推渠道,离线会走厂商推送,接下来就说一下怎么配置这个厂商渠道来实现Intent通知
- 4.配置厂商渠道,按照指示到华为官网新建项目和应用,并开通push服务,在配置信息中填写包名,这个包名别填错了,然后把app打包生成的密钥复制过去(连密钥怎么生成都不知道的话,就多去官网看看文档),然后按照步骤一步一步来,配置厂商这里没什么难度,小米 oppo vivo需要在各自应用商店上架,否则配置不了
-重点 如何确保自己厂商服务已经配置完成,没有出现问题???
1.我们测试的时候都是用的自定义基座测试,但是自定义基座是无法激活厂商服务的,官方说的打正式包,我更喜欢说是激活,如何激活这个服务,将配置好的厂商服务app直接提交云打包,然后安装并启动app
2.如何测试:安装完成之后,卸载app,再次用自定义基座获取cid(不知道怎么获取cid,自己去看文档),拿到这个cid到unicloud控制台,打开故障排除,输入cid,出现device token才算是配置完成了
接下里就是测试厂商服务:
intent通知格式:这里面把你的包名替换一下就OK
intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component你的包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=测试标题;S.content=测试内容;S.payload=test;end
此时关闭的app,你的app就会收到一条通知消息,这个就是用控制台推送和测试,没什么难度,细心点一步一步来就明白了
4.服务中集成使用云函数
截至这里,上面的配置和1.0的配置一模一样,没有什么区别,开头就说了,2.0不需要服务端写代码了,而且前端使用云函数完成推送,这里就教大家怎么引入云函数并完成配置
1.点到项目,右键创建云开发环境,选择你购买的云服务器
2.关联你的云服务
3.右键你的云服务,选择创建云函数,随便起个名字,那个test-data就是我创建的云函数
4.在你的云函数中引入uni-cloud-push这个扩展模块
5.然后到你的云服务中,的云数据库中创建3张数据库表,扩展库依赖 3 张 opendb 表:opendb-tempdata,opendb-device,uni-id-device
这三张表的作用
6.好,到这一步就算配置的差不多了,现在来进行测试云函数,到你的创建的云函数的index.js文件执行以下代码
zhe’li
'use strict';
const uniPush = uniCloud.getPushManager({appId:"你的appid"}) //注意这里需要传入你的应用appId
exports.main = async (event, context) => {
return await uniPush.sendMessage({
"push_clientid": "cid", //填写上一步在uni-app客户端获取到的客户端推送标识push_clientid
"force_notification":true, //填写true,客户端就会对在线消息自动创建“通知栏消息”。
"title": "通知栏显示的标题",
"content": "通知栏显示的内容",
"payload": {
"text":"体验一下uni-push2.0"
}
})
};
这里麻烦改一下你的appid和cid可以吗 ok不ok
7.上传并允许该云函数
8.此时无论app在线还是离线都可以测试并获取到消息,是内置的云函数帮我们完成功能,如果这一步出错的话,可以到云服务器查看云函数的日志
9.云函数url化,并向改url发送请求测试,这里多说一句,这里域名是可以绑定自己的域名,至于如何绑定,点击那个连接自己看
10.postman测试该url,模拟后端获取到数据,向云服务器中云函数发起请求
将云函数的index.js换成以下代码:
// 简单的使用示例
'use strict';
const uniPush = uniCloud.getPushManager({
appId: ""
})
exports.main = async (event) => {
let obj = JSON.parse(event.body)
console.log(obj)
const res = await uniPush.sendMessage({
"push_clientid": obj.cids, // 设备id,支持多个以数组的形式指定多个设备,如["cid-1","cid-2"],数组长度不大于1000
"title": obj.title, // 标题
"content": obj.content, // 内容
"payload": obj.data, // 数据
"force_notification": true, // 服务端推送 需要加这一句
"request_id": obj.request_id //请求唯一标识号,10-32位之间;如果request_id重复,会导致消息丢失
})
};
然后并上传部署该云函数
部署完成,拿到刚才那个url到postman中测试
{
"cids": "",
"title": "url化好聊聊玩",
"content": "11900099099 ",
"options": {
"HW": {
"/message/android/category": "WORK"
}
},
"date": {
"date1": 1,
"date2": 2
},
"request_id": "2121111"
}
11.好了,到这完结撒花
5.总结
总结这个过程中可能会遇到bug
1.Q:app离线消息,一会收到一会又收不到了,厂商服务已经配置,而且已经获取到token
A:这个是遇到最多的bug,这个也不算是bug,unipush的推送消息默认是静默通知,各大厂商对这种消息默认是属于营销类的消息,一天上限2条,如何破解,自己去看文档
https://docs.getui.com/getui/mobile/vendor/qps/
2.目前遇到最多的也就是第一个问题,其余问题网上搜一下,都有答案,或者多看看官方文档,角标的问题,自己看文档,一个参数搞定
https://uniapp.dcloud.net.cn/uniCloud/uni-cloud-push/api.html