首先通过 wx.getSetting 获取小程序设置相关信息。 官网文档
wx.getSetting({
withSubscriptions: true,
success (res) {
console.log(res.authSetting)
res.authSetting = { // 用户授权信息
"scope.userInfo": true,
//...
}
res.subscriptionsSetting = {
mainSwitch: true, // 订阅消息总开关
itemSettings: { // 每一项开关
// 模板ID : 授权状态 (accept-同意、reject-拒绝、ban-封禁)
66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban',
}
}
}
})
代码封装 (严谨性可以根据自己的业务进行扩展):
/**
* @description: 检测订阅消息是否开启,并授权
* @date 2020/11/27
* @param key {String} 订阅消息模板KEY[ID], 可判断是否开启了该订阅消息授权
*/
function isOpenSubscribeToNewsAndAuth (key) {
return new Promise((re, rj) => {
wx.getSetting({
withSubscriptions: true,
success: ({subscriptionsSetting}) => {
if (!subscriptionsSetting) {
return rj(new Error('无法获取订阅消息对象,可能版本库兼容原因'))
}
if (!subscriptionsSetting.mainSwitch) {
return rj(new Error('订阅消息未打开'))
}
if (key && subscriptionsSetting.itemSettings[key] != 'accept') {
return rj(new Error(`模板消息:${key} 未开启`))
}
re(subscriptionsSetting.itemSettings)
},
fail: err => rj(err)
})
})
}
通过上面代码,再需要的地方进行业务代码编写即可。下面贴一个实现效果。
*****.wxml*****
为了更便捷的使用和及时收到订单提醒,请您开启订阅消息授权。
前往开启
*****.js*****
...
// 提交支付
submitPay: util.throttle(function () {
isOpenSubscribeToNewsAndAuth().then(() => {
requestSubscribeMessage(() => { // 订阅消息推送
// 你的业务代码
});
}, err => {
Log.error(err)
this.selectComponent('#subMegAuth').showDialog()
})
})
...
转载请注明来源,谢谢。