打开小程序设置页(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  (未经腾讯允许,不得转载)
收藏评论 73

73 个回答

  • 123
    123

    你们约束的不应该是开发者,而是恶意程序。

    我觉得你们就是懒 懒得审核那么多,干脆直接让开发者无从选择了。 就是所谓的不处理事请,只封住说事人的嘴

    赞同 52没有帮助
    评论 4
    复制
    2018-10-07
    • 敏

      开发者滥用此接口,使用户在无任何操作时,不断地强行跳转至设置页,导致用户无法正常使用甚至无法退出小程序。这个本质上就是恶意程序,如果开发者滥用的不是wx.openSetting,而是wx.showModal,不断地强行弹出模态对话框,那么是不是也要对wx.showModal进行限制呢?

      赞同 40没有帮助
      回复
      复制
      2018-10-22
    • johon
      johon

      按这个推理下去,嗯,以后是不是很多的接口调用,全是要靠一颗按钮来实现。。。

      赞同 17没有帮助
      回复
      复制
      2018-10-25
    • 远
      回复

      说的没毛病 。

      赞同 4没有帮助
      回复
      复制
      01-07
    • 展示更多
    评论
  • 。

    也是服了,这样的改动既不利于开发者开发,用户体验又不好,就不能全都改成获取用户信息按钮一样对应每一个授权吗?????就算你 bindtap 调用showModal回调然后调用openSetting,OK是可以 ,但是加多一个saveImage接口,saveImage.then=>showModal.then=>openSetting,这样就不行了??????什么操作????  我求你们别改了好不好???或者我求求你们把授权都改成和获取用户信息的弹框一样,行不????????

    赞同 22没有帮助
    评论 0
    复制
    2018-10-07
  • 27
    27

    我就想说,多此俩举。


    我不管你怎么设计的。我就问你,这样的东西用户用起来爽不爽。


    你以为不让直接跳转到设置页面,就完事大吉了????????


    赞同 9没有帮助
    评论 0
    复制
    2018-09-17
  • 网点
    网点

    先别说文档整的怎么样,装B的境界还是可以肯定的。

    赞同 8没有帮助
    评论 0
    复制
    2018-09-12
  • 王小超
    王小超

    官方到处挖坑,码农到处填坑;心累了

    赞同 5没有帮助
    评论 0
    复制
    2018-11-02
  • z亚楠
    z亚楠

    wx.showModal()的确认按钮可以调用wx.openSetting()吗,类似这样的


    赞同 4没有帮助
    评论 18
    复制
    2018-09-12
    • 尚

      已经到这一步了,干脆连弹窗也自定义了得了😆

      赞同 10没有帮助
      回复
      复制
      2018-09-12
    • 刘文凯
      刘文凯

      官方出来说一下撒

      赞同 2没有帮助
      回复
      复制
      2018-09-12
    • 黄思程
      黄思程

      可以,只要showModal调用是在bindtap里

      赞同 4没有帮助
      回复
      复制
      2018-09-12
    • 展示更多
    评论
  • YCJ
    YCJ

    云服务不错

    赞同 4没有帮助
    评论 1
    复制
    2018-09-12
    • 1KG
      1KG

      我觉得是个垃圾

      赞同 0没有帮助
      回复
      复制
      04-20
    评论
  • 玉之帝
    玉之帝

    真是神贴呀,贴一段idea,也总结下对微信这种设计的思考


    步骤1:页面打开立即获取是否授权,注意用onShow,而不是用onLoad

    onShow:function(){
       var that = this;
       wx.getSetting({
         success(res) {
           if (!res.authSetting['scope.address']) {
             //没有授权
             that.setData({
               not_auth: true
             })
           }else{
             //授权了
             that.setData({
               not_auth: false
             })
           }
         },
         fail(res) {
         }
       })  
     }


    步骤2:根据授权与否,使用 openSetting ,我为了更好理解,用button和view来区分

    <view class='footer'>


      <view class='system-address' bindtap='onAddAddressClick'>手动添加地址</view>
      <view class='weixin-address' bindtap="getWxAddress" wx:if="{{not_auth==false}}" >自动获取地址</view>
      <view class='weixin-address'  wx:else >
        <button open-type='openSetting'>自动获取地址</button>
      </view>
     
    </view>


    步骤3:页面打开立即获取是否授权

    选择地址

    getWxAddress:function(e){
        wx.chooseAddress({
          success: function (res) {
            console.log(res);
          }
        })
    }


    步骤4:为了以防万一,用户手动添加地址,跳转自己做的页面

    onAddAddressClick:function(){
        wx.navigateTo({
          url: '/pages/tabs/me/addaddress/addaddress'
        })
    }


    思考:

    1. 获取收货地址的方式与获取头像的方式不起来,安全隐私性更高,自然牺牲掉一些便捷性

    2. 为何要做步骤4,10亿微信用户绑定地址的有多少人?老实点做个手动添加的,不算丢人

    3. 小程序官方的回复,有点缺乏专业性,比方附件1,随着版本升级,已经失效啦,但是小白用户还是多的啊,看到以后不断摸索发现是条死路

    4. 微信是有点过于装逼了,特别是龙哥,不知道这样吐槽他会不会生气封我号



    附件1

    赞同 3没有帮助
    评论 2
    复制
    04-03
    • 1KG
      1KG

      不是过于装逼,是很装逼。

      赞同 0没有帮助
      回复
      复制
      04-20
    • CallMeSoul
      CallMeSoul

      发现 showModal promise resolve 出来再调用openSetting就不行了,一定要在回调是只是openSetting,好tmd坑

      赞同 0没有帮助
      回复
      复制
      05-05
    评论
  • sed
    sed

    你们啊,这种行为跟老子直接屌马化腾一个意思,操你妈马化腾

    赞同 2没有帮助
    评论 4
    复制
    04-15
    • BubbleTg
      BubbleTg

      兄弟牛逼啊

      赞同 0没有帮助
      回复
      复制
      05-01
    • Alessa Gillespie
      Alessa Gillespie

      大哥牛逼,在马化腾底盘盘他,佩服佩服

      赞同 0没有帮助
      回复
      复制
      05-15
    • C丶xy
      C丶xy

      我想知道你还能不能回复我们

      赞同 0没有帮助
      回复
      复制
      星期二 17:07
    • 展示更多
    评论
  • 请叫我大伯
    请叫我大伯

    我在点击事件里 打开设置,授权位置信息后,返回界面,在 getSetting的success的回调方法里,调起getLocation,还是获取不到数据,但是刷新界面就可以获取到,什么情况??

    赞同 2没有帮助
    评论 3
    复制
    2018-11-28
    • 卡西卡🐢
      卡西卡🐢

      我也遇到同样的问题,你有解决么?

      赞同 1没有帮助
      回复
      复制
      2018-11-29
    • 异想天不开
      异想天不开

      我也遇到了相同的情况,而且我还在onShow里面判断是否授权,如果授权调getLocation,页面还是没反应,刷新才行

      赞同 0没有帮助
      回复
      复制
      2018-12-12
    • 请叫我大伯
      请叫我大伯
      回复卡西卡🐢

      我返回去之后判断标识,然后刷新了界面,下拉刷下那个api

      赞同 0没有帮助
      回复
      复制
      03-07
    评论