想去做开发
想去做开发
  • 发布:2021-03-02 10:49
  • 更新:2021-03-02 10:51
  • 阅读:877

UniPush从0到1

分类:uni-app

掘金地址

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后台  
0 关注 分享

要回复文章请先登录注册

想去做开发

想去做开发 (作者)

https://juejin.cn/post/6934879772572909598/
2021-03-02 10:51