小程序授权获取用户头像和昵称时,获取到的是什么

2023-08-09
来源:网络整理

最近,很多同学在学习石头兄弟的小程序课程时,都遇到了以下问题。 当小程序授权获取用户头像和昵称时,他们得到的是以下内容。

是什么原因? 去看小程序官方文档,看到官方规则又变了。

点进去一看,原来小程序官方已经回收了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;
    margin15rpx;
    border-bottom1rpx solid gray;
    padding-bottom20rpx;
}

.tip {
    font-size44rpx;
    margin20rpx;
    color: red;
}

.item image {
    width200rpx;
    height200rpx;
    border-radius10rpx;
    margin10rpx 30rpx;

}

.item input {
    flex1;
    border1px solid gray;
    border-radius20rpx;
    padding5rpx 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({
      count1,
      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({
          cloudPathnew Date().getTime() + '.png',
          filePath: avatarUrl, // 文件路径
        }).then(res => {
          let fileID = res.fileID
          console.log("上传返回的头像永久链接", fileID)
        }).catch(error => {
          console.log("上传失败", error)
        })
      }
    })
  },
})

当然,这是基于云开发的。 如果你对云开发一无所知,可以观看石头录制的云开发视频:

那么,关于最新版本的获取头像和昵称的问题,我在二手商城小程序的视频中也详细解释过:

分享