如何解决小程序打开授权报错openSetting:fail can only be invoked by user TAP gesture

要解决这个问题,你需要在页面上为 openSetting 接口添加一个点击事件。根据微信小程序的文档,openSetting 接口只能通过用户点击行为(如 tap 事件)来触发。以下是一个简单的示例代码:

<!-- index.wxml -->  
<view>  
  <button bindtap="openSetting">打开授权设置</button>  
</view>  
// index.js  
Page({  
  openSetting: function () {  
    wx.openSetting({  
      success: function (res) {  
        console.log('授权设置成功', res);  
      },  
      fail: function (err) {  
        console.log('授权设置失败', err);  
      }  
    });  
  }  
}); 

在这个示例中,当用户点击按钮时,会触发 openSetting 方法,从而打开授权设置界面。这种方式符合微信小程序的交互规范,可以避免报错。

由于wx.showModal方法里也能合理调用wx.openSetting方法,但也报了同样的错误,原因也是没有使用正确的交互方式导致的

要解决这个问题,你需要在页面上为这两个接口添加一个点击事件。例如,你可以在页面上添加一个按钮,当用户点击该按钮时,调用 wx.showModal 接口,并在模态框中显示一个授权设置按钮,当用户点击授权设置按钮时,再调用 wx.openSetting 接口。以下是一个简单的示例代码:

<!-- index.wxml -->  
<view>  
  <button bindtap="showModal">打开授权设置</button>  
</view>  
// index.js  
Page({  
  showModal: function () {  
    wx.showModal({  
      title: '授权设置',  
      content: '请授权',  
      success: function (res) {  
        if (res.confirm) {  
          wx.openSetting({  
            success: function (res) {  
              console.log('授权成功', res);  
            },  
            fail: function (err) {  
              console.log('授权失败', err);  
            }  
          });  
        } else {  
          console.log('授权失败');  
        }  
      },  
      fail: function (err) {  
        console.log('授权失败', err);  
      }  
    });  
  }  
}); 

 在这个示例中,当用户点击按钮时,会触发 showModal 方法,从而打开授权设置界面。当用户点击授权设置按钮时,会触发 wx.openSetting 接口。这种方式符合微信小程序的交互规范,可以避免报错

当然以上的交互规范到后面可能腾讯官方又会作出调整,仅做参考,极具时效性。

 

posted @ 2023-10-11 17:19  木人子韦一日尘  阅读(932)  评论(0编辑  收藏  举报