首页 > 编程语言 >小程序订阅消息(服务通知)实现 wx.requestSubscribeMessage

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

时间:2023-10-10 10:11:41浏览次数:57  
标签:订阅 console log res requestSubscribeMessage 授权 弹窗 wx

 

第一步:根据官方文来,先在微信公众平台登录小程序后台配置模板,获取模板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. 授权弹窗需要用户点击才能拉起,比如直接在 onl oad 方法中是无法调起的,可以在需要拉起的地方做一个弹窗询问,引导用户点击拉起授权
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

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

标签:订阅,console,log,res,requestSubscribeMessage,授权,弹窗,wx
From: https://www.cnblogs.com/shuihanxiao/p/17753904.html

相关文章

  • 无涯教程-Meteor - 发布和订阅
    正如"Collections集合"一章中已经讨论的那样,无涯教程所有的数据都可以在客户端获得,这是一个安全问题,可以使用发布和订阅方法来处理。删除自动发布在此示例中,无涯教程将使用PlayersCollection集合以及以下数据,在能够专心于本章本身之前,无涯教程已经准备好了此系列。如果不确......
  • CF1878G wxhtzdy ORO Tree
    CF1878GwxhtzdyOROTree设\(f(x,y)\)表示树上\(x\)到\(y\)简单路径上的点权或和中\(1\)的个数。有一个性质:选取的\(z\)节点一定满足它比它左边的点(\(l\))或者右边的点(\(r\))的贡献至少要多一位,即\(f(x,l)<f(x,z)\)或\(f(y,r)<f(y,z)\),有了这个性质,问题就简单很多......
  • Python wxpython
    wxpythonwx.frame(perent,id,title,pos,size,style,name)——程序窗口控件perent——该控件的父类,一般首个frame没有父类填None。id——常用于Event事件,便于事件获取id值title——程序标题pos——程序出现的位置pos=(x,y)size——整个框架的尺寸size=(x......
  • SpringAMQP—入门案例消息发送(rabbitmq是一个存放消息队列的中转站,发布者将消息队列发
        ......
  • Adobe Creative Cloud 土耳其订阅会被定为欺诈并且取消订阅
    AdobeCreativeCloud土耳其订阅会被定为欺诈并且取消订阅这这个订阅是我9月中左右买的,用了半个月左右,一切正常,10月1号开始收到收件,当时就不可用了,所以大家不要再去购买土耳其的订阅了,切勿相信网上的土耳其当地有朋友,有当地纯原生ip不会被封,我这个账号就是在土耳其的朋友买的,并......
  • 失业良久,开始注册一个订阅号分享自己的心理历程
                ......
  • G. wxhtzdy ORO Tree
    G.wxhtzdyOROTree前提知识:lca求最近公共祖先(倍增)因为或运算越多值就越大,好像跟上一个相反,所以满足单调不降要点1:利用数组来对每个点到其祖先节点的或和进行计算(倍增)要点2:分别对左右两边进行分析到lca点,这样确保无误要点3:因为满足单调不降,所以遇到大于的节点对左边才有意义......
  • ansible-awx-ansible可视化
    1.前期准备ansible安装docker安装python3和pip3安装sudoyuminstallpython3python3-pip安装docker-compose的Python模块,有两种方式1)二进制安装[root@localhost/]#curl-L"https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname-......
  • 525_关于E5订阅用户使用OneDrive提示需要安装Microsoft Intune公司门户应用的解决办法
    这是一篇原发布于2020-06-0112:17:00得益小站的文章,备份在此处。问题现象使用OneDrive安卓、iOS客户端提示[scodetype="share"]若要将工作或学校帐户用于此应用,必须安装MicrosoftIntune公司门户应用。请点击“转到商店”继续操作。[/scode]必须下载MicrosoftIntune公司门......
  • 关于 TDengine 3.0 数据订阅,你需要知道这些
    小T导读:为了帮助应用实时获取写入时序数据库(TimeSeriesDatabase)TDengine的数据,或者以事件到达顺序处理数据,TDengine提供了类似消息队列产品的数据订阅、消费接口。这样在很多场景下,采用TDengine的时序数据处理系统就不需要再集成如Kafka一般的消息队列产品,从而简化系统设......