微信小程序消息订阅 长期订阅 一次授权 多次接收 发送微信服务通知消息
这里讲长期订阅! 长期订阅! 长期订阅!
需求描述:
– 根据用户不同标签(租户、业主、维修师傅、居委会成员)一键向人员统一发送消息通知;
例如:小区6栋6层以上停水一天,这个消息就需要向住户(租户业主)提前发送停水通知,
向维修人员发送维修通知
整体思路及需求:
需要按键调用在按键的方法里在指定也可,但必须是由按键进入!!!确认自己开发的小程序的主体是否拥有长期订阅的权限;可参照下图:
(图片来自:微信开发社区:小程序模板消息能力调整通知)在微信小程序后台配置订阅模版;没有合适的可在社区申请,具体这次不讲;用户唯一信息记录 openid(微信用户唯一标识);调起用户授权,使用户授权;后台同学推送消息👌
代码分享
👍记得点赞哦 😄
👇大佬请看👇
存储openid,确定接收人员。
通过wx.login()获取用户信息(静默获取,无需授权),再返回的success中有code代码,通过官方的解析接口获得openid, 置换完档参照:(https://developers./miniprogram/dev/api-backend/open-api/login/auth.code2Session.html)
注:code只有5分钟的有效时间
通过wx.getSetting获取用户是否给了订阅消息的权限(授权接收消息)
wx.getSetting({withSubscriptions : true, // 获取订阅的授权信息 总开关res.subscriptionsSetting.mainSwitch,// 里边还有可根据需求继续查看,//不会可打印一步一步看(对应的是你模板的id)例:模板id:"accept" // (这个是:以授权模板消息订阅,可随时接收消息)`
调起授权界面(手动关闭或选择取消后此方法直接调用会走 fail 逻辑)不能直接调起
wx.requestSubscribeMessage({tmplIds, // 模板id 数组类型success: res => {授权成功逻辑},fail: err => {授权失败的逻辑,用户单击取消也在这},complete: () => {无论成功失败}})
注:在用户选择取消或者通过小程序设置关闭通知,无法再调起授权界面处理 此时调用会在fail打印 requestSubscribeMessage:fail can only be invoked by user TAP gesture. 大概意思是请手动打开 wx.getSetting()里返回的状态消息也是false 但是再通过wx.requestSubscribeMessage()是调不动的,所以就得想起他的方式引导用户打开。
解决requestSubscribeMessage:fail can only be invoked by user TAP gesture.通过引导用户使其打开授权。
wx.openSetting({success: res => {console.log(res)}})
个人代码分享
方法名(){let tmplIds = this.tmplIds // tmplId:【模板id】wx.getSetting({withSubscriptions : true,success(res) {var itemSettings = res.subscriptionsSetting.mainSwitchif (itemSettings) {console.log('已授权')return}else{wx.requestSubscribeMessage({tmplIds,success: res => {tmplIds.forEach(item => {if (res[item] === 'reject') {wx.showToast({title: '此次操作会导致您接收不到通知',icon: 'none',duration: 2000,})}})},fail: err => {uni.showModal({// uniapp框架title: '请务必授权订阅消息',content: '您没有授权消息通知,是否进行授权',success: res => {if (res.confirm) {wx.openSetting({success: res => {console.log(res)}})} else if (res.cancel) {wx.showToast({title: '此次操作会导致您接收不到通知',icon: 'none',duration: 2000,})}},fail: () => {},complete: () => {}});},}) }},fail:err => {console.log(err.errMsg)},})}
都看👓完了,就👍1️⃣👇吧