// 获取是否订阅
function getSetting() {
wx.getSetting({
withSubscriptions: true,
success: ({subscriptionsSetting}) => {
// 是否开启总设置
if (subscriptionsSetting.mainSwitch && subscriptionsSetting) {
//开启通知
showNotice()
}
// 是否开启具体某个通知
// 注:自有勾选‘总是保持以上选择’,才会返回以下信息
// reject 用户拒绝
// accept用户同意
// subscriptionsSetting.itemSettings['xxxx'] == 'accept'
},
fail: err => {
showNotice()
}
})
}
// 开启通知
// 如果不勾选‘总是保持以上选择’ ,下次还会弹出。
// 如果勾选了‘总是保持以上选择’,下次不会弹出,
// 如果上次是同意-那直接开启成功,如果上次取消或拒绝,那会提示用户去设置页开启。
function showNotice(msg) {
let ids = ['xxxxxxx']
// 通知弹窗不能通过api直接调用,这里可以用弹窗点击确认开启
uni.showModal({
content: '是否开启订阅消息?',
confirmText: "确认",
cancelText: '取消',
success: (res) => {
if (res.confirm) {
wx.requestSubscribeMessage({
tmplIds: ids,
success: (res) => {
let arr = [];
for (let i in res) {
if (res[i] === 'accept') {
arr.push(i)
}
}
if (arr.length >= 1) {
console.log('订阅成功')
}else {
refuse()
}
},
fail(err) {
refuse()
}
})
}
}
})
}
// 拒绝授权或设置关闭
function refuse(){
uni.showModal({
content: '检测到您没打开订阅消息权限,是否去设置打开?',
confirmText: "确认",
cancelText: '取消',
success: (res) => {
if (res.confirm) {
wx.openSetting({
withSubscriptions: true,
success: (res) => {
},
fail: (err) => {
uni.showToast({
title: '订阅消息失败',
icon: 'error',
})
}
})
}
}
})
}