小程序一次性订阅消息实现和注意事项(个人笔记)
2022-04-28 本文已影响0人
kevision
export const subscription = (tmplIds) => {
return new Promise((resolve, reject) => {
wx.getSetting({
withSubscriptions: true,
success(res) {
console.log("订阅消息", res)
if(!res.subscriptionsSetting.mainSwitch) { // 关闭订阅消息主按钮
return wx.showModal({
title: '提示',
content: '您已关闭订阅消息通知,请点击“确认”按钮在设置中打开订阅通知。',
success: function (res) {
if (res.confirm) {
wx.openSetting({
success(res) {
}
});
}
},
});
} else { // 开放订阅消息主按钮
wx.requestSubscribeMessage({
tmplIds, // 需要订阅的消息模板的id的集合,一次调用最多可订阅3条消息
success (res) {
console.log("授权", res)
resolve()
},
fail() {
resolve()
}
})
}
}
})
})
}
注意事项:
1.用户点击确定或者取消,但不勾选‘总是保持以上选择,不再询问’,下一次授权会再弹窗(用户授权允许一次,才会收到一次消息);
2.用户勾选了‘总是保持以上选择,不再询问’后不会再弹窗(依然走授权,只是不弹窗,保持之前的选择);
3.用户勾选了‘总是保持以上选择,不再询问’后才能获取到每一项的授权状态;
4.但是勾选了‘总是保持以上选择,不再询问’后,就不会再次弹出了,res.subscriptionsSetting.itemSettings会返回之前的授权结果;
5.所以暂时不能实现在多个授权中每次只弹出未授权的项;
6.一次调用最多可订阅3条消息,超过3条不会弹窗;
7.注意检查模板id对不对,否则也不会弹窗;
8.需要用户点击事件触发,所以需要写在绑定的点击事件里面,写在其他封装好的方法里面会报错。
如有理解错误的地方,感谢指正!
更详细的步骤,可以参考该博文:https://developers.weixin.qq.com/community/develop/article/doc/000686f1808000a566fcccefb56813