前言
在用wx.getUserInfo接口的时候,发现获取的信息都是匿名从,比如微信名是:微信用户,头像直接就是黑白照。
害我以为是我自己代码写错了,后面查询了一下才发现这个接口早就更新了,默认是匿名的。具体看小程序登录、用户信息相关接口调整说明
所以以后获取用户信息,都要通过用户进行授权才可以!所以就用到了wx.getUserProfile这个接口了!其实与前面哪个差不多像!
使用方法
var that = this;
//判断是否已经授权,这里用wx.getStorageSync储存,如果已经授权了,将该key改成true!
if (!wx.getStorageSync('hadAuthed')) {
// 已经授权,可以直接调用 getUserInfo 获取头像昵称,不会弹框
// An highlighted block
wx.showModal({
title: '温馨提示',
content: '正在请求获取您的个人信息,以后续方便使用本程序!',
success(res) {
if (res.confirm) {
wx.getUserProfile({
desc: "获取你的昵称、头像、地区及性别",
success: res => {
that.globalData.userInfo = res.userInfo;
that.globalData.hasUserInfo = true;
wx.setStorageSync('hadAuthed', true)
wx.getStorageSync('hadAuthed')
//这里可以发起获取token的请求
// 由于 getUserInfo 是网络请求,可能会在 Page.onLoad 之后才返回
// 所以此处加入 callback 以防止这种情况
callback && callback(res);
},
fail: res => {
//拒绝授权
that.showErrorModal('您拒绝了请求');
return;
}
})
} else if (res.cancel) {
//拒绝授权 showErrorModal是自定义的提示
that.showErrorModal('您拒绝了请求');
return;
}
}
})
}
注意,这里我使用wx.getStorageSync进行是否授权验证,防止重新启动一次就得授权的麻烦!
参考 https://blog.csdn.net/qq_45221690/article/details/114389689
最终效果
可能出现的错误
getUserProfile直接进入fail函数,getUserProfile调用失败:fail can only be invoked by user TAP gesture.
此错误为没有进行授权确认就直接调用了wx.getUserProfile,所以会出现错误,需要开启一个showModal,让用户点击确认授权才可以执行!