uni-app中 button组件有一个参数,open-type开放能力,可以使用更多内置的功能,其中就包括获取用户信息,getUserInfo ,当button被设置该值时,还需要绑定 @getuserinfo回调事件,触发一个回调函数。

uni全局对象获取用户信息

0.png

uni.getUserInfo(OBJECT)

获取用户信息。
平台差异说明

App H5 微信小程序 支付宝小程序 百度小程序 字节跳动小程序、飞书小程序 QQ小程序 快手小程序
x

注意: 微信小程序端,在用户未授权过的情况下调用此接口,不会出现授权弹窗,会直接进入 fail 回调(详见《微信小程序公告》)。在用户已授权的情况下调用此接口,可成功获取用户信息。
OBJECT 参数说明

参数名 类型 必填 说明 平台差异说明
provider String 登录服务提供商,通过 uni.getProvider 获取
withCredentials Boolean 是否带上登录态信息。 微信小程序、字节跳动小程序、飞书小程序
lang String 指定返回用户信息的语言,默认为 en。更多值请参考下面的说明。 微信小程序
timeout Number 超时时间,单位 ms。 微信小程序
success Function 接口调用成功的回调
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

lang 值说明

说明
zh_CN 简体中文
zh_TW 繁体中文
en 英文

注意:在小程序 withCredentials 为 true 时或是在 App 调用 uni.getUserInfo,要求此前有调用过 uni.login 且登录态尚未过期。微信基础库2.10.4版本对用户信息相关接口进行了调整,使用 uni.getUserInfo 获取得到的 userInfo 为匿名数据,建议使用 uni.getUserProfile 获取用户信息。
success 返回参数说明

参数 类型 说明 平台差异说明
userInfo OBJECT 用户信息对象
rawData String 不包括敏感信息的原始数据字符串,用于计算签名。
signature String 使用 sha1( rawData + sessionkey ) 得到字符串,用于校验用户信息。 微信小程序、字节跳动小程序、飞书小程序
encryptedData String 包括敏感数据在内的完整用户信息的加密数据,详细见加密数据解密算法。 微信小程序、字节跳动小程序、飞书小程序
iv String 加密算法的初始向量,详细见加密数据解密算法。 微信小程序、字节跳动小程序、飞书小程序
errMsg String 描述信息

userInfo 参数说明

参数 类型 说明 平台差异说明
nickName String 用户昵称
openId String 该服务商唯一用户标识 App
avatarUrl String 用户头像

除了以上三个必有的信息外,不同服务供应商返回的其它信息会存在差异。

使用方法:
在一个方法中调用uni的getUserInfo方法

  1. <tempalte>
  2. <button @getuserinfo="call" @click="getuserinfo" type="primary" >收藏</button>
  3. </tempalte>
  4. <script>
  5. methods:{
  6. getuserinfo(){
  7. uni.getUserInfo({
  8. success: (res) => {
  9. console.log(res)
  10. }
  11. })
  12. },
  13. call(){
  14. console.log('回调函数被触发')
  15. }
  16. }
  17. </script>

uni调用该方法时如果button中设置了 @getuserinfo的回调函数,则还会触发该函数。
image.png
但是我们会发现,这请求回来的数据,并不是我们想要的,当前登录用户的个人信息,而是cloud平台给这个用户包装的信息,所以真正的获取用户信息的方法还在后面。:

uni.getStorage(OBJECT)

从本地缓存中异步获取指定 key 对应的内容。
OBJECT 参数说明

参数名 类型 必填 说明
key String 本地缓存中的指定的 key
success Function 接口调用的回调函数,res = {data: key对应的内容}
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明

参数 类型 说明
data Any key 对应的内容

示例

  1. uni.getStorage({
  2. key: 'storage_key',
  3. success: function (res) {
  4. console.log(res.data);
  5. }
  6. });

uni.getStorageSync(KEY)

从本地缓存中同步获取指定 key 对应的内容。
参数说明

参数 类型 必填 说明
key String 本地缓存中的指定的 key

示例

  1. try {
  2. const value = uni.getStorageSync('storage_key');
  3. if (value) {
  4. console.log(value);
  5. }
  6. } catch (e) {
  7. // error
  8. }

uni.getStorageInfo(OBJECT)

异步获取当前 storage 的相关信息。
平台差异说明

App H5 微信小程序 支付宝小程序 百度小程序
HBuilderX 2.0.3+

OBJECT 参数说明

参数名 类型 必填 说明
success Function 接口调用的回调函数,详见返回参数说明
fail Function 接口调用失败的回调函数
complete Function 接口调用结束的回调函数(调用成功、失败都会执行)

success 返回参数说明

参数 类型 说明
keys Array<String> 当前 storage 中所有的 key
currentSize Number 当前占用的空间大小, 单位:kb
limitSize Number 限制的空间大小, 单位:kb

通过uni.getStorageInfo输出信息可以看到keys所有可获得的键值:
image.png
可以发现 keys中有userInfo这个键,所以我们就用 uni.getStorage()来获取这个键值
uni.getStorageSync(“userInfo”)
image.png
此时我们发现,已经获取到了真正的用户信息。
原因:用户在登陆时会将自身信息存入本地缓存进行持久化,所以可以通过这个API来获取用户本地的信息,这样我们有了 用户 id,就能独立实现 浏览记录个人收藏的功能了,好耶!!

image.png
可以看到上图中我们打印了res结果中的用户信息,发现完全正确,这下就可以实现绑定到用户的历史记录和收藏夹功能了。