UniPush是DCloud联合个推公司推出的集成型统一推送服务,内建了苹果、华为、小米、OPPO、VIVO、魅族、谷歌FCM等手机厂商的系统级推送和个推等第三方推送。
推送的准备
- 1.CID 设备标识
// 最简单的推送把cid给到后端,后端通过cid来推送
const { clientid = '' } = plus.push.getClientInfo() || {} // 获取cid
- 2.alias 别名 给cid绑定一个别名(在个推服务器上)
// 别名推送后端不需要保存cid 前端打上别名后 后端通过别名进行推送 比如 用户ID 推送的时候只需要给相应的ID使用别名推送
ios
const GtSdk:any = plus.ios.importClass('GeTuiSdk')
// 为该设备绑定别名
GtSdk.bindAliasandSequenceNum(alias, alias)
Android
const PushManager:any = plus.android.importClass('com.igexin.sdk.PushManager')
const context:any = plus.android.runtimeMainActivity().getContext()
const Instance:any = PushManager.getInstance()
// 为该设备绑定别名
Instance.bindAlias(context, alias)
- 3.tag 把用户(cid)进行分组 (也是在个推服务器上)
// 后端通过标签进行推送 比如我们需要推送所有男性用户 首先要对用户打上标签(男) 后端只需要给个推服务器发送推送指令男 有效减少服务器压力
// uniPush 暂不支持前端打标签 (可由后端来打标签)
# 推送的接受
一般是可以写到App.vue文件里面
//消息的监听
plus.push.addEventListener(
'receive',
function (msg: any = {}) {
const isAndroid = plus.os.name === 'Android'
console.log(msg, !isAndroid)
if (!isAndroid) {
// 如果是IOS
const payload = msg.payload
// 【APP离线】收到消息,但没有提醒(发生在一次收到多个离线消息时,只有一个有提醒,但其他的没有提醒)
// 【APP在线】收到消息,不会触发系统消息,需要创建本地消息,但不能重复创建。必须加msg.type验证去除死循环
if (msg.aps == null && msg.type === 'receive') {
const messageTitle = payload.messageTitle || ''
const messageContent = payload.messageContent || ''
// 创建本地消息,发送的本地消息也会被receive方法接收到,但没有type属性,且aps是null
plus.push.createMessage(messageContent, JSON.stringify(payload), {
title: messageTitle
})
}
} else {
let payload:any = {}
console.log(typeof msg.payload === 'object', typeof msg.payload)
if (typeof msg.payload === 'object') {
payload = msg.payload || {}
} else {
payload = JSON.parse(msg.payload) || {}
}
console.log(payload)
const messageTitle = payload.messageTitle || ''
const messageContent = payload.messageContent || ''
plus.push.createMessage(messageContent, JSON.stringify(payload), {
title: messageTitle
})
}
console.log(msg)
},
false
)
// 消息的点击事件
plus.push.addEventListener(
'click',
function (msg: any = {}) {
const isAndroid = plus.os.name === 'Android'
if (!isAndroid) {
// 如果是IOS
let payload
if (msg.type === 'click') {
// APP离线点击包含click属性,这时payload是JSON对象
payload = msg.payload
} else {
// APP在线,收到消息不会包含type属性,这时的payload是JSON字符串,需要转为JSON对象
if (typeof msg.payload === 'object') {
payload = msg.payload || {}
} else {
payload = JSON.parse(msg.payload) || {}
}
}
// 点击后业务逻辑的处理
this.messageClick(payload)
} else {
// 如果是Android,收到playload均是是JSON字符串,需要转为JSON对象
let payload:any = {}
if (typeof msg.payload === 'object') {
payload = msg.payload || {}
} else {
payload = JSON.parse(msg.payload) || {}
}
// 点击后业务逻辑的处理
this.messageClick(payload)
}
},
false
)
如果想离线推送需APP上架市场 申请厂商推送 把相应参数填写到Dcloud后台
1 个评论
要回复文章请先登录或注册
想去做开发 (作者)