前言
4月13日后发布的小程序新版本,无法通过wx.getUserInfo与<button open-type="getUserInfo"/>获取用户个人信息(头像、昵称、性别与地区),将直接获取匿名数据(包括userInfo与encryptedData中的用户个人信息。
解决办法
1. 使用wx.getUserProfile
更换wx.getUserInfo
官方示例
2. 本人因为小程序使用太多wx.getUserInfo
,更换起来太麻烦了,所以我选择使用wx.getUserProfile
重写wx.getUserInfo
,让wx.getUserInfo
既能拥有最新API的功能,还能兼容老的功能。
放到app.js
最前面
if (wx.getUserProfile) {/*** isCache 是否用户授权第一次,就把用户信息放到缓存中,以后不用获取最新的,直接拿缓存*/let isCache = trueObject.defineProperty(wx, 'getUserInfo', {configurable: true,value: function (callback) {if (wx.authorizationInfo) {callback.success(wx.authorizationInfo)return;} else if (isCache) {let storageInfo = wx.getStorageSync('authorizationInfo')if (storageInfo) {wx.authorizationInfo = storageInfocallback.success(wx.authorizationInfo)return;}}let success = callback.successcallback.success = function (e) {wx.authorizationInfo = eif (isCache) {wx.setStorageSync('authorizationInfo', e)}success(e)}wx.getUserProfile({desc: '展示用户信息',...callback});}})}
开发注意
使用wx.getUserProfile
不能在bindgetuserinfo
事件下面
<!-- 错误的方式 --><button open-type="getUserInfo" bindgetuserinfo="getUserInfo">授权</button><!-- 正确的方式 --><button bindtap="getUserInfo">授权</button>
desc
字段不能为空
wx.getUserProfile({desc: '展示用户信息', //不能为空success(e){}})