wx.getUserProfile 解决微信小程序 button open-type="getUserInfo" 无法获取用户昵称、头像

发布时间: 2021-04-10 14:48:19 作者: 大象笔记

微信小程序获取用户信息接口重大调整

参考微信官方的声明:

https://developers.weixin.qq.com/community/develop/doc/000cacfa20ce88df04cb468bc52801?token=838205899&lang=zh_CN

2021年4月13日后发布的小程序新版本,无法通过wx.getUserInfo与 button open-type="getUserInfo" 获取用户个人信息(头像、昵称、性别与地区)

打印日志,看到信息都是空:

avatarUrl: "https://thirdwx.qlogo.cn/mmopen/vi_32/POgEwh4mIHO4nibH0KlMECNjjGxQUq24ZEaGT4poC6icRiccVGKSyXwibcPq4BWmiaIGuG1icwxaQX6grC9VemZoJ8rg/132"
city: ""
country: ""
gender: 0
language: ""
nickName: "微信用户"
province: ""

头像是个写死的灰色头像。

同时,即便前端获取加密数据,后台解密出来的也是这种空数据。

本想趁 4月13日前感觉更新一版,就不修改这个接口了,但是发现开发工具已经严格执行这个规范了。 我也不想冒险,反正早晚都要改,干脆一步修改到位得了。

虽然官方说只会影响4-13之后发布的小程序,但是我感觉早晚会一刀切,全部禁止:

不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息

微信小程序为何要做这个调整

很多开发者在打开小程序时就通过组件方式唤起getUserInfo弹窗,如果用户点击拒绝,无法使用小程序,这种做法打断了用户正常使用小程序的流程,同时也不利于小程序获取新用户。

我觉得,这个理由说不通。毕竟用新的替代接口 wx.getUserProfile 也是这个交互效果。 而且更加体验不好,因为每次调用 wx.getUserProfile 都要弹窗授权。比 getUserInfo 只需要授权一次体验差多了。

其实,核心点就是,微信觉得用户昵称和头像是腾讯的私有财产,你们不要随便用。

兼容方案

参考:

https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserProfile.html

注意:

wx.getUserProfile 的接口调用次数限制

wx.getUserProfile 属于被限频接口,小程序一次生命周期最多调用2次。

所以,对于我的报名人数统计小程序,为了不影响用户体验,最好是将用户头像、昵称缓存到本地。 下次使用时,优先从缓存读取数据。

详情参考:

https://developers.weixin.qq.com/miniprogram/dev/framework/performance/api-frequency.html

缓存数据的更新问题

个人中心,增加“更新头像昵称”功能。

我是一名山东烟台的开发者,联系作者