微信小程序开发系列-04获取用户图像和昵称

news/2024/7/20 1:20:11 标签: 微信小程序, 小程序

这个功能的实现对于我这个新手来说可谓是一波三折。该功能的实现经历了三个“版本”的迭代,我的运气不是很好,从第一个“版本”开始尝试,这篇文章也是记录下这个过程,以便其他新手能快速找到解决方案。

Gen1-getUserInfo

第一个“版本”是通过getUserInfo来实现。getUserInfo具体的使用方式有两种。

方式一:wx.getUserInfo

wx.getUserInfo(Object object)

该接口的功能是 获取用户信息。需要特别说明的是,在该接口的官方文档的开头就特别说明了用户头像昵称获取规则已调整

请添加图片描述

根据官方文档描述,该接口成功调用会返回UserInfo信息。

请添加图片描述

接下来看看UserInfo类型的说明,总共有7个属性。

请添加图片描述

2021-02-24官方发布的小程序登录、用户信息相关接口调整说明,回收wx.getUserInfo接口可获取用户个人信息能力4月28日24时后发布的新版本小程序,开发者调用wx.getUserInfo或将不再弹出弹窗,直接返回匿名的用户个人信息,获取加密后的openID、unionID数据的能力不做调整。

img

即wx.getUserInfo接口的返回参数不变,但开发者获取的userInfo为匿名信息。

显然2021年4曰28日之后,这种方式就不能获取到 昵称和头像啦!

我也实际验证了下,结果如下:

请添加图片描述
请添加图片描述

方式二:button open-type=“getUserInfo”

为了保持文章的完整性,也给出使用button getUserInfo的示例。创建一个info页面,info.wxml只有button、image、text三个组件,当点击“获取头像昵称”按钮后,将获取到的nickName和avatarUrl显示到text和image。

请添加图片描述
请添加图片描述

请添加图片描述

从运行结果可以看出,nickName和avatarUrl都是匿名且其他的5个属性都为“空”。

Gen2-getUserProfile

在这边官方文档中,建议使用新增getUserProfile接口 获取用户的个人信息(头像、昵称、性别与地区),该接口从基础库2.10.4版本开始支持。于是我按照官方的说法继续实验。

查看getUserProfile接口的官方说明,发现又有一个调整公告。

请添加图片描述
请添加图片描述

自2022年10月25日后,通过wx.getUserProfile接口获取用户头像和昵称 又不支持了。但旧的基础库版本(2.10.4~2.27.0)可以支持,于是我继续试验。。。

我将基础库版本改成2.16.1。

请添加图片描述

然后运行代码,真的可以弹窗了。

请添加图片描述

点击“允许”按钮后,avatarUrl和nickName能正常获取并显示啦!

请添加图片描述

至此,获取用户头像和昵称的目的算是满足了,但还是有点瑕疵,基础库的版本比较低。于是我又想试试最新的基础库版本,看效果如何?将基础库版本改为3.2.5。

请添加图片描述

然后再次运行,获取不到用户头像和昵称了,不开心。

请添加图片描述

说明通过wx.getUserProfile的方法也不是最优方案。那怎么搞呢?

答案在这里:

请添加图片描述

Gen3-chooseAvatar&nickname

button open-type="chooseAvatar"与input type="nickname"方案。

头像选择

需要将 button 组件 open-type 的值设置为 chooseAvatar,当用户选择需要使用的头像之后,可以通过 bindchooseavatar 事件回调获取到头像信息的临时路径。

昵称填写

需要将 input 组件 type 的值设置为 nickname,当用户在此input进行输入时,键盘上方会展示微信昵称。

如下图,点击灰色图像后,会弹框让我选择“用微信头像”。

请添加图片描述

点击“用微信头像”后,效果如下,接着再单击昵称输入框,会弹出“用微信昵称”,继续选择这个。

请添加图片描述

整个获取头像和昵称的效果就是这样子的。

请添加图片描述

<view data-weui-theme="{{theme}}">
  <button class="avatar-wrapper" open-type="chooseAvatar" bind:chooseavatar="onChooseAvatar">
    <image class="avatar" src="{{avatarUrl}}"></image>
  </button> 
  <mp-form>
    <mp-cells>
      <mp-cell title="昵称">
        <input type="nickname" class="weui-input" placeholder="请输入昵称"/>
      </mp-cell>
    </mp-cells>
  </mp-form>
