小程序订阅消息(服务通知)实现 wx.requestSubscribeMessage

先上效果图:

最近做了一个小程序的服务通知,虽然做好了,但过程还是比较坎坷,记录下,希望能给需要的伙伴一个参考

先上文档:小程序服务通知订阅消息开发文档

第一步:根据官方文来,先在微信公众平台登录小程序后台配置模板,获取模板id:,这块的模版可以在公共模版库里选。也可以新申请,但是需要3-7天才能出审核结果。

下面是模版生成的效果图。
在这里插入图片描述

第二步,获取下发权限
在获取下发权限之前,需要先获取小程序code和订阅消息的模板id给服务端,以便后台人员进行服务端配置

// 这里是获取下发权限地方,根据官方文档,可以根据  wx.getSetting() 的 withSubscriptions   这个参数获取用户是否打开订阅消息总开关。后面我们需要获取用户是否同意总是同意消息推送。所以这里要给它设置为true 。
wx.getSetting({
      withSubscriptions: true,   //  这里设置为true,下面才会返回mainSwitch
      success: function(res){   
      
        // 调起授权界面弹窗
        if (res.subscriptionsSetting.mainSwitch) {  // 用户打开了订阅消息总开关
          if (res.subscriptionsSetting.itemSettings != null) {   // 用户同意总是保持是否推送消息的选择, 这里表示以后不会再拉起推送消息的授权
            let moIdState = res.subscriptionsSetting.itemSettings[tmplIds];  // 用户同意的消息模板id
            if(moIdState === 'accept'){   
              console.log('接受了消息推送');

            }else if(moIdState === 'reject'){
              console.log("拒绝消息推送");

            }else if(moIdState === 'ban'){
              console.log("已被后台封禁");

            }
          }else {
          	// 当用户没有点击 ’总是保持以上选择,不再询问‘  按钮。那每次执到这都会拉起授权弹窗
            wx.showModal({
              title: '提示',
              content:'请授权开通服务通知',
              showCancel: true,
              success: function (ress) {
                if (ress.confirm) {  
                  wx.requestSubscribeMessage({   // 调起消息订阅界面
                    tmplIds: [tmplIds],
                    success (res) { 
                      console.log('订阅消息 成功 ');
                      console.log(res);
                    },
                    fail (er){
                      console.log("订阅消息 失败 ");
                      console.log(er);
                    }
                  })     
                        
                }
              }
            })
          }

        }else {
          console.log('订阅消息未开启')
        }      
      },
      fail: function(error){
        console.log(error);
      },
    })

到这里小程序端的代码就完了,第三步就是服务端要做的事情了。

这里说下需要注意的点:
1.配置模板获取模板id,是在小程序后台,而不是关联的公众号后台!!!

2. 授权弹窗需要用户点击才能拉起,比如直接在 onload 方法中是无法调起的,可以在需要拉起的地方做一个弹窗询问,引导用户点击拉起授权
3.授权弹窗上的,总是保持以上选择,不再询问 这个选项,只有真机上有,模拟器上只有是否同意消息推送弹窗。建议测试直接上真机
4.后端 subscribeMessage.send 接口的请求参数 page , 配置路径为 pages/index/index
5.在小程序的社区发现有小伙伴说,真机测试不敢点 总是询问 的按钮。怕点了,后面就再也没办法拉起授权测试了。其实开发人员一般都是用自己的微信测试的,微信开发工具上的清缓存菜单里面就有清除授权的选项,直接在开发工具里清掉,就相当于清掉了手机的授权。重新编译预览就能看见效果。 还是放一下图吧:

在这里插入图片描述

在加上一个需要特别特别重要的问题:授权弹窗上的总是保持以上选择,意思是不再调起授权弹窗。但是下次推送消息还是需要用户点击授权的。这块订阅消息的逻辑是矛盾的。因为点了总是,那么授权弹窗是无法再次调起的,那用户也就没有授权入口。又怎么授权呢。官方解释可以在小程序右上角设置里面打开权限。但up主亲测,当后台推送消息拒绝时,小程序设置订阅消息开启无效。依然接收不到。
可以参考这个:https://developers.weixin.qq.com/community/develop/doc/00002cae8c0c90766f8ab3a0451000?highLine=43101%2520%25E6%2580%25BB%25E6%2598%25AF
https://developers.weixin.qq.com/community/develop/article/doc/0006ac060e4e80183bc9654b856013(
微信官方解释:https://developers.weixin.qq.com/community/develop/doc/00008a8a7d8310b6bf4975b635a401


2021.12.29 更新
上面遗留的问题,点击总是之后,无法进行再次订阅,评论区有童鞋提出了解决方案。
这里更新下:
点击按钮直接调wx.requestSubscribeMessage即可,不做用户是否打开订阅消息的判断,这样在点击总是...之后,虽然没有询问框,依然可以订阅(已亲测,在此感谢小糖同学~😆)

wx.requestSubscribeMessage({
   tmplIds: tempId,
   success: res => {
     console.log('调起成功');
     if (res[tempId[0]] === 'accept') {
         console.log('允许')
     }
     if (res[tempId[0]] === 'reject') {
       console.log('拒绝')
     }
   },
   fail: err => {
     if (err.errCode == 20004) {
       console.log('关闭小程序主开关')
     } else {
       console.log('订阅失败')
     }
   }
 });
wx.requestSubscribeMessage是一个用于订阅消息的API方法。在小程序中,通过调用该方法可以向用户发起订阅消息的请求。通常情况下,我们会在用户进行相关操作时调用该方法,以获取用户对于订阅消息的授权情况。 具体步骤如下: 1. 首先,在订阅消息的请求中,我们需要传入一个tmplIds参数,该参数是一个数组,用于指定需要订阅的模板消息的模板ID。例如:wx.requestSubscribeMessage({ tmplIds: ['tmplId1', 'tmplId2'], success(res) { // 处理订阅结果 } }); 2. 接下来,当用户点击【允许】进行授权时,success回调函数会被触发。我们可以通过判断res对象中对应tmplId的值是否为'accept'来确定用户是否授权了该条订阅消息。 3. 如果用户点击了“总是保持以上选择,不再询问”,则下次调用wx.requestSubscribeMessage时不会弹窗,而是保持之前的选择。如果需要修改选择,用户需要在小程序设置中进行修改。 需要注意的是,为了判断用户是否点击了“总是保持以上选择,不再询问”,我们可以通过调用wx.getSetting方法,传入参数withSubscriptions:true,来获取用户的订阅消息订阅状态。如果res.authSetting['scope.subscribeMessage']为true,则表示用户已经点击了“总是保持以上选择,不再询问”。 总之,wx.requestSubscribeMessage小程序中用于订阅消息的API方法,通过调用该方法可以获取用户对于订阅消息的授权情况,并进行相应的处理。
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值