关于消息模版
消息模版分为一次性模版和永久模版,永久模版订阅一次,后续会永久推送,一次性模版订阅一次,只推送一次
实现必须订阅一次性模版
流程
代码
// 订阅消息
export const requestSubscribeMessage = (tmplId: string): Promise<boolean> => {
// wx.getSetting({
// withSubscriptions: true,
// success (res) {
// console.log(res.subscriptionsSetting)
// // res.subscriptionsSetting = {
// // mainSwitch: true, // 订阅消息总开关
// // itemSettings: { // 每一项开关
// // SYS_MSG_TYPE_INTERACTIVE: 'accept', // 小游戏系统订阅消息
// // SYS_MSG_TYPE_RANK: 'accept'
// // zun-LzcQyW-edafCVvzPkK4de2Rllr1fFpw2A_x0oXE: 'reject', // 普通一次性订阅消息
// // ke_OZC_66gZxALLcsuI7ilCJSP2OJ2vWo2ooUPpkWrw: 'ban',
// // }
// // }
// }
// })
// return false
return new Promise((resolve) => {
wx.requestSubscribeMessage({
tmplIds: [tmplId],
success: async (res) => {
console.log('订阅', res)
if (res[tmplId] === "reject") {
// 打开弹框
resolve(await openSetting())
} else {
// 接受
resolve(true)
}
},
// 未打开订阅消息授权
fail: async (err) => {
// 没有打开消息总开关
if (err.errCode === 20004) {
resolve(await openSetting())
}
// 其他错误
resolve(false)
}
})
})
}
// 打开授权消息设置
const openSetting = ():Promise<boolean> => {
return new Promise((resolve) => {
wx.showModal({
title: '授权设置',
content: '请到订阅消息设置中,打开消息接收权限~',
confirmText: '前往设置',
success: ({ confirm, cancel }) => {
if (confirm) {
wx.openSetting()
resolve(false)
} else {
resolve(false)
}
},
})
})
}
总结
如果点了拒绝,且总是保持以上选择,下一次不会弹出消息授权框,且是拒绝状态,以后就无法推送消息,需要手动调出设置界面。如果点了允许且总是保持以上选择,下一次也不会弹出订阅框,但是是允许状态,可以推送消息,所以不用额外处理