微信小程序订阅消息莞式教程

2,623 阅读4分钟

1.小程序模板消息能力调整通知

文章地址,请戳我

原有的小程序模板消息接口将于2020年1月10日下线,请各位开发者注意及时调整接口

接口开发可参考文档:小程序订阅消息,请戳我

小程序端消息订阅接口 wx.requestSubscribeMessage

2.小程序订阅弹窗参考

subscribe-message.jpg

只要用户点击了总是以上选择,不再询问,那么后续就再也调不起此类(有不同消息推送类型)消息推送的弹窗了,就会出现两种情况,允许或者拒绝

3.消息订阅代码参考

const subscribeMessage = code => {
  if (wx.requestSubscribeMessage) {
    return new Promise((resolve, reject) => {
      wx.requestSubscribeMessage({
        tmplIds: code,
        successres => {
          let {
            errMsg,
            ...data
          } = res;
          let Array = Object.entries(data)
          let accept = Array.filter(e => e[1] == 'accept').map(item => item[0])
          let reject = Array.filter(e => e[1] == 'reject').map(item => item[0])
          let ban = Array.filter(e => e[1] == 'ban').map(item => item[0])
          if(!accept.length&&reject.length){//全部拒绝
            msg('你取消了订阅消息授权,将不会收到通知')
          }
          resolve({
            accept,
            reject,
            ban,
          })
        },
        failerr => {
          if (err.errCode == 20004) {
            authModel('你关闭了订阅消息开关,需要您重新开启')
          }
          reject(err)
        }
      })
    })
  } else {
    wx.showModal({
      title'提示',
      content'当前微信版本过低,无法使用该功能,请升级到最新微信版本后重试'
    })
  }
}

4.如果用户拒绝了,该怎样让用户开启这个订阅消息通知呢?

const authModel = val => {
  wx.showModal({
    title'提示',
    content: val,
    showCancelfalse,
    successres => {
      if (res.confirm) {
        wx.openSetting()
      }
    }
  })
}

引导用户打开设置页,手动选择单项消息推送是否开启

subscribe-message2.jpg

5.判断版本是否可以推送多条消息

//判断版本 https://blog.csdn.net/qq_25842063/article/details/79789676
const authVersion = (_ => {
  let {
    system,
    version
  } = Taro.getSystemInfoSync();
  // iOS客户端7.0.6版本、Android客户端7.0.7版本之后
  system = system.toLowerCase().indexOf('ios') > -1 ? 'iOS' : 'Android';
  return {
    system,
    version,
    subscribe: (system == 'iOS' && compareVersion(version, '7.0.6') == 1 ||
      system == 'Android' && compareVersion(version, '7.0.7') == 1) ? true : false
  }
})()

6.订阅接口相关

const subscribePost = code => {
  // console.log(authVersion)
  if (!authVersion.subscribe) { //低版本消息条数处理
    code = code.length > 1 ? code.splice(01) : code;
  }
  return post({
    url'******',
    data: {
      TemplateIds: code
    }
  })
}

7.食用教程

async handleSubscribe() {
  try {
    let res = await subscribeMessage([code])
    let $res = await subscribePost(res.accept)
    // 订阅之后逻辑catch (err) {
    err.Msg && msg(err.Msg)
  }
}

8.接口回调消息订阅(非微信支付调用消息订阅)

wx.requestSubscribeMessage API 接口指出:用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面

解决方法:防止接口Promise化,否则影响消息订阅触发。此法绕过回调,可在接口请求回调执行消息订阅。 故上述方案7存在消息订阅先执行问题,此法欠妥。方案8食用风味更佳!