小程序订阅消息踩坑记

前言

2019-10-12,微信官方发布《小程序模板消息能力调整通知》,很多开发者被迫加班,纷纷试坑订阅消息。
订阅消息官方API:https://developers.weixin.qq....
官方文档相当简约,只能实践出真知了。

1.客户端微信版本问题

(1)iOS客户端7.0.6版本及其之后的版本支持订阅1-3条模板消息,iOS客户端7.0.5版本及其之前的版本仅支持订阅一条模板消息;
(2)Android客户端7.0.7版本及其之后的版本支持订阅1-3条模板消息,Android客户端7.0.6版本及其之前的版本仅支持订阅一条模板消息.
小程序订阅消息踩坑记_第1张图片

(3)看看一条与多条模板消息效果图的差异
小程序订阅消息踩坑记_第2张图片

高版本支持一次最多订阅三条消息。所以,注意考虑低版本情况仅支持订阅一条模板消息的情况,需要将最重要的模板消息放在第一位~

2.基础库版本问题

基础库2.8.2版本才开始支持订阅消息,用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。

订阅消息发布的官方通告:https://developers.weixin.qq....
订阅消息官方API:https://developers.weixin.qq....
小程序订阅消息踩坑记_第3张图片

其中的巨巨巨巨巨坑,基础库2.8.2才支持wx.requestSubscribeMessage,官方回复:“别担心!!!覆盖率很高!马上覆盖率会更高!”

天真的我轻信了官方的话,没有特地找低版本的测试机进行测试,毕竟我认为即使不支持wx.requestSubscribeMessage,在fail回调里处理一下就好。
项目上线了,马上出大问题了!在低版本中wx.requestSubscribeMessage直接报错了,没错,直接报错了,并没有进入fail回调!!并没有进入fail回调!!并没有进入fail回调!!

const tmpIds = {
  payError: ['模板消息id48415ered515', '模板消息idffref545451', '模板消息id484151521515'],
  paySuccess: ['模板消息id**********', '模板消息id**********'],
}
function subscribe(msgType) {
  console.log('订阅消息类型', msgType)
  return new Promise((resolve, reject) => {
    wx.requestSubscribeMessage({
      tmplIds: tmpIds[msgType],
      success (res) {
        if(res.errMsg == 'requestSubscribeMessage:ok') {
          console.log('用户允许订阅消息', msgType, tmpIds[msgType])
          resolve(1)
        } else {
          console.log('微信wx.requestSubscribeMessage接口报错或者用户不订阅消息')
          resolve(0)
        }
      },
      fail (err) {
        console.log('requestSubscribeMessage error --------------', err)
        resolve(0)
      },
      complete (r) {
        console.log('requestSubscribeMessage complete --------------', r)
        resolve(0)
      },
    })
  })
}
export default subscribe

我又把wx.requestSubscribeMessage写在promise中,resolve()后程序才可以下一步执行,报错直接导致没有resolve,程序无法执行下一步,没有页面跳转!天真的我以为就算低版本不支持wx.requestSubscribeMessage,也会进入fail的回调,能成功的resolve(),然而低版本遇到wx.requestSubscribeMessage,是直接报错,并不会进入fail的回调。

OK!Fine!得马上补坑啊!加上 try catch异常捕捉,处理报错!

function subscribe(msgType) {
  console.log('订阅消息类型', msgType)
  return new Promise((resolve, reject) => {
    try {
      wx.requestSubscribeMessage({
        tmplIds: tmpIds[msgType],
        success (res) {
          if(res.errMsg == 'requestSubscribeMessage:ok') {
            console.log('用户允许订阅消息', msgType, tmpIds[msgType])
            resolve(1)
          } else {
            console.log('微信wx.requestSubscribeMessage接口报错或者用户不订阅消息')
            resolve(0)
          }
        },
        fail (err) {
          console.log('requestSubscribeMessage error --------------', err)
          resolve(0)
        },
        complete (r) {
          console.log('requestSubscribeMessage complete --------------', r)
          resolve(0)
        },
      })
    } catch (error) {
      console.log('微信版本过低,不支持订阅消息!')
      resolve(0)
    }
  })
}

3.订阅消息参数长度限制

官方文档: https://developers.weixin.qq....

这是一个小坑,后台按照模板消息的思维惯性去开发订阅消息,没有仔细阅读订阅消息文档,OK!Fine!报错了!查了一通,发现是参数的长度超过了限制,再一看,官方限制20个字符以内!!!20个字符,够写啥!是时候发挥语文的功底,极尽最大可能缩减文字。
小程序订阅消息踩坑记_第4张图片

// 2020-01-17 待续

你可能感兴趣的