前言
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版本及其之前的版本仅支持订阅一条模板消息.
高版本支持一次最多订阅三条消息。所以,注意考虑低版本情况仅支持订阅一条模板消息的情况,需要将最重要的模板消息放在第一位~
2.基础库版本问题
基础库2.8.2版本才开始支持订阅消息,用户发生点击行为或者发起支付回调后,才可以调起订阅消息界面。
订阅消息发布的官方通告:https://developers.weixin.qq....
订阅消息官方API:https://developers.weixin.qq....
其中的巨巨巨巨巨坑,基础库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个字符,够写啥!是时候发挥语文的功底,极尽最大可能缩减文字。
// 2020-01-17 待续