根据微信官方文档的说法,2022年10月之后,原本的获取昵称和头像的api,也就是wx.getUserProfile和wx.getUserInfo将停止支持,在那之后发布和更新的小程序必须停止使用这两个api。
相关公告链接:小程序用户头像昵称获取规则调整公告
微信推荐的方法是:「头像昵称填写能力」支持获取用户头像昵称:如业务需获取用户头像昵称,可以使用「头像昵称填写能力」(基础库 2.21.2 版本开始支持,覆盖iOS与安卓微信 8.0.16 以上版本)。
官方实例:
<button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar"><image class="avatar" src="{{avatarUrl}}"></image>
</button>
<input type="nickname" class="weui-input" placeholder="请输入昵称"/>
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'Page({data: {avatarUrl: defaultAvatarUrl,},onChooseAvatar(e) {const { avatarUrl } = e.detail this.setData({avatarUrl,})}
})
但遇到个问题获取头像的路径是临时文件路径 后台读取不了。
解决方法:把图片的临时路径发送给自己的服务器
PS:我这个是uni-app开发
<button class="avatar-wrapper" open-type="chooseAvatar" @chooseavatar="onChooseAvatar"><image class="pics" :src="avatarUrl" mode="aspectFill" ></image>
</button>
onChooseAvatar(e) {var _this = thisconst { avatarUrl } = e.detailuni.uploadFile({url: baseUrl + "/api/images", //仅为示例,非真实的接口地址filePath: avatarUrl,name: 'files',fileName: 'files',success: (uploadFileRes) => {var data = JSON.parse(uploadFileRes.data)if (data.code == 200) {_this.avatarUrl = data.data.img_path} else {uni.showModal({title: '提示',content: data.msg,showCancel: false,success: function(res) {if (res.confirm) {console.log('用户点击确定');}}});}}});}
PS:原生开发
<button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar"><image class="avatar" src="{{avatarUrl}}"></image>
</button>
<input type="nickname" class="weui-input" placeholder="请输入昵称"/>
onChooseAvatar(e) {var avatarUrl = e.detail this.setData({avatarUrl,//让图片预览处显示刚刚选择的图片});wx.uploadFile({filePath: avatarUrl,name: 'avatarImg',url: uploadUrl,//服务器端接收图片的路径success:function(res){console.log(res);//发送成功回调},fail:function(res){console.log(res);//发送失败回调,可以在这里了解失败原因}})
具体效果:
当然这样的用户体验是不好的,希望微信小程序团队能够处理好这些情况,不要什么都一刀切。恶心到的最终是用户