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

文章目录

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

    参考微信官方的声明:

    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

    注意:

    • pc 微信暂不支持wx.getUserProfile。
    • 开发工具上需要将调试基础库选择 2.16.0,才支持。否则开发工具上无法调用 wx.getUserProfile
    • 要调试不支持的情况,将基础库调到 2.10 之下。

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

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

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

    详情参考:

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

    缓存数据的更新问题

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

    关于作者 🌱

    我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊,或者关注我的个人公众号“大象工具”, 查看更多联系方式