评论

05.适配 wx.getUserProfile 的一点简单想法

适配 wx.getUserProfile 的一点简单想法

先看官方的最新通知

周知:getUserInfo 开发版和体验版 已对齐 getUserInfo 匿名表现,正式版将于 4月13日 正式对齐 getUserInfo 匿名表现。

请开发者使用 getUserProfile 获取用户信息。 小程序登录、用户信息相关接口调整说明:https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801

原先的getUserInfo能力

原先的 getUserInfo 的能力,具体看这里:https://developers.weixin.qq.com/community/develop/doc/000c2424654c40bd9c960e71e5b009?highline=getUserInfo

我对 getUserInfo 的理解

我们一般开发者,会用 wx.getUserInfo 来实现 openId 和 用户信息的获取,是非常的便捷的。

并且还能通过 wx.getSetting 获取 "scope.userInfo" 判断用户用户是否已经授权。

wx.getSetting + wx.getUserInfo 能近似完美解决用户登陆授权场景

华丽的分割线

2021-02-04 官方要对小程序登录、用户信息相关接口调整说,具体链接:https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801?blockType=1

这样我们开发者会面临的用户登陆授权的调整,会比较痛,但也必须要去改,因为没办法。

怎么改呢

先不要着急去适配 getUserProfile,先要弄清楚自己的小程序用 getUserInfo 获取那些能力?实现哪些能力?

我的理解,如果是用 wx.getSetting + wx.getUserInfo 来实现获取用户的openId(unioinId) 和用户头像昵称信息的话,可以这样去调整?

wx.login 可以拿到用户的 openId,流程如下:

如果绑定了开发平台,还可以通过 wx.login 静默获取用户的 uninonId

这个过程是静默的,不需要用户参与。

然后对于需要用户头像信息的时候,在使用 wx.getUserProfile 能力即可。

小结

1.wx.login + wx.getUserProfile 能实现 wx.getUserInfo 的能力,也能满足我们的业务场景。

2.看到官方的调整,先不要着急去调整,先弄清楚要我们的业务场景使用了那些API获取那些能力

3.关于wx.getSetting 返回 "scope.userInfo" 为 undefined。我记得社区有人提问了,等官方回复就好,其实我们可以不依赖这个,原因留给你

4.用户头像更新不及时的问题,我们看看微信聊天记录,当你好友更新头像,当你不点击时,有时候展示的还是老头像,当你点击时,会显示新头像(我们何不借鉴一下,提供给用户更新的能力即可)

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

12 个评论

  • 耿霄
    耿霄
    2021-04-06

    4.又看了官方的公告,getUserProfile方法不返回用户加密信息,只返回用户昵称和头像,至于文档和开发工具为啥会返回,我也不知道。

    我建议这一次改就改彻底,用 wx.login 获取用户身份标识(openId和uninonid),用 getUserProfile 获取用户头像和昵称。这样就不用纠结为啥getUserProfile不返回加密信息或者返回了加密信息,解码失败了

    2021-04-06
    赞同
    回复 12
    • 蓝雨
      蓝雨
      2021-04-07
      我目前是2.16.0的基础库版本。调用getUserProfile有iv和encryptedData参数,然后wx.login又只有一个code参数,我真是吐了,这次更新变动对市场影响不谈,就这文档真的看了纯粹就是误导开发者。不理解微信为什么在开发和体验环境发布新版本不按照文档公告来,然后不按照来也没有新的文档公告来提示。就硬搞心态啊感觉
      2021-04-07
      回复
    • 耿霄
      耿霄
      2021-04-07回复蓝雨
      先喝口咖啡,心态别蹦了
      如果让我们重新设计用户登陆模块,会怎么设计呢?


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


      这段时间社区很多人吐槽,其实我们还是要看这些改到背后的事情1.对用户隐私要求越来越严,权限细分越来越细,我觉得是好事
      2.我们要抛出历史包袱去想用户授权,别被历史包袱所束缚
      3.getUserInfo 的能力可以通过 wx.login 和 wx.getUserProfile 来实现,都是只需要用户操作一次,唯一的弊端是 wx.getUserProfile  每次都需要用户触发才能拿到最新头像
      4.我觉得没有几个应用对头像的更新频次比微信本身要高,所以也不用在纠结了头像是否为最新的了,只需要提供用户具有更新头像的能力即可
      2021-04-07
      回复
    • 蓝雨
      蓝雨
      2021-04-08回复耿霄
      稍微清晰了,那么现在登录就不需要像以前那样传iv和encryptedData给后端去解密了,因为现在能直接拿到明文用户信息?


      登录只要通过login给出的code,然后通过后端返回的user信息判断是否授权过?
      2021-04-08
      回复
    • 耿霄
      耿霄
      2021-04-08回复蓝雨
      通过后端返回的user信息判断是否授权过?前提是我们会把用户信息告诉后端
      2021-04-08
      回复
    • 蓝雨
      蓝雨
      2021-04-08回复耿霄
      这就根据具体业务来了,多谢了老哥,清晰很多了
      2021-04-08
      回复
    查看更多(7)
  • 不语却暖心✿
    不语却暖心✿
    2021-04-06

    我靠!!!

    2021-04-06
    赞同
    回复 6
    • 耿霄
      耿霄
      2021-04-06
      是不是很厉害,哈哈
      2021-04-06
      回复
    • 玉之帝
      玉之帝
      2021-04-07回复耿霄
      考虑到开发者在低版本中有获取用户头像昵称的诉求,对于未支持getUserProfile的情况下,开发者可继续使用getUserInfo能力。老哥,看看这句话怎么破
      2021-04-07
      回复
    • 耿霄
      耿霄
      2021-04-07
      低版本不知道 getUserProfile,可以使用 getUserInfo
      2021-04-07
      回复
    • 养乐多
      养乐多
      2021-04-08回复耿霄
      我的思路和你的差不多,但开发工具中一些高于2.10.4的版本也不支持getUserProfile,如2.13.0, 2.11.3,同时getUserInfo也获取不到真实的昵称头像,真机调试也是这样,请问这种情况怎么破,不支持getUserProfile只能获取匿名信息了吗?
      2021-04-08
      回复
    • 一直在,
      一直在,
      2021-04-08回复耿霄
      低版本的用getUserInfo,高版本的用getUserProfile,官方文档中用 if (wx.getUserProfile) 来判断是否支持getUserProfile。在2.15.0和2.16.0 使用wx.getUserProfile返回的数据不相同,但是 if (wx.getUserProfile)都为true  坑爹
      2021-04-08
      回复
    查看更多(1)

正在加载...

登录 后发表内容