主要流程
-
获取设置 1)是否打开了消息推送开关? 是:继续; 否:进行处理,结束流程 wx.getSetting({
? ?withSubscriptions: true,
? ?success(res) {
? ? ? ?if(res.subscriptionSetting.mainSwitch) {
? ? ? ? ? ?// 打开了
? ? ? }
? ? ? ?else {
? ? ? ? ? ?// 没打开
? ? ? }
? }
}) 2)是否提供的模板消息id都曾勾选了“保持以上选项,不再询问”? 是:不弹出询问,结束流程; 否:继续 // 判断是否已勾选保持选项:对应模板消息id是否在subscriptionSetting.itemSettings里
wx.getSetting({
? ?withSubscriptions: true,
? ?success(res) {
? ? ? ?// 逐个判断
? ? ? ?templIds.forEach(id => {
? ? ? ? ? ?if(res.subscriptionSetting.itemSettings[id] === undefined) {
? ? ? ? ? ? ? ?// 不符合条件
? ? ? ? ? }
? ? ? })
? }
}) -
弹出订阅消息询问 只显示未保持授权的消息,用户选择后返回给后端,结束流程 if(condition) {
? ?wx.requestSubscribeMessage({
? ? ? ?templIds,
? ? ? ?success(res) {
? ? ? ? ? ?...
? ? ? }
? })
}
完整代码:
subscribeMessage(templIds) {
? ?return new Promise((resolve, reject) => {
? ? ? ?wx.getSetting({
? ? ? ? ? ?withSubscriptions: true,
? ? ? ? ? ?success(res) {
? ? ? ? ? ? ? ?let subsStgs = res.subscriptionsSetting
? ? ? ? ? ? ? ?if(subsStgs.mainSwitch) {
? ? ? ? ? ? ? ? ? ?let allIn = true
? ? ? ? ? ? ? ? ? ?templIds.forEach(id => {
? ? ? ? ? ? ? ? ? ? ? ?// 若部分消息没有保持以上选择,仍会弹出询问
? ? ? ? ? ? ? ? ? ? ? ?if(subsStgs.itemSettings[id] === undefined) {
? ? ? ? ? ? ? ? ? ? ? ? ? ?allIn = false
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? })
? ? ? ? ? ? ? ? ? ?// 用户同意总是保持保持以上选择,不再询问
? ? ? ? ? ? ? ? ? ?if(subsStgs.itemSettings && allIn) {
? ? ? ? ? ? ? ? ? ? ? ?let selection = subsStgs.itemSettings[templIds[0]]
? ? ? ? ? ? ? ? ? ? ? ?switch(selection) {
? ? ? ? ? ? ? ? ? ? ? ? ? ?case 'accept':
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?console.log("always accept");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break
? ? ? ? ? ? ? ? ? ? ? ? ? ?case 'reject':
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?console.log("always reject");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break
? ? ? ? ? ? ? ? ? ? ? ? ? ?case 'ban':
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?console.log("already banned");
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?break
? ? ? ? ? ? ? ? ? ? ? ? ? ?default:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?console.log("unknown reason")
? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? ?resolve(subsStgs.itemSettings)
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ?else { // 用户没有点击‘总是保持以上选择,不在询问’
? ? ? ? ? ? ? ? ? ? ? ?wx.requestSubscribeMessage({
? ? ? ? ? ? ? ? ? ? ? ? ? ?tmplIds: templIds,
? ? ? ? ? ? ? ? ? ? ? ? ? ?success(res) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?console.log("订阅成功:", res)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?resolve(res)
? ? ? ? ? ? ? ? ? ? ? ? ? },
? ? ? ? ? ? ? ? ? ? ? ? ? ?fail(err) {
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?console.log("订阅失败:", err)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?reject(err)
? ? ? ? ? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? ? ? ? ? })
? ? ? ? ? ? ? ? ? }
? ? ? ? ? ? ? }
? ? ? ? ? ? ? ?else {
? ? ? ? ? ? ? ? ? ?// 用户没有开启消息推送
? ? ? ? ? ? ? ? ? ?console.log("用户没有开启消息推送")
? ? ? ? ? ? ? ? ? ?resolve({"mainSwitch": "off"})
? ? ? ? ? ? ? }
? ? ? ? ? },
? ? ? ? ? ?fail(err) {
? ? ? ? ? ? ? ?reject(err)
? ? ? ? ? }
? ? ? })
? })
}
注意事项
-
最好进行真机调试,开发者工具没有“保持以上选项,不再询问” -
该功能只能在点击事件里调用,或支付成功的回调函数里调用 -
直接调用wx.requestSubscribeMessage无效,本人情况,不知道原因 -
若调用该功能出现错误,如模板消息id数目大于3,则无法进行接下来的操作。若为点击触发,则对应按钮或元素点击没反应
|