低版本只能一次订阅一个模板消息,订阅多个模板会报错,下面代码为了兼容不同版本基础库和客户端(一次订阅一条模板消息还是多条模板消息)
subscribeMessage(tmplIds, desc){
console.log('-------订阅消息subscribeMessage------')
try{
const sysInfo = wx.getSystemInfoSync()
if (!sysInfo) {
throw new ServiceError({
msg: '[getSystemInfoSync]无返回'
})
}
const { system, SDKVersion, version } = sysInfo
const sysVersion = system.split(" ")
const verArr = version.split('.')
for(let i = 0; i < verArr.length; i++){
if(verArr[i].length<2) verArr[i] = "0" + verArr[i]
}
let IOSVer = "070006"
let AndroidVer = "070007"
const ver = verArr.join('')
const sdkversion = SDKVersion.replace(/\./g,'')
// 基础库低于2.4.4 不拉起订阅消息
if(sdkversion < 244) return
// IOS和Android系统微信客户端版本判断
if ((sysVersion[0] === 'iOS' && parseInt(ver, 10) < parseInt(IOSVer, 10)) || (sysVersion[0] === 'Android' && parseInt(ver, 10) < parseInt(AndroidVer, 10))) {
wx.requestSubscribeMessage({
tmplIds: tmplIds.slice(0,1),
complete(subscribeRes) {
return subscribeRes
}
})
} else {
wx.requestSubscribeMessage({
tmplIds: tmplIds.slice(0,3),
complete(subscribeRes) {
return subscribeRes
}
})
}
}catch(err){
return err
}
}
注意事项:
1.wx.requestSubscribeMessage()函数在异步函数的then()里面调用失败
代码(调用失败,不弹起订阅消息框,complete回调打印报错提示:失败只能由用户点击手势调用):
<view @tap="subscribeMessage">测试订阅消息</view>
---------
subscribeMessage(){
this.promiseFunc().then(res=>{
wx.requestSubscribeMessage({
tmplIds: ['NgVRHh1qSVoikJ_RJ6Hc1Txres7BNcF3o3-sVKcBu0M'],
success (res) {
console.log('requestSubscribeMessage-success:')
},
complete (res) {
console.log('requestSubscribeMessage-complete:', res)
}
})
})
}