收藏
评论

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

137 个评论

  • 123
    123
    2018-10-07

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

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

    2018-10-07
    赞同 5252
    回复 5
    • 敏
      2018-10-22

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

      2018-10-22
      赞同 4545
      回复
    • johon
      johon
      2018-10-25

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

      2018-10-25
      赞同 1717
      回复
    • 远
      01-07回复

      说的没毛病 。

      01-07
      赞同 44
      回复
    • 50米深蓝
      50米深蓝
      01-15

      听得进去就是见鬼了

      01-15
      赞同 33
      回复
    • Eliot Drizzle
      Eliot Drizzle
      07-06

      对 没有apple的命 非要走apple的路

      07-06
      赞同 11
      回复
    点击 登录
  • 。
    2018-10-07

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

    2018-10-07
    赞同 2222
    回复 1
    • 心源
      心源
      06-18

      求个鸡儿啊 求  神经病  东西又不是你的 是你们老板的  腾讯想怎么鸡儿该 就怎么鸡儿该 无所谓的

      06-18
      赞同
      回复
    点击 登录
  • 27
    27
    2018-09-17

    我就想说,多此俩举。


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


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


    2018-09-17
    赞同 1111
    回复
  • 网点
    网点
    2018-09-12

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

    2018-09-12
    赞同 88
    回复
  • 王小超
    王小超
    2018-11-02

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

    2018-11-02
    赞同 55
    回复
  • sed
    sed
    04-15

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

    04-15
    赞同 55
    回复 5
    • BubbleTg
      BubbleTg
      05-01

      兄弟牛逼啊

      05-01
      赞同
      回复
    • Alessa Gillespie
      Alessa Gillespie
      05-15

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

      05-15
      赞同
      回复
    • C丶xy
      C丶xy
      05-21

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

      05-21
      赞同
      回复
    • C丶xy
      C丶xy
      05-21

      我想知道你还能不能回复,哈哈

      05-21
      赞同
      回复
    • 心源
      心源
      06-18

      这个大哥我喜欢  另外 我草你 女儿 马化腾

      06-18
      赞同
      回复
    点击 登录
  • YCJ
    YCJ
    2018-09-12

    云服务不错

    2018-09-12
    赞同 44
    回复 1
    • 1KG
      1KG
      04-20

      我觉得是个垃圾

      04-20
      赞同
      回复
    点击 登录
  • z亚楠z
    z亚楠z
    2018-09-12

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


    2018-09-12
    赞同 44
    回复 18
    • 尚
      2018-09-12

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

      2018-09-12
      赞同 1010
      回复
    • 刘文凯
      刘文凯
      2018-09-12

      官方出来说一下撒

      2018-09-12
      赞同 22
      回复
    • 黄思程
      黄思程
      2018-09-12

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

      2018-09-12
      赞同 44
      回复
    • z亚楠z
      z亚楠z
      2018-09-13回复黄思程

      能详细说明一下小程序的判断机制吗?封装的一个方法,用来获取定位和判断是否授权过,然后通过这个bindtap也是可以的吗?或者能更新相应的开发者工具,用来测试是否可行

      2018-09-13
      赞同
      回复
    • 陈锐
      陈锐
      2018-09-13回复黄思程

      其实都是主动操作感觉也是麻烦~   比如在同一个页面里需要获取用户头像 昵称 和 用户定位两个操作 再多一点  比如语音  拍照  ~  怎样处理好这一系列授权逻辑 都是很费时间的 !大部分公司是没有完善的设计方案,用户拒绝授权处理方案只有开发者临时上一个!想象下用户每一步操作都要进行一次授权 太可怕

      2018-09-13
      赞同 44
      回复
    查看更多(13)
    点击 登录
  • 玉之帝
    玉之帝
    04-03

    真是神贴呀,贴一段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

    04-03
    赞同 33
    回复 2
    • 1KG
      1KG
      04-20

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

      04-20
      赞同
      回复
    • CallMeSoul
      CallMeSoul
      05-05

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

      05-05
      赞同
      回复
    点击 登录
  • 请叫我大伯
    请叫我大伯
    2018-11-28

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

    2018-11-28
    赞同 22
    回复 3
    • 卡西卡🐢
      卡西卡🐢
      2018-11-29

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

      2018-11-29
      赞同 11
      回复
    • 异想天不开
      异想天不开
      2018-12-12

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

      2018-12-12
      赞同
      回复
    • 请叫我大伯
      请叫我大伯
      03-07回复卡西卡🐢

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

      03-07
      赞同
      回复
    点击 登录