评论

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
收藏
评论

24 个评论

  • 🐠糖醋鱼
    🐠糖醋鱼
    2021-03-23

    请问PC端打开小程序后使用该接口获取用户信息目前支持了不?

    2021-03-23
    赞同
    回复 1
  • (ー_ー)
    (ー_ー)
    2021-03-23

    请问getUserProfile 有通过button的open-type的方式调用吗?类似👇这种

    <button open-type='getUserProfile' @getUserProfile="handleUserProfile">getUserProfile测试</button>

    2021-03-23
    赞同
    回复 3
    • 耿霄
      耿霄
      2021-03-23
      嗯嗯,代码片段里有
      2021-03-23
      回复
    • (ー_ー)
      (ー_ー)
      2021-03-23回复耿霄
      我在代码片段看到了,谢谢!button的文档都没有更新getUserProfile的open-type,心累..
      2021-03-23
      回复
    • 耿霄
      耿霄
      2021-03-24
      opentype 是要实现啥功能
      2021-03-24
      回复
  • 捌玖
    捌玖
    2021-03-16

    请问一下,如果想获取 encryptedData,iv  这些信息 呢,需要 把 这 两个接口wx.getUserInfo 和 wx.getUserProfile  结合起来用吗?


    2021-03-16
    赞同
    回复 6
    • 耿霄
      耿霄
      2021-03-16
      要 encryptedData,iv  这些信息,是为了获取什么数据?
      2021-03-16
      回复
    • 捌玖
      捌玖
      2021-03-16回复耿霄
      是我有个同步用户数据接口,需要传这几个参数,然后它返给我token
      2021-03-16
      回复
    • 耿霄
      耿霄
      2021-03-16回复捌玖
      如果是这样的话,wx.getUserInfo 的调整对此没影响
      2021-03-16
      回复
    • 捌玖
      捌玖
      2021-03-16回复耿霄
      就是说 我还是得 这两个结合用吧?
      2021-03-16
      回复
    • 耿霄
      耿霄
      2021-03-16回复捌玖
      结合体验太差,需要用户头像在申请比较合适
      2021-03-16
      回复
    查看更多(1)
  • 耿霄
    耿霄
    2021-03-16

    这里补充一下,getUserInfo 和 getUserProfile 的区别和应用场景必须弄清楚。

    当我们去适配的时候,要弄清楚下面几个点

    1.旧代码用 getUserInfo 是获取什么信息的?

    2.别总想着一股脑获取用户所有的权限,从大趋势看,这是不可能的,正常是按需获取,你需要什么信息就获取什么权限

    3.wx.login 可以获取 unionId,可以解决原有方式getUserInfo获取unionId的能力,并且是静默的

    4.getUserProfile 在获取用户头像信息,是需要用户触发的

    5.新的方式 wx.login + wx.getUserProfile 和旧方式 wx.getUserInfo 是一样的,唯一的差异是getUserProfile每次都需要用户授权


    2021-03-16
    赞同
    回复
  • 土豆
    土豆
    2021-03-15

    按照文档上来讲,用户使用button调用wx.getUserInfo将不再受userinfo是否授权的影响,也就是uerinfo授权会一直为true,wx.getUserProfile不会改变userinfo的授权信息。这块不知道是否可以确定是这样的

    2021-03-15
    赞同
    回复 7
    • 耿霄
      耿霄
      2021-03-15
      ,用户使用button调用wx.getUserInfo将不再受userinfo是否授权的影响,也就是uerinfo授权会一直为true。我理解不是这样。getUserInfo 是获取用户,还是需要进行授权。


      微信体系的大原则,我的理解是申请的权限需要用户接受才给。
      2021-03-15
      回复
    • 土豆
      土豆
      2021-03-15回复耿霄
      那如果两个接口都需要调用的话,会有两次弹窗询问一样的东西,,,这样的交互好傻啊
      2021-03-15
      回复
    • 耿霄
      耿霄
      2021-03-15回复土豆
      什么样的场景下,需要同时申请2个权限?
      正常情况下,按需获取,需要哪个就申请哪个
      2021-03-15
      回复
    • 土豆
      土豆
      2021-03-15回复耿霄
      微信登陆需要老版本getuserInfo的全部信息,现在用户信息只能通过getUserProfile取的话就要调两次的
      2021-03-15
      回复
    • 耿霄
      耿霄
      2021-03-15
      老版本 getuserInfo  只有是为了获取uninonid吧,除了这个还有啥
      2021-03-15
      回复
    查看更多(2)
  • 大熊
    大熊
    2021-03-11

    请问!!

    有的人 每天都喜欢改微信 昵称 头像 等等信息;;

    小程序 要 保持  最新的 头像 和昵称等信息的话,   那就要 每次都getUserProfile 授权  弹窗了 ????? 诸位觉得呢


    2021-03-11
    赞同
    回复 1
    • 大熊
      大熊
      2021-09-01回复耿霄
      有道理
      2021-09-01
      回复
  • 张从心
    张从心
    2021-03-09

    为什么我的都满足了,还是不支持呢?

    2021-03-09
    赞同
    回复 3
    • 耿霄
      耿霄
      2021-03-09
      这个是已知问题,可以先用wx.getUserProfile判断
      2021-03-09
      回复
    • Focus
      Focus
      2021-03-21
      调用场景的问题,需要在用户点击事件里调用不是在onload;可以看下wx.getUserProfile的fail是有抛错误信息的
      2021-03-21
      回复
    • Ken
      Ken
      2021-03-23
      需要把那个 wx. 去掉,改成这样:wx.canIUse('getUserProfile'),真机调试没问题,可以返回ture
      2021-03-23
      回复
  • 清晗_Tsinghan
    清晗_Tsinghan
    2021-03-08

    开发者工具版本不低于 1.05.2103022

    这个稳定版还没发布吧

    

    2021-03-08
    赞同
    回复 1
    • 耿霄
      耿霄
      2021-03-08
      刚看了一下,还没有
      2021-03-08
      回复
  • Rick
    Rick
    2021-03-05

    请问这个改动,对SSO,有影响吗

    2021-03-05
    赞同
    回复 1
    • 耿霄
      耿霄
      2021-03-05
      这个要看你们sso的登录机制,关键还是理解你们用getUseInfo获取什么能力
      2021-03-05
      回复
  • AnDrew
    AnDrew
    2021-03-05

    就想知道一件事情啊 之前老得小程序需要修改吗? 还是之后发布的小程序 需要这套逻辑

    2021-03-05
    赞同
    回复 4
    • 耿霄
      耿霄
      2021-03-05
      按照文档理解,如果老小程序永远不修改,是可以不调整的。但是不排除未来策略调整后的被动,还是尽快调整吧
      2021-03-05
      回复
    • AnDrew
      AnDrew
      2021-03-09回复耿霄
      有一个问题呢 老哥  就是说我们在4月13号之前要上一个小程序  我们使用新的逻辑  可以吗? 还是说只有过了4月13之后 才可以支持新的逻辑
      2021-03-09
      回复
    • 耿霄
      耿霄
      2021-03-09回复AnDrew
      这个我还没有验证过,我们的方案是新老逻辑都会支持。
      这就回到了我们用新老api要获取什么能力?
      如果是unionid,那么现在wx.login已经支持
      如果是头像,那么可以判断 wx.getUserProfile 是否可用,如果可用就用,不可用就改为getUserInfo
      2021-03-09
      回复
    • 捌玖
      捌玖
      2021-03-17回复耿霄
      是判断 wx.getUserProfile 这个接口能否使用,还是判断这个接口是否 授权成功了 了 呢?getUserProfile:ok
      2021-03-17
      回复

正在加载...

登录 后发表内容