首先通过 wx.getSetting 获取小程序设置相关信息。官方文档
wx.getSetting功能描述
获取用户的当前设置。返回值中只会出现小程序已经向用户请求过的权限
SubscriptionsSetting属性描述
itemSettings 只返回用户勾选过订阅面板中的“总是保持以上选择,不再询问”的订阅消息
/**
* @description: 检测订阅消息是否开启,并授权
* @date 2023/06/01
* @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)
})
})
}
引导用户,手动引导用户去设置页开启
toOpenSetting() {
uni.openSetting({
success: (res) => {
console.log("openSetting的回调数据:", res);
this.guidSubscribeMessageAuthAfter();
},
});
},
guidSubscribeMessageAuthAfter() {
//引导用户 开启订阅消息 之后,「openSetting」 接口暂时不会返回,用户手动设置后的状态,所以采用「getSetting」接口重新进行查询
wx.getSetting({
withSubscriptions: true,
success: res => {
let {
authSetting = {},
subscriptionsSetting: { mainSwitch = false, itemSettings = {} } = {}
} = res;
if (
(authSetting['scope.subscribeMessage'] || mainSwitch) &&
itemSettings[TmplIds] === 'accept'
) {
this.submitClock();
// console.log('用户手动开启同意了,订阅消息');
} else {
that.$util.Tips(
{
title: "您没有同意授权订阅消息,订阅失败",
icon: "warning",
})
}
}
});
},