最近微信关于用户头像、昵称授权又做了调整。
点击查看原文
解决方案思路如下:
1、在util.js里写一个通用函数,函数的功能是,用户授权成功,将头像昵称,存入服务器,同时,在本地缓存设置标记用户授权成功。
// util.js
function getUserProfile() {
wx.getUserProfile({
desc: '用于完善个人资料',
success: function(res) {
var userInfo = res.userInfo
// console.log('userInfo==>', userInfo)
wx.setStorageSync('storage_info', 1);//本地标记
//下面将userInfo存入服务器中的用户个人资料
//...
},
fail() {
console.log("用户拒绝授权")
}
})
}
2、在需要用户授权时,做判断,如果本地已经授权,直接执行正常业务逻辑。如果未授权,则提示授权。
chooseTap: function(e) {
//如果未授权,就提示授权,如果授权了,就执行正常的业务逻辑
if (!wx.getStorageSync('storage_info')) {
util.getUserProfile()
return
}
//下面是正常业务逻辑
//...
}
3、在用户进入小程序时,从服务器获取用户信息(如果已授权,就有之前存入的头像,昵称),在页面展示用户信息。
完成以上3步,就全部完成了。
说明:把授权状态存入缓存的好处是:因为wx.getUserProfile每次都会弹授权框,如果每次都让用户授权,体验不好。如果只授权一次,存入服务器,以后都展示的是这个用户信息。在用户微信改名,改头像后,服务器储存的用户信息还是以前的。
所以,把授权状态存入缓存,起码在用户更换手机,或者删除过小程序,又进来时,会弹出授权提示,可以让用户重新授权,将服务器里用户的信息进行一次更新。
鸡肋了啊 每次都弹窗。 我tama的好奇 微信 一个用户的昵称和头像 性别 基本的信息你藏什么藏
这个接口返回字段的类型和长度哪里可以查到呢?给个链接谢谢
信息是存到数据库了,但用户登录用什么提取用户信息啊?
但是你存的是第一次授权所获取到的头像和名称, 如果要拿最新的头像和昵称怎么办?
如果,用户更换了头像,你立马就要拿到最新的,那你每次都要请求。
还需要对以前版本的做适配,我们现在上去有些用户不支持getUserProfile直接不能用了
其实如果想不那么及时的更新用户头像与昵称,可以在util.js 文件自定义的 getUserProfile 函数与往外面的判断修改一下,if (!wx.getStorageSync('storage_info') 这里在存进去的时候增加一个时间戳,然后取出来在判断一下,如果超过30天,则让在弹出来一次,这样30天能更新一次也可以。
怎么把存入服务器的授权信息再调用显示出来呢
真搞不明白,微信是咋想的,怎么搞出这样个奇葩,既然使用wx.getUserProfile首次做了授权了,那么后面再次进入程序,调用wx.getUserInfo,就应该获取到正常用户信息,现在变成匿名用户信息了,这个getUserInfo,还有啥作用呢?
在需要用户授权时,使用util.getUserProfile()语句报错:
这该怎么办?