requestSubscribeMessage:fail can only be invoked by user TAP gesture 微信小程序调起订阅消息失败

【微信小程序】在使用 wx.requestSubscribeMessage 请求订阅信息时出现的异常 。

使用场景如下 代码清单 1-1所示:

///代码清单 
///如常用的一个表单登录接口
new Promise(function(resolve, reject) {
    
    
    return login().then((res) => {
    
    
      ... 
      ///在这里调用了 requestSubscribeMessage 支请求订阅读
       success :(res)=>{
    
    
 			console.log("订阅消息 成功 "+res);
         },
        fail :(errMessage) =>{
    
     
          console.log("订阅消息 失败  "+errMessage);
        },
        complete:(errMsg)=>{
    
    
          console.log("订阅消息 完成 "+errMsg);
          that.toHome();
        }
    }).catch((err) => {
    
    
      ... 
    })
  });
}

在上述代码清单中是 实际开发中的一个登录接口,表单提交,在高版本微信是没有问题的,但是在低版本无法调用订阅消息,报错提示

requestSubscribeMessage:fail can only be invoked by user TAP gesture

导致无法唤起订阅消息

低版本订阅消息api必须在点击事件中触发,需将form提交改为bindtap提交,一般可做成显示一个弹框友好的提示用户,然后再让用户点击按钮去手动触发订阅,在登录网络请求完成后,弹框提示用户效果如下图所示:
在这里插入图片描述

   let that = this ;
   wx.showModal({
    
    
          title: '温馨提示',
          content: '为更好的促进您与买家的交流,服务号需要在您的书籍成交时向您发送消息',
          confirmText:"同意",
          cancelText:"拒绝",
          success: function (res) {
    
    
              if (res.confirm) {
    
    
                 //调用订阅消息
                  console.log('用户点击确定');
                  //调用订阅
                  that.requestSubscribe();
              } else if (res.cancel) {
    
    
                  console.log('用户点击取消');
                  ///显示第二个弹说明一下
                  wx.showModal({
    
    
                    title: '温馨提示',
                    content: '拒绝后您将无法获取实时的与卖家(买家)的交易消息',
                    confirmText:"知道了",
                    showCancel:false,
                    success: function (res) {
    
    
                      ///点击知道了的后续操作 
                      ///如跳转首页面 
                    }
                });
              }
          }
      });
///发起消息订阅
function requestSubscribe(){
    
    
	wx.requestSubscribeMessage({
    
    
        tmplIds: ['... '],
        success :(res)=>{
    
    
          console.log("订阅消息 成功 "+res);
         },
        fail :(errCode,errMessage) =>{
    
     
          console.log("订阅消息 失败 "+errCode+" message "+errMessage);
        },
        complete:(errMsg)=>{
    
    
          console.log("订阅消息 完成 "+errMsg);
          that.toHome();
        }
    
      });
}

猜你喜欢

转载自blog.csdn.net/zl18603543572/article/details/108089977
今日推荐