100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 微信小程序 消息订阅 长期订阅 一次授权 多次接收 微信服务通知

微信小程序 消息订阅 长期订阅 一次授权 多次接收 微信服务通知

时间:2024-07-09 05:18:47

相关推荐

微信小程序 消息订阅  长期订阅  一次授权 多次接收  微信服务通知

微信小程序消息订阅 长期订阅 一次授权 多次接收 发送微信服务通知消息

这里讲长期订阅! 长期订阅! 长期订阅!

需求描述:

– 根据用户不同标签(租户、业主、维修师傅、居委会成员)一键向人员统一发送消息通知;

例如:小区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️⃣👇吧

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。