最近,很多同学在学习石头兄弟的小程序课程时,都遇到了以下问题。 当小程序授权获取用户头像和昵称时,他们得到的是以下内容。
是什么原因? 去看小程序官方文档,看到官方规则又变了。
点进去一看,原来小程序官方已经回收了2022年11月8日之后获取用户头像的接口
看看网友的评论,真是骂人啊。
这确实是我的地盘,我是主人,我说什么都可以。 有点被店主欺负的嫌疑。 。 。 但是,作为我们辛勤工作的小程序开发者,政府已经虐待了我千百遍,而我对待政府就像初恋一样。 没办法,我们还是得用小程序不是吗? 。 。 。
那么石哥在这里为大家提供了几种解决方案。
1.减少基础库的临时解决方案
事实上,官方表示,2.27.1以下版本的小程序仍然可以使用授权接口。 也就是说,只要我们的基础库低于2.27.1,就可以继续获取用户头像。
抱着试一试的心态,石哥去把基础库降到了2.27.0
降下来后,再尝试一下获取头像的功能,还是可以获取到的。
这里要注意一件事小程序开发版头像,降低后,记得清除缓存
这个方法虽然可以解决,但是只是暂时的,因为官方小程序总是存在Bug,所以官方总会升级基础库。 如果我们使用这种方法太久,基础库的版本就会落后太多。 由于基础库太低,一些官方新功能无法使用。 所以这个解决方案只是一个临时解决方案。
2.(不推荐)官方方案,可以填写头像和昵称
为了补偿我们,官方给我们提供了新的方案。
虽然这个解决方案可以获取头像和昵称,但是。 。 。 。 。
我们可以在这里获取用户的头像,但是官方返回给我们的头像是一个临时链接。
由于是临时链接,意味着链接很快就会过期
如果我们想使用这个头像作为产品评论中的头像,那么我们就不能使用这个临时链接。 所以官方的有点鸡肋,基本没什么用。
有用的是这个来获得昵称。
即填写昵称时,如果设置了属性,可以选择微信昵称,也可以自己输入新的昵称。
所以如果你只需要使用用户昵称而不是头像,可以使用这种方法。
3.(推荐)自己存储头像和昵称
由于官网总是在变,并没有给我们一个长期可用的头像链接,那么我们就自己存储用户头像,并把这个头像做成一个长期可用的链接。 所以这里我们需要开发自己的后台存储分身。有以下几种方式
1.使用Java或php开发后台,存储头像和昵称
2.与云端开发的云存储存储分身生成永久链接
这里我推荐大家使用云开发,因为云开发比较简单。 当然,如果你懂Java或者php开发,你可以开发自己的上传和存储头像的后台。
获取昵称和头像
先看效果图
可以看到这里可以获取昵称,还可以自己自定义头像。 这个定制的头像保存在云存储中,并返回一个可以使用的永久链接。
这样,我们以后使用这个头像和昵称,就永久了,不用担心官方小程序是否再次更改规则。
我会把对应的代码完整贴出来给大家。
wxml
class="item">
<view class="tip">编辑用户昵称view>
"nickname" bindinput="getName" />
view>
class="line">view>
class="item" bindtap="chooseImage">
<view class="tip">点击修改头像view>
"{{avatarUrl}}" />
view>
wxss风格
.item {
display: flex;
align-items: center;
justify-content: space-between;
margin: 15rpx;
border-bottom: 1rpx solid gray;
padding-bottom: 20rpx;
}
.tip {
font-size: 44rpx;
margin: 20rpx;
color: red;
}
.item image {
width: 200rpx;
height: 200rpx;
border-radius: 10rpx;
margin: 10rpx 30rpx;
}
.item input {
flex: 1;
border: 1px solid gray;
border-radius: 20rpx;
padding: 5rpx 15rpx;
}
js逻辑代码
const app = getApp()
//这里要注意,初始化云开发,下面env要换成你自己的
wx.cloud.init({
env: 'cloud1-3g3xyg1a9ff9d8fe'
})
const db = wx.cloud.database()
Page({
getName(e) {
this.setData({
name: e.detail.value
})
},
//选择图片
chooseImage() {
wx.chooseMedia({
count: 1,
mediaType: ['image'],
sizeType: ['compressed'], //可以指定是原图还是压缩图,这里用压缩
sourceType: ['album', 'camera'], //从相册选择
success: (res) => {
console.log("选择图片成功", res)
let avatarUrl = res.tempFiles[0].tempFilePath
this.setData({
avatarUrl: avatarUrl
})
wx.cloud.uploadFile({
cloudPath: new Date().getTime() + '.png',
filePath: avatarUrl, // 文件路径
}).then(res => {
let fileID = res.fileID
console.log("上传返回的头像永久链接", fileID)
}).catch(error => {
console.log("上传失败", error)
})
}
})
},
})
当然,这是基于云开发的。 如果你对云开发一无所知,可以观看石头录制的云开发视频:
那么,关于最新版本的获取头像和昵称的问题,我在二手商城小程序的视频中也详细解释过: