之前得知获取用户头像和昵称的两个接口getUserInfo和getUserProfile被废弃了,于是我就想深入探究一下。

PS:关于这两个接口被收回的公告见《小程序用户头像昵称获取规则调整公告》

更新:最近重新开发小程序,发现小程序头像和昵称还是可以获取的,只是不是通过getUserInfo和getUserProfile,而是使用头像昵称填写能力。所以下面我对于为什么废弃getUserInfo和getUserProfile的理解是错的。

 

一直抱有一个疑问,为啥有getUserInfo和getUserProfile两个接口?经过一番查询资料后,才知道,最早先是使用getUserInfo获取用户昵称和头像的。此时开发者调用getUserInfo时,如果没有用户授权,会弹窗征求用户授权;如果已有授权,则返回用户昵称和头像。2021年4月引来一次改版,getUserInfo不再有授权流程,而是直接返回匿名信息。新增getUserProfile,调用这个函数每次都会弹窗征求获取用户的头像和昵称,开发者需要在获取完毕之后,保存在自己的服务器上。如下图所示:

srcElement 已弃用 getuserinfo已弃用_微信

看不出这个改动的意义何在,从流程上看,我认为第一版更好更方便。

 

2022年10月,微信回收getUserInfo()和getUserProfile()获取用户信息的能力。从此以后,不管是getUserInfo还是getUserProfile,都返回匿名的微信头像和昵称,但仍然可以获取openid。为此,开发社区下一大堆吐槽。

不过也可以理解,因为unionid和openid只能唯一标识当前用户在当前小程序内的身份,脱离了当前小程序范围,根据拿到的openid和unionid就无法找到具体是哪个用户了。而如果获取了用户的微信头像和昵称,其实就等于真个微信生态内的唯一标识了。这其实存在一个很大的隐患。试想,某小程序A开发者在微信朋友圈或群聊中对某个用户感兴趣,动了歪心思。他首先就会想要获取这个人的信息,于是他就在自己开发的小程序A的数据库中根据头像和昵称查找那个受害者,然后就可以实施下一步的非法行为了。

所以,废弃这获取用户昵称和头像的接口的这个改动,虽然让开发者挺烦的,但是是有必要的。

以后,我们得专门在小程序内添加一个页面来采集用户的头像和昵称了。