前言
2021年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 = true
Object.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 = storageInfo
callback.success(wx.authorizationInfo)
return;
}
}
let success = callback.success
callback.success = function (e) {
wx.authorizationInfo = e
if (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){} })