</view>
const app = getApp()
const defaultAvatarUrl = 'https://mmbiz.qpic.cn/mmbiz/icTdbqWNOwNRna42FI242Lcia07jQodd2FJGIYQfG0LAJGFxM4FbnQP6yfMxBgJ0F3YRqJCJ1aPAK2dQagdusBZg/0'
Page({
  data: {
    avatarUrl: defaultAvatarUrl,
    theme: wx.getSystemInfoSync().theme,
  },
  onLoad() {
    wx.onThemeChange((result) => {
      this.setData({
        theme: result.theme
      })
    })
  },
  onChooseAvatar(e) {
    const { avatarUrl } = e.detail 
    console.log("chooseAvatar:", e)
    this.setData({
      avatarUrl,
    })
  }
})

从上述“三个版本”的迭代来看,Gen3的方式更合理,也更安全。虽然按照Gen3的方式获取头像和昵称,但是用户并没有真正的登录。接下来再研究下怎么登录。


http://www.niftyadmin.cn/n/5288108.html

相关文章

Linux操作系统——进程(四)进程切换与命令行参数

进程切换 概念引入 下面我们先了解几个概念&#xff1a; 竞争性: 系统进程数目众多&#xff0c;而CPU资源只有少量&#xff0c;甚至1个&#xff0c;所以进程之间是具有竞争属性的。为了高效完成任务&#xff0c;更合理竞争相关资源&#xff0c;便具有了优先级 独立性: 多进程…

cJSON简析

文章目录 json概要cJSON数据结构 递归解析示例references json概要 json是一种文本格式的协议 对于人的可阅读性非常好 其中object和array中的value都可以嵌套 cJSON数据结构 每个节点的数据结构如下 /* cJSON Types: */ #define cJSON_Invalid (0) #define cJSON_False (…

Bing AI使用教程

1.上网&#xff0c;选择”全局模式“。 2.打开edge浏览器&#xff0c;搜索bing&#xff0c;选择聊天。 3.切换至google邮箱申请的微软账号&#xff0c;不要用qq等国内邮箱&#xff0c;否则无法使用。 4.正常使用即可&#xff0c;可以生成图片&#xff0c;每组只有30次对话。新…

Google模拟面试【面试】

Google模拟面试【面试】 2023-12-25 16:00:42 Google代码面试 Prompt #1 给一个二叉树&#xff0c;定义深度为结点到根&#xff1b;所要遍历的边的数量。 示例二叉树中8的深度为3&#xff0c;1的深度为0。 编写函数返回这个二叉树的所有结点的深度和。 示例二叉树答案是16 …

Spring Cloud Gateway官方文档学习笔记

Spring Cloud Gateway官方文档学习笔记 前言 基础知识&#xff1a;API网关基础知识总结面试题&#xff1a;Spring Cloud Gateway夺命连环10问&#xff1f; 何为网关&#xff1f; 什么是网关&#xff1f;理解成火车站的检票口&#xff0c;统一 检票 网关优点&#xff1a; 统…

k8s初学

1.k8s是什么&#xff1f; kubernetes:8个字母省略&#xff0c;就是k8s 自动部署&#xff0c;自动扩展和管理容器化部署的应用程序的一个开源系统。 k8s是负责自动化运维管理多个容器化程序的集群&#xff0c;是一个功能强大的容器编排工具。 2.docker微服务&#xff0c;可以…

K8S三台服务器一键部署总结

随着互联网、云计算技术的深入发展&#xff0c;为降低企业大规模云应用建设的难度和成本&#xff0c;支持云应用开发、运行与运维一体化的云应用平台软件应运而生。在数通家族中对企业集成套件的云平台开发、部署、管理、运维进行统一管理&#xff0c;实现数据集成和共享的平台…

安装elasticsearch+kibana

目录 一、部署单点es 1.1 创建网络 ​编辑 1.2 加载镜像 1.3 运行 二、部署kibana 2.1 部署 一、部署单点es 准备一台虚拟机 操作系统&#xff1a;CentOS 7.x 64 bit 客户端连接工具&#xff1a;FinalShell 关闭虚拟机的防火墙 systemctl stop firewalld.service #停止…