评论

[拆弹时刻]4月13日前更新wx.getUserInfo和getUserProfile授权获取问题的解决方案

IDE工具和体验版已经不支持老的方法,如何在4月13日前做好兼容切换

论坛里有不少人疑惑新版的getUserProfile是不是已经上,同时发现开发环境中原有的老方法已经不支持了,这里我为大家集中解决下疑惑~

1、线上是否已经不支持wx.getUserInfo老方法了?

支持!目前,根据官方文档说明:在4月13日前发布的,线上环境2.16.0基础库以下已经不支持老版方法。(4月8日更新,怀疑官方已提前发布)

本人今天4月6日10点半线上支持老方法,但是4月8日发布2.16.0以下低版本已经去掉弹窗授权了。请大家尽快更新发布新版方法

2、哪些环境已经是新方法了?

开发环境(包括但不限于IDE工具,真机调试),微信后台提供的体验版环境,且已不支持老办法。

3、新老两种方法是否并行?

线上环境:目前并行(4月13日前),但getUserProfile新方法 只在2.10.4以上版本支持。

开发环境和体验版:不并行,不支持左右横跳哈。

4、如何解决兼容性适配?

上才艺啦,呸,上代码。

先来看下原本代码的授权逻辑

//老的逻辑
wx.getSetting({
    async success(res) {
        console.log(res.authSetting);
        //判断小程序用户是否授权
        if (res.authSetting['scope.userInfo']) {
            //已授权  
        } else {
            //未授权情况
        }
    }
})

之前主要通过wx.getSetting的方法来判断,而现在重大的改变是老方法getUserInfo不再弹窗,就算改成getUserProfile弹窗授权,新方法中getSetting中scope.userInfo 这个值并没有返回(这里跟文档有些出入,不知道官方后面会不会修正)

同时,这里需要做兼容判断,把获取到内容存在数据库中,避免反复弹窗骚扰用户。

//根据官方文档 做了一些修改
Page({
  data: {
    userInfo: {},
    hasUserInfo: false,
    canIUseGetUserProfile: false,
  },
  onLoad() {
    //先请求自定义接口,获取上次存的useInfo
    wx.request({
      url: 'test.api', //仅为示例,并非真实的接口地址
      data: {},
      success (res) {
        console.log(res.useInfo)
        //判断之前是否已获取并存储过用户信息
        if(res.useInfo){
            
        }else {
            //这里不要使用 wx.canIuse来判断,避免一些适配问题
            if (wx.getUserProfile) {  //直接使用官方推荐的方法
              this.setData({
                canIUseGetUserProfile: true
              })
            }
        }
      }
    })
  },
  getUserProfile(e) {
    // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
    // 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
    wx.getUserProfile({
      desc: '需要你的信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
      success: (res) => {
        //这里需要将获取的 res.userInfo 存起来,你可以存在数据库,也可以存在local storage里
        //wx.request...请求接口
        this.setData({
          userInfo: res.userInfo,
          hasUserInfo: true
        })
      }
    })
  },
  getUserInfo(e) {
    // 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
    this.setData({
      userInfo: e.detail.userInfo,
      hasUserInfo: true
    })
  },
})
<!-- html部分 --->
<block wx:if="{{!hasUserInfo}}">
  <button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button>
  <button wx:else open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
</block>
<block wx:else>
  <image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
  <text class="userinfo-nickname">{{userInfo.nickName}}</text>
</block>

5、如何更新用户信息?

首先,目前的规则如果不弹窗,肯定是无法每次拿到用户的最新信息,为了避免每次弹窗请求授权骚扰用户,所以最好根据产品规划,定期获取用户的信息(看心情)。

6、官方接口文档

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

觉得有用,请点个赞哦,让我继续分享更有动力~

最后一次编辑于  2021-04-08  
点赞 14
收藏
评论

19 个评论

  • WANGHANMING
    WANGHANMING
    2021-04-08

    我们现在的生产环境已经出现了灰色头像+微信用户的记录了,是在3月低上线的版本,怎么会这样的

    2021-04-08
    赞同
    回复 2
    • 游戏人生
      游戏人生
      2021-04-08
      线上环境目前还是支持老方法的,只有可能是版本过低,你先排查下 是100%不行吗? 还是部分机型部分基础库?
      2021-04-08
      回复
    • 游戏人生
      游戏人生
      2021-04-08
      截至4月8日。。。2.16.0以下版本似乎全部失效,不支持了(官方可能提前上了)。。。尽快切换吧
      2021-04-08
      回复
  • 我是太阳
    我是太阳
    2021-04-07

    请问getUserProfile api 不使用按钮掉起也没问题吧 官网好像没有写必须按钮掉起对吧

    2021-04-07
    赞同
    回复 2
    • 游戏人生
      游戏人生
      2021-04-08
      没有写,但是!官方文档里的demo 是按照button上的,同时判断也没用wx.canIuse,所以建议按照官方文档的写法,因为你不知道最后官方会不会有其他的改动
      2021-04-08
      回复
    • 白小明
      白小明
      2021-04-15
      用户仍然需要主动点击按钮才能触发此接口的弹窗,直接调用会报错 :
      2021-04-15
      回复
  • 愿者上钩。
    愿者上钩。
    2021-04-07

    请问那我可以理解为wx.login可以无条件进入就调用么

    2021-04-07
    赞同
    回复 1
    • 游戏人生
      游戏人生
      2021-04-08
      是,wx.login 是用来额外兑换获取 unionId的,但是不能获取nickName等用户信息
      2021-04-08
      回复
  • 蓝雨
    蓝雨
    2021-04-07

    大概就是现在不依赖getsetting的返回值,而通过后端接口来判断用户之前是否有过授权行为咯?

    2021-04-07
    赞同
    回复 2
    • 游戏人生
      游戏人生
      2021-04-07
      2021-04-07
      回复
    • 游戏人生
      游戏人生
      2021-04-07回复游戏人生
      而且发布上线的时候,要写兼容性方案
      2021-04-07
      回复
  • veteran
    veteran
    2021-04-06

    但是低于2.16.0的sdk用getuserinfo已经获取不到正常用户信息了,返回的是匿名信息

    2021-04-06
    赞同
    回复 7
    • 游戏人生
      游戏人生
      2021-04-06
      线上吗? 目前我们(4月6日早上11点)发布的小程序未收到反馈。 刚刚看了下8.0.0未更新的微信打开没有问题~
      2021-04-06
      回复
    • Zoe
      Zoe
      2021-04-06
      开发工具上就已经获取不到正常信息了
      2021-04-06
      回复
    • 我是太阳
      我是太阳
      2021-04-07
      我也获取不到了getuserinfo  包括按钮点击的也获取不到了  要修改代码吗
      2021-04-07
      回复
    • 游戏人生
      游戏人生
      2021-04-07回复Zoe
      文章里有写,工具上已经不支持了,但是线上是可以的
      2021-04-07
      回复
    • 游戏人生
      游戏人生
      2021-04-07回复我是太阳
      线上吗?
      2021-04-07
      回复
    查看更多(2)
  • brave
    brave
    2021-04-06

    点赞,评论,举报

    2021-04-06
    赞同
    回复
  • 青寒
    青寒
    2021-04-06

    干货,点赞,收藏。

    2021-04-06
    赞同
    回复
  • 四哥派
    四哥派
    发表于小程序端
    2021-04-06

    举报

    2021-04-06
    赞同
    回复 3
    • 游戏人生
      游戏人生
      2021-04-06
      兄dei,有事好好说,请把刀放下
      2021-04-06
      回复
    • iwen
      iwen
      2021-04-07
      只有基础库2.16.0才能返回iv、encryptedData等信息,之前的版本怎么搞
      2021-04-07
      回复
    • 游戏人生
      游戏人生
      2021-04-07回复iwen
      做判断,里面有的,2.10.0以上基础库 就已经支持新方法了
      2021-04-07
      回复
  • 子不语
    子不语
    2021-04-06

    字多不看

    2021-04-06
    赞同
    回复 1
    • 是 Yang-
      是 Yang-
      2021-04-08
      讨厌厌
      2021-04-08
      回复

正在加载...

登录 后发表内容