微信小程序“errMsg“:“openSetting:fail can only be invoked by user TAP gesture.“

报错:

(in promise) MiniProgramError
{
     "errMsg":"openSetting:fail can only be invoked by user TAP gesture."}
Object

原因:wx.openSetting无法通过回调调用,只能主动触发

看一下官方对接口的调整

打开小程序设置页(wx.openSetting)接口调整 2018-09-12

开发者可以通过 wx.openSetting 接口来打开小程序设置界面并返回用户的设置结果。在原来的 wx.openSetting 接口中,我们允许开发者直接调用此接口,但目前我们发现有不少开发者滥用此接口,使用户在无任何操作时,不断地强行跳转至设置页,导致用户无法正常使用甚至无法退出小程序。

为保证用户获得更顺畅的小程序使用体验,避免此类滥用情况,我们对该接口进行了调整。

调整后“打开小程序设置页”将支持以下两种实现方式:

  • 方法1:使用 button 组件来使用此功能,示例代码如下:

    <button open-type="openSetting" bindopensetting="callback">打开设置页button>
    
  • 方法2:由点击行为触发wx.openSetting接口的调用,示例代码如下:

    <button bindtap="openSetting">打开设置页button>  
    openSetting() {  
    	wx.openSetting()
    }
    

    方法2已在最新版开发者工具中支持(基础库切到2.2.4及以上),开发者可以尽早适配。

**
**此次调整会对直接调用wx.openSetting接口造成影响

  • 原无需用户点击即可直接调用wx.openSetting接口的实现方式将不再支持,即将废弃的错误使用方式示例如下:

    onShow() {
             
      wx.openSetting();
    }
    

参考链接;

https://developers.weixin.qq.com/community/develop/doc/000cea2305cc5047af5733de751008

个人方案:

通过 wx.authorize获取权限

//询问用户是否保存相册到本地
...
let url = res.tempFilePath;
wx.getSetting({
      
   success: set => {
     
        if (!set.authSetting['scope.writePhotosAlbum']) {
     
            Tools.$Toast('保存失败!请开启访问手机相册权限');
            wx.authorize({
     
                scope: 'scope.writePhotosAlbum',
                success: res => {
     
                    wx.saveImageToPhotosAlbum({
     
                        filePath: url,
                        success: (res) => {
     
                            Tools.$Toast('海报已为您保本地');
                        }
                    }) 
                },
                fail: res => {
      
                    wx.showModal({
     
                    	title: '保存失败', 
                        content: '请开启访问手机相册权限',
                        success(res) {
     
                            if (res.confirm){
     
                                wx.openSetting()//  无效,报错
                            }
                        } 
                    }) 
                }
            })
        } else {
     
            wx.saveImageToPhotosAlbum({
     
                filePath: url,
                success: (res) => {
     
                    Tools.$Toast('海报已为您保本地');
                }
            })                
        }
    }
})

你可能感兴趣的:(微信小程序,小程序)