收藏
评论

打开小程序设置页(wx.openSetting)接口调整官方

开发者可以通过 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()}


10月10日起新提交发布的版本将会受到此调整的影响。

需要各位开发者注意,10月10日起新提交发布的小程序版本将不再支持无需用户点击即可直接调用的“打开小程序设置页”接口,请开发者尽早适配。

调整策略在基础库 2.3.0 及以上版本生效,该基础库版本对应微信客户端6.7.2版本。另外,考虑到兼容性等问题,在基础库版本 2.3.0 以下的环境中不受此策略影响。

最后一次编辑于  2018-09-12
收藏

86 个评论

  • 2018-09-13

    貌似行不通

    2018-09-13
    赞同 3
    回复 14
    • johon
      johon
      2018-09-13

      我测试了确实也是不行,提示

      VM255:1 openSetting:fail can only be invoked by user TAP gesture.


      2018-09-13
      回复
    • 2018-09-13回复johon

      和官方说的一致   点击触发(bindtap)才能调用wx.openSetting

      2018-09-13
      回复
    • johon
      johon
      2018-09-13回复

      我测试的是这种场景不行


      2018-09-13
      回复
    • 2018-09-13回复johon

      那就老老实实写个按钮点击吧,统一写个组件继续弹

      2018-09-13
      回复
    • 2018-09-13回复johon

      测试通过bindtap调用showModal    showModal回调中再调用openSetting是可以的

      2018-09-13
      回复
    查看更多(9)
  • AieyLisyh
    AieyLisyh
    2018-09-12

    openSetting接口的官方指南根本不是小游戏的,但是又说针对的是小程序、小游戏  小游戏到底改不改?本来授权按钮就够了,如果基础库有授权按钮就不需要opensetting, 基础库老的不可能有这个接口

    2018-09-12
    赞同 2
    回复
  • 金色麦田
    金色麦田
    2019-01-26

    真是脑残的设计

    2019-01-26
    赞同 1
    回复
  • 老杨
    老杨
    2018-11-27

    savehb:function(){          // 这里是 TAP

    var that = this;

    if (that.data.imageurl) {

    wx.saveImageToPhotosAlbum({

    filePath: that.data.imageurl,

    success(res) {

    app.showmsg('保存成功')

    },

    fail(res) {

    wx.getSetting({

    success(ckauth) {

    if (!ckauth.authSetting["scope.writePhotosAlbum"]){

    wx.showModal({

    title: '',

    content: '需要您的授权才能保存到相册。是否开启?',

    success:function(ret){

    if (ret.confirm) {

    wx.openSetting({

    fail:function(e){

    console.log(e);    //  openSetting:fail can only be invoked by user TAP gesture.

    }

    });

    }

    }

    })

    }


    多一层 就  失效!


    哪有先不检查 就  showModal 的。 这些原生控件 都成 没 多大用处了  

    2018-11-27
    赞同 1
    回复
  • 翰锅锅
    翰锅锅
    2018-10-10

    就多加一个authorize的判断回调都不行,我想问一下官方, 用户第一次授权我不弹窗授权窗口我直接给用户弹设置窗口??????????

    2018-10-10
    赞同 1
    回复 1
    • 翰锅锅
      翰锅锅
      2018-10-10

      官方请出来给一个推荐的解决方案ok?这样把自己解决不了的部分开发者滥用接口的问题推给其它开发者真的是很不负责

      2018-10-10
      回复
  • 小易
    小易
    2018-09-29

    switch组件 都不可以,非得是 button?

    2018-09-29
    赞同 1
    回复
  • 半寸灰
    半寸灰
    2018-09-12

    我想问下  使用

    wx.showModal


    点确定 跳到

    openSetting

    这算是点击么

    2018-09-12
    赞同 1
    回复 8
    查看更多(3)
  • tty
    tty
    2018-09-12

    云服务nice呀

    2018-09-12
    赞同 1
    回复
  • 川流不息
    川流不息
    07-22

    建议能不能把所有的权限打开啊,接口我们可以随便调用啊,你们审核严格点不行吗?发现我们频繁恶意调用你们不通过或者封号都行啊,写个小程序因为你们官方的原因越来越麻烦,让用户操作变得越来越多,体验好吗?

    07-22
    赞同
    回复
  • Sam
    Sam
    2023-03-29

    关键wx.getSetting是异步的,无法做到先前拒绝就打开设置否则就授权,而且也无法实时知道用户什么时候取消授权,

    2023-03-29
    赞同
    回复

正在加载...

登录 后发表内容