评论

03.getUserInfo和getUserProfile 对比

getUserInfo和getUserProfile

最近动态

wx.getUserProFile() 在2.16.0成功回调有iv、encryptedData,具体看这里https://developers.weixin.qq.com/community/develop/doc/000c04d0490118d8a6ebf675a56c00

调整背景

很多开发者在打开小程序时就通过组件方式唤起 getUserInfo 弹窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户。详情可以点击官方调整链接(https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801)

调整前后API功能的对比

能力检测

两个前提条件:

  • 1.开发者工具版本不低于 1.05.2103022
  • 2.基础库版本不低于 2.10.4

代码片段: https://developers.weixin.qq.com/s/odMs3wmX7Ko3

测试过程

  • step1: 在开发工具设置清除全部缓存
  • step2: 点击 getUserInfo 按钮,会弹出用户授权,允许后会得到这些信息,见截图

  • step3: 在终端输入下面代码,也可以获取上面截图数据(今天还不到截止时间,还能获取完整的用户头像和昵称)
wx.getUserInfo({
    complete: (res) => {
        console.log(res)
    }
})
  • step4: 点击 getUserProfile 按钮,会弹出用户授权,允许后会得到这些信息,见截图(只有用户昵称和头像信息)

  • step5: 通用在终端输入下面代码,获取不到任何信息,符合`若开发者需要获取用户的个人信息(头像、昵称、性别与地区),可以通过wx.getUserProfile接口进行获取,且开发者每次通过该接口获取用户个人信息均需用户确认`
wx.getUserProfile({
    complete: (res) => {
        console.log(res)
    }
})
  • step6: 可以重复点击 getUserInfo 按钮和 getUserProfile 按钮进行测试。

功能对比讲解

1.4月13日前未发布的,wx.getUserInfo 能力

wx.getUserInfo(Object object) 会返回 encryptedData、signature、rawData,通过将返回的数据传递给服务器,服务端能解析出用户的身份标识,即 unionId(unionId 获取机制:https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/union-id.html)

【对我们业务来说】

从 wx.getUserInfo 就是要两样东西:unionId和用户信息(头像和昵称)。

但从 2021年2月23日起,可以通过 wx.login 接口获取的登录凭证可直接换取 unionID,可以替代一部分wx.getUserInfo 的功能了。

2.新增 getUserProfile 能力

wx.getUserProfile 能获取到头像和昵称,可以替代 wx.getUserInfo 的另外一部分功能。

3.小结

从这里是不是可以得出,wx.login + wx.getUserProfile 基础可以替代之前的 4月13日前未发布的,wx.getUserInfo 能力。其实不然,如果真是这样的,官方是不是没必要这样搞,咱们接着看。

4.wx.getUserInfo 和 wx.getUserProfile 区别

  • 1.功能上是 wx.getUserInfo  不在返回用户授权的头像昵称,只返回匿名信息,但 wx.getUserProfile 会返回用户授权的头像昵称。
  • 2.wx.getUserInfo 授权成功后,当下次调用时,可以直接获取授权成功返回数据,不需要每次都需要用户确认,但 wx.getUserProfile 每次都需要用户确认允许后才能拿到用户信息
  • 3.对于业务来说,可以通过 wx.getUserProfile 获取用户信息和昵称后,要存在自己服务器,不能像之前那样每次都通过 wx.getUserInfo 方式获取,否则体验会比较差

疑问

  • 1.4月13日后发布的新版本小程序,如果用户未更新到新版本,此时调用 wx.getUserInfo 会不会返回用户授权的头像昵称(如果不确定,业务可能需要兼容处理)
  • 2.4月13日后发布的新版本小程序,用户更新到新版本,调用 wx.getUserInfo 返回匿名的头像昵称支持服务器解密吗?


常见问题汇总

1.wx.canIUse 判断getUserProfile结果是false,可以通过直接判断 wx.getUserProfile 即可,类似问题可以查看官方知识库https://developers.weixin.qq.com/community/develop/doc/000cac40cf0eb8d3e429647c351c09?_at=1614912876047

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

27 个评论

  • 笨鱼
    笨鱼
    2021-06-11

    原来服务端可以通过解密 encryptedData 获取会员信息,现在全是 “微信用户”,那要再一个API来更新/保存会员信息吗?无其它办法一次获取?

    2021-06-11
    赞同
    回复
  • 耿霄
    耿霄
    2021-04-15

    https://mp.weixin.qq.com/s/LPqRBxLOUg3TNYp6wKckVA 最新公告

    2021-04-15
    赞同
    回复
  • 耿霄
    耿霄
    2021-04-13

    官方最新通知(2021-04-13)

    周知:小程序将暂缓调整公告 “小程序登录、用户信息相关接口调整说明” 中关于 4月13日 后发布的小程序将回收 wx.getUserInfo 接口可获取用户个人信息能力。回收时间近期内会确定并通知,建议开发者提前适配 wx.getUserInfo 接口回收场景。


    补充说明:

    1、建议开发者尽快使用 wx.getUserProfile 来获取用户信息,2.10.4 以下基础库不支持使用 wx.getUserProfile 获取用户信息,采用 wx.getUserInfo 原有获取流程不受影响,兼容方式参考示例代码:https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html

    2、正式版小程序在 wx.getUserInfo 回收前可正常使用,回收后将返回匿名信息

    3、wx.getSetting 获取的 scope.userInfo 按照调用 wx.getUserInfo 返回,返回匿名数据 scope.userInfo 也为 true

    4、wx.getUserProfile返回的iv、encryptedData 解密获取不到 unionId,请使用 wx.login 获取 unionId

    5、wx.getUserProfile 基础库2.16.0以下,无法获取 iv 和 encryptedData,近期会灰度覆盖到 2.10.4


    小程序登录、用户信息相关接口调整说明:https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801


    2021-04-13
    赞同
    回复
  • 2021-04-13

    请问下,原来的接口是用getUserInfo拿到的iv,encryptedData这个解密没问题,改用getUserProfile拿到的iv,encryptedData解密失败了是什么原因呢?

    2021-04-13
    赞同
    回复 4
  • The Flash
    The Flash
    2021-04-08

    感谢楼主的分享,现在我遇到了一个问题,使用getUserProfile后获取到用户的授权,我将返回的userInfo存储到app.js的全局变量globalData中,刷新小程序后,我在app.js中调用getsetting判断用户是否进行了授权,如果授权了,则在globalData中重新写入userInfo,后续小程序的操作都以app.js中的globaldata是否存在userInfo而判断当前用户是否授权了,现在问题出现在已授权用户重新进入小程序后app.js中getsetting函数判断出的结果显示用户并没有授权,这是怎么回事呢。求求大家帮忙指点一下,谢谢


    2021-04-08
    赞同
    回复 3
    • 耿霄
      耿霄
      2021-04-09
      先被用 getSetting,用后端标志位来控制,第一次获取头像后传递给后端,下次进来获取即可
      2021-04-09
      回复
    • The Flash
      The Flash
      2021-04-11回复耿霄
      谢谢楼主的回复,您是说第一次授权后,将userInfo存储在实现授权功能的js文件中的data里吗,然后app.js通过判断该js文件data域中存储的userinfo得出用户之前是否授权从而修改globalData吗。刚接触微信小程序,不太了解,还请楼主指点一二
      2021-04-11
      回复
    • 耿霄
      耿霄
      2021-04-11
      1.如果对头像是强依赖,授权拿到头像后,存到后端数据库
      2.如果对头像是弱依赖,那就存到本地缓存里(弊端是删除小程序后,缓存就没有了,冷启动缓存数据还有)
      2021-04-11
      回复
  • 月读
    月读
    2021-04-08

    wx.getUserProfile返回的encryptedData解密后没有openid的信息了,这是正确的吗?

    2021-04-08
    赞同
    回复 1
    • 耿霄
      耿霄
      2021-04-08
      这个我也不清楚,不过可以看看这个


      如果让我们重新设计用户登陆模块,会怎么设计呢?



      如果是我的话,我会这样设计:
      1.用 wx.login 获取 openId(unionId),这个过程是静默的,不需要用户参与,这个能满足市场大多数应用的需求
      2.对于社交分享类的应用,可以进入首页后,用户点击首页可点击区域时,申请用户头像信息(申请成功后保存到后端)
      3.在我的页面在增加个用户头像更新能力即可
      4.对于分享无法获取实时头像的问题,可以在用户点击分享时,先申请获取用户最新头像,然后在进行分享


      这段时间社区很多人吐槽,其实我们还是要看这些改到背后的事情1.对用户隐私要求越来越严,权限细分越来越细,我觉得是好事
      2.我们要抛出历史包袱去想用户授权,别被历史包袱所束缚
      3.getUserInfo 的能力可以通过 wx.login 和 wx.getUserProfile 来实现,都是只需要用户操作一次,唯一的弊端是 wx.getUserProfile 每次都需要用户触发才能拿到最新头像
      4.我觉得没有几个应用对头像的更新频次比微信本身要高,所以也不用在纠结了头像是否为最新的了,只需要提供用户具有更新头像的能力即可
      2021-04-08
      1
      回复
  • 加菲的潮流款耳钉
    加菲的潮流款耳钉
    2021-04-07

    为什么使用getUserProfile获取不到城市和省份信息呢?

    2021-04-07
    赞同
    回复 3
    • 耿霄
      耿霄
      2021-04-07
      你是怎么用的,我刚看了,有返回
      2021-04-07
      回复
    • 㱿
      㱿
      2021-04-07
      我也有
      2021-04-07
      回复
    • yaime
      yaime
      2021-04-07
      我这没有,发现是在2.15.0基础库、2.10和2.11都没有
      2021-04-07
      回复
  • 耿霄
    耿霄
    2021-04-02

    周知:getUserInfo 开发版 & 体验版 已对齐 getUserInfo 匿名表现,正式版将于 4月13日 正式对齐 getUserInfo 匿名表现。请开发者使用 getUserProfile 获取用户信息。

    小程序登录、用户信息相关接口调整说明:https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801


    2021-04-02
    赞同
    回复
  • 黑猫警长_null
    黑猫警长_null
    2021-04-02

    现在调用的 也可以拿到那些加密数据 不只可以拿到用户信息

    2021-04-02
    赞同
    回复 3
    • 耿霄
      耿霄
      2021-04-02
      是这样的,具体看这里 https://developers.weixin.qq.com/community/develop/doc/000c04d0490118d8a6ebf675a56c00
      2021-04-02
      回复
    • Believer
      Believer
      2021-04-06
      但是小程序版本库必须要2.6.x,微信版本要8.0.x。而且我遇到通过getUserProfile拿到的iv和encryptedData给原接口解密是失败的,还没问后端咋回事儿┑( ̄Д  ̄)┍
      2021-04-06
      1
      回复
    • 2021-04-13回复Believer
      你这个解密失败,找到是什么原因了码?我这边也是,做兼容处理的时候,如果是通过getUserProfile拿到的iv,encryptedData解密失败了
      2021-04-13
      回复
  • 哈哈哈哈
    哈哈哈哈
    2021-03-26

    wx.getUserProfile不会返回加密数据吗

    2021-03-26
    赞同
    回复 3
    • 耿霄
      耿霄
      2021-03-26
      不会的,只返回头像信息
      2021-03-26
      回复
    • 哈哈哈哈
      哈哈哈哈
      2021-03-27回复耿霄
      那修改之后使用的判断e.detail.errMsg === getUserInfo:ok会有问题吗
      2021-03-27
      回复
    • 2021-04-22
      测试 2.16.0 开始也会有 encryptedData,之前的版本没有
      2021-04-22
      回复

正在加载...

登录 后发表内容