小程序订阅消息
效果图:
最近需要做小程序消息推送,踩坑记录,先看官方文档第一步:按小程序文档步骤,先在微信公众平台登录小程序后台配置模板,获取模板id:,这里的模板可以在公共库里面选用,也可以自己申请(自己申请审核需要时间):
第二步:获取下发权限,代码注释都写的比较清楚了,部分是为了看执行结果,用不到的可以自行删除
sendFn() {
// 这里执行后台下发消息
},
openSettingFn(_content) {
wx.showModal({
title: '提示',
content: _content,
showCancel: true,
confirmText: '去设置',
success: function (ress) {
if (ress.confirm) {
wx.openSetting({
withSubscriptions: true,
success (res) {
wx.showModal({
content: '设置页面openSetting:'+JSON.stringify(res)
})
/*
调起客户端小程序订阅消息界面,返回用户订阅消息的操作结果。当用户勾选了订阅面板中的“总是保持以上选择,不再询问”时,模板消息会被添加到用户的小程序设置页,通过 wx.getSetting 接口可获取用户对相关模板消息的订阅状态。
*/
const {
subscriptionsSetting: { mainSwitch = false, itemSettings = {} } = {}
} = res
if (mainSwitch && itemSettings && itemSettings[tmplIds] === 'accept') { // 表示去设置页开启了主开关&&模板消息
wx.showModal({
content: '您已手动开启订阅消息权限通知'
})
// 这里执行下发消息
_this.sendFn()
} else {
/*
这里失败有3种可能:
第1种:用户主开关未开启。
第2种:用户只开启了主开关。(用户之前没有勾选过订阅面板中的“总是保持以上选择,不再询问”,此时模板消息在用户的小程序设置页是没有的。)
第3种:用户开启了主开关&&模板消息未开启。
*/
wx.showModal({
content: '您未开启订阅消息权限通知'
})
}
}
})
} else {
wx.showModal({
content: '您已取消去设置订阅消息授权'
})
}
}
})
},
switchTipsFn(moIdState, name='') {
wx.showModal({
content: 'switchTipsFn'+name+moIdState
})
let _content = ''
switch (moIdState) {
case 'accept':
_content = name+'操作:用户点击了允许 '
// 这里执行下发消息时 当name == 'always'时 待接口调试 这种情况能否下发成功?
this.sendFn()
break;
case 'reject':
_content = name+'操作:用户点击了取消 '
break;
case 'ban':
_content = name+'操作:已被后台禁止 '
break;
default:
_content = name+'操作:该模板因为模板标题同名被后台过滤 '
break;
}
wx.showModal({
content: _content
})
},
isAuthorizeFn() {
const tmplIds = 'bQRb7eJrLKSZ2CcSJJ-cmemmn9pw2dpeT1EyCp4w7nU'
let _this = this
wx.showModal({
content: 'await:settingData信息:'+JSON.stringify(settingData)
})
if (wx.requestSubscribeMessage) { // 检测微信版本是否存在这种方法(wx.requestSubscribeMessage需要基础库 2.4.4以上才支持)
wx.requestSubscribeMessage({ // 拉起订阅消息弹框界面
tmplIds: [tmplIds],
success (res) {
console.log('订阅消息 请求成功 ');
wx.showModal({
content: '订阅弹框操作后的信息:'+JSON.stringify(res)
})
const _tmplIds = res[tmplIds]
_this.switchTipsFn(_tmplIds)
},
fail (err){
console.log("订阅消息 请求失败 ");
if(err.errCode == 20004) { // 20004 表示用户关闭了主开关,无法进行订阅
// 引导用户去设置页手动开启
let tips = '检测到您没有开启接受订阅消息的权限,是否去设置?'
_this.openSettingFn(tips)
} else {
wx.showModal({
content: '订阅消息 请求失败'+JSON.stringify(err)
})
}
}
})
} else { // 如果不支持,提示更新微信版本
wx.showModal({
title: '提示',
content: '请更新您的微信版本,来获取订阅消息功能',
showCancel: false
})
}
},
第三步,小程序完结,服务端下发消息。
总结:
-
勾选“总是保持以上选择,不再询问”,下发消息前还是要调wx.requestSubscribeMessage,只是不会再出现弹窗。
-
如图
-
关于不适合每次都点按钮调授权的需求,比如流程相关的,一个领导可能会同时收到多个需要处理的请求,他不可能每次都去点授权,这个时候可以考虑用公众号的模板消息(探索中…)
参考文章(可以重点看下下面的文章,写的很清晰):
小程序订阅消息(服务通知)实现 wx.requestSubscribeMessage
针对新手很容易出现理解误区的微信小程序订阅消息模块
问:小程序订阅消息用户拒绝后,如何引导用户开启?并获得用户的操作状态?
微信小程序订阅消息及遇到的种种坑解决方法(全)
写的不对的还请指正;以上引用,如有侵权,请联系删除。