• 微信小程序最新用户头像昵称获取规则调整应对措施(2022)


    一、调整

    小程序用户头像昵称获取规则调整公告
    在这里插入图片描述
    以前通过wx.getUserProfile获取用户信息,用户点击同意以后,便可以直接获取相关信息,但是官方最近做出了调整,直接将头像和昵称使用默认值填充了,所以我们无法直接获取用户的信息了,需要新增一个页面用于用户自定义头像和昵称。

    二、应对措施

    微信新增了头像填充能力:头像昵称填写
    在这里插入图片描述
    在这里插入图片描述

    2.1 更新头像

    在这里插入图片描述
    就是设置button的open-type为chooseAvatar,当用户点击时,就会触发“修改头像”事件。
    在这里插入图片描述
    button按钮

        <button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
          修改头像
        button>
    
    • 1
    • 2
    • 3

    回调函数onChooseAvatar:

      //用户选中自定义头像的回调
      onChooseAvatar(e) {
        const {
          avatarUrl
        } = e.detail
        // 获取到的avatarUrl(临时地址):http://tmp/ZENIKXqaUC20a19f3c2fd621b82c7662b952e000d532.jpeg
        console.log(avatarUrl);
        //更新当前页面信息
        this.setData({
          ['userInfo.avatarUrl']: avatarUrl,
        })
      },
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    获取到的头像地址是一个临时地址,并不是长期有效的,我们需要将这个地址对应的文件存到自己的服务器上或者云存储中。
    例如使用云开发的存储能力:微信小程序云开发-存储
    在这里插入图片描述

    2.2 更新昵称

    在这里插入图片描述

    <input type="nickname" class="nick-name-input" placeholder="请输入昵称" 	bindblur="changeNickName"/>
    
    • 1
      // 用户修改昵称
      changeNickName(e){
        let name = e.detail.value;
        if(name.length === 0) return;
        this.setData({
          ['userInfo.nickName']: name
        })
      }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    这里没有使用bindtap而是直接使用bindblur是因为如果直接使用提示的个人微信昵称填充时,不会触发bindtap事件。

    三、完整代码

    主要是逻辑代码,样式还需要根据自己的业务进行调整。
    index.wxml

    
    <view class="container">
      <view class="userinfo" wx:if="{{hasUserInfo}}">
        <block>
          <image class="userinfo-avatar" src="{{userInfo.avatarUrl}}" mode="cover">image>
          <text class="userinfo-nickname">{{userInfo.nickName}}text>
        block>
        <button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
          修改头像
        button>
        <input type="nickname" class="nick-name-input" placeholder="请输入昵称" 	bindblur="changeNickName"/>
      view>
      <button bindtap="getUserProfile" wx:else>获取用户信息button>
    view>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    index.js

    // index.js
    // 获取应用实例
    const app = getApp()
    
    Page({
      data: {
        userInfo: {},
        hasUserInfo: false
      },
      onLoad() {
    
      },
      getUserProfile(e) {
        // 推荐使用wx.getUserProfile获取用户信息,开发者每次通过该接口获取用户个人信息均需用户确认,开发者妥善保管用户快速填写的头像昵称,避免重复弹窗
        wx.getUserProfile({
          desc: '展示用户信息', // 声明获取用户个人信息后的用途,后续会展示在弹窗中,请谨慎填写
          success: (res) => {
            console.log(res.userInfo)
            this.setData({
              userInfo: res.userInfo,
              hasUserInfo: true
            })
          }
        })
      },
      //用户选中自定义头像的回调
      onChooseAvatar(e) {
        const {
          avatarUrl
        } = e.detail
        // 获取到的avatarUrl(临时地址):http://tmp/ZENIKXqaUC20a19f3c2fd621b82c7662b952e000d532.jpeg
        console.log(avatarUrl);
    
        this.setData({
          ['userInfo.avatarUrl']: avatarUrl,
        })
      },
      // 用户修改昵称
      changeNickName(e){
        let name = e.detail.value;
        if(name.length === 0) return;
        this.setData({
          ['userInfo.nickName']: e.detail.value
        })
      }
    })
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46

    index.wxss

    /**index.wxss**/
    .userinfo {
      display: flex;
      flex-direction: column;
      align-items: center;
      color: #aaa;
    }
    
    .userinfo-avatar {
      overflow: hidden;
      width: 128rpx;
      height: 128rpx;
      margin: 20rpx;
      border-radius: 50%;
    }
    
    .avatar-wrapper{
      margin: 10px 0;
    }
    
    .nick-name-input{
      border: 1px solid #f1f1f1;
      padding:5px;
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    修改后:
    在这里插入图片描述
    注意:修改后的userInfo应该同步更新到数据库中,因为当前仅仅只是修改该了data中的数据。

  • 相关阅读:
    使用 Docker 安装 Nebula Graph
    Dextran-HSA、葡聚糖牛血清白蛋白、葡聚糖可以连接不同的活化基团如:NH2/MAL/COOH
    【UV打印机】波形开发-矢量波形工具(五)
    Vue3学习(二十)- 富文本插件wangeditor的使用
    洛谷刷题C语言:工艺品制作、蛇形方阵、杨辉三角、自动修正、文字处理软件
    MySQL触发器
    MySql安装包配置
    牛客网项目-第一章-笔记
    【Linux】线程
    微信小程序案例2-3:婚礼邀请函
  • 原文地址:https://blog.csdn.net/ZHANGYANG_1109/article/details/127947267