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

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

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

    例如:小区6栋6层以上停水一天,这个消息就需要向住户(租户业主)提前发送停水通知,
    向维修人员发送维修通知

  • 整体思路及需求:

  1. 需要按键调用在按键的方法里在指定也可,但必须是由按键进入!!!
  2. 确认自己开发的小程序的主体是否拥有长期订阅的权限;可参照下图:
    (图片来自:微信开发社区:小程序模板消息能力调整通知在这里插入图片描述
  3. 在微信小程序后台配置订阅模版;没有合适的可在社区申请,具体这次不讲;
  4. 用户唯一信息记录 openid(微信用户唯一标识);
  5. 调起用户授权,使用户授权;
  6. 后台同学推送消息
  7. 👌

代码分享

👍记得点赞哦 😄

👇大佬请看👇

  • 存储openid,确定接收人员。
    通过wx.login()获取用户信息(静默获取,无需授权),再返回的success中有code代码,通过官方的解析接口获得openid, 置换完档参照:(https://developers.weixin.qq.com/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.mainSwitch
                 if (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️⃣👇吧

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