最近微信更新了获取用户信息api,原先的getuserInfo基本不能用了,取而代之的是getUserProfile,那我们来看看最新的api该怎么用吧
区别:
getUserProfile
- wx.getUserInfo 不在返回用户授权的头像昵称,只返回匿名信息,但 wx.getUserProfile 会返回用户授权的头像和昵称。
- wx.getUserInfo 授权成功后,当下次调用时,不会再次弹窗,可以直接获取授权成功返回数据,但 wx.getUserProfile 每次都会弹窗,用户确认允许后才可以拿到用户信息
- wx.getUserProfile 可以获取用户信息和昵称后,可以存在自己服务器,不然弹窗太多影响用户体验
- wx.getUserProfile 接口返回的 iv、encryptedData 解密获取不到 unionid,请使用 wx.login 获取 unionid;
2.使用
之前getUserInfo是使用open-type,但是getUserProfile是不能用open-type的,所以就直接用事件调用吧
<view class="container">
<view class="userinfo">
<block wx:if="{{!hasUserInfo}}">
<button wx:if="{{canIUseGetUserProfile}}" bindtap="getUserProfile"> 获取头像昵称 </button>
<button wx:else open-type="getUserInfo" bindgetuserinfo="getUserInfo"> 获取头像昵称 </button>
</block>
<block wx:else>
<image bindtap="bindViewTap" class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover"></image>
<text class="userinfo-nickname">{{userInfo.nickName}}</text>
</block>
</view>
</view>
Page({
data: {
userInfo: {},
hasUserInfo: false,
canIUseGetUserProfile: false,
},
onLoad() {
if (wx.getUserProfile) {
this.setData({
canIUseGetUserProfile: true
})
}
},
getUserProfile(e) {
// 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认
// 开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
wx.getUserProfile({
desc: '用于完善会员资料', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
success: (res) => {
this.setData({
userInfo: res.userInfo,
hasUserInfo: true
})
}
})
},
getUserInfo(e) {
// 不推荐使用getUserInfo获取用户信息,预计自2021年4月13日起,getUserInfo将不再弹出弹窗,并直接返回匿名的用户个人信息
this.setData({
userInfo: e.detail.userInfo,
hasUserInfo: true
})
},
})