uniapp 的unipush现在有一个2.0需要上云,我在做个人推送的时候需要在服务端进行获取信息并进行消息推送(默认已经开通了unipush)。因此在这边做一个记录以及遇到的坑。
但是在服务端直接调用api接口似乎需要在个推平台上进行申请什么的,挺麻烦的还有收费,就没太了解。
因此在这边采用了另一种方式进行用户个推,即在自己的服务端(我这边是django写的)来调用云函数api,在云函数里面进行unipush。
首先需要在uniapp上创建unicloud,具体详情见大佬所写uniapp 如何创建及使用unicloud云开发-CSDN博客
在创建完unicloud后需要自己创建一个云函数,然后代码如下:
'use strict';
const uniPush = uniCloud.getPushManager({appId:"__UNI__XXXXXXX"})
exports.main = async (event, context) => {
//event为客户端上传的参数
console.log('event : ', event)
await uniPush.sendMessage({
"push_clientid":"XXXXXXXXXXXXXXXXXXXXXXX",
"title":"TEST",
"content":"云对象推送内容",
"payload":{
"text":"云端推送IFP消息",
"id":123
}
})
//返回数据给客户端
return 'yes'
};
其中appid是你的uniapp的appid,这里的push_clientid是软件在设备上的cid,可在开通unipush后在app.vue中的onLaunch写下如下代码查询:
uni.getPushClientId({
success:res=>{
console.log(res);
console.log(res.cid);
}
})
在云函数上传成功后可在云函数控制台里面找到这个函数,点击详情并进行云函数url化
python的django调用api,这边不用做多介绍,我直接用apifox进行接口调试
在调试后会报”mongo_cell_decision_not_found“错误,在查找相关资料后发现说,扩展库依赖3张opendb表:opendb-tempdata,opendb-device,uni-id-device。公测版uniCloud,执行扩展库会自动创建。如果你使用的是uniCloud正式版需要自己创建这3张表。
因此需要返回uniclod中的database创建opendb-tempdata,opendb-device,uni-id-device三个表并上传部署。
之后再进行apifox的接口调试便成功了,可在App.vue里面调用uni.onPushMessage来进行查看
uni.onPushMessage(res=>{
console.log(res)
})
可见收到了推送消息,如果想在消息栏提醒,可用uni.createPushMessage进行提醒,这边便不做过多阐述