一、云函数
const uniPush = uniCloud.getPushManager({
appId: "__UNI__ABCDED" //自己的appid
})
exports.main = async (event) => {
let obj = JSON.parse(event.body)
const res = await uniPush.sendMessage({
"push_clientid": obj.clientid, // 设备id,支持多个以数组的形式指定多个设备,如["cid-1","cid-2"],数组长度不大于1000
"title": obj.title, // 标题
"content": obj.content, // 内容
"payload": obj.payload, // 数据
"options": obj.options,//其他参数
"force_notification": true, // 服务端推送 需要加这一句
"request_id": obj.request_id ,//请求唯一标识号,10-32位之间;如果request_id重复,会导致消息丢失
})
};
二、接收消息并跳转(写在app.vue页面onLaunch里面)
//#ifdef APP-PLUS
uni.onPushMessage((res)=>{
if (res.type === "receive") {
// 创建通知栏消息
plus.push.createMessage(res.data.content, res.data.payload, {
title: res.data.title,
sound: "system",
cover: false
})
} else {
const msgType = res.data.payload.msgType
const id = res.data.payload.id
if(msgType == 1){
uni.navigateTo({
url: `/pages/XX?id=${id}`
})
}
}
})
//#endif
三、上传设备id给后端
//#ifdef APP-PLUS
// uni-app客户端获取push客户端标记
uni.getPushClientId({
success: (res) => {
var push_clientid = res.cid
console.log('客户端推送标识:',push_clientid)
uni.request({
url:"这里是后端url",
data:{
"cid":push_clientid
},
method:'post', //get、post、delete
header:{
"Content-Type": "application/json",
"token":token,
},
success: (res) => { //如果访问接口成功就会进入success
console.log(res)
},
fail: (res) => {
console.log(res)
}
})
},
fail(err) {
console.log(err)
}
})
//#endif
四、开启
五、厂商推送设置
开发者中心
六、云函数配制路径
七、推送测试方式一:
{
"clientid": ["设备ID"],
"title": "WORK",
"content": "您的xx日程还有xx分钟就要开始了,请提前做好准备。",
"payload": {
"msgType": 2,
"id": 1922
},
"options": {
"HW": {
"/message/android/category": "WORK"//注:WORK是华为消息分类栏目类型,如果没有申请时可以不设置,如果申请后一定要加,否则离线时无法接收消息
},
"XM": {"channel": "Default"}//小米
}
}
注意:华为消息分类类型文档中心
八、推送测试方式二:
8.1 透传内容
{"title":"任务提醒22","content":"任务内容8","payload":{"msgType":2,"id":1922}}
8.2 intent类型时的值:
intent:#Intent;action=android.intent.action.oppopush;launchFlags=0x14000000;component=我是包名/io.dcloud.PandoraEntry;S.UP-OL-SU=true;S.title=任务提醒标题;S.content=任务提醒内容;S.payload={"msgType":2,"id":1922};end
8.3 注意
测试小米时要选定时任务,否则无法成功(定时任务执行一次后则没有问题了)。