uni-app中 button组件有一个参数,open-type开放能力,可以使用更多内置的功能,其中就包括获取用户信息,getUserInfo ,当button被设置该值时,还需要绑定 @getuserinfo回调事件,触发一个回调函数。
uni全局对象获取用户信息
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方法
<tempalte>
<button @getuserinfo="call" @click="getuserinfo" type="primary" >收藏</button>
</tempalte>
<script>
methods:{
getuserinfo(){
uni.getUserInfo({
success: (res) => {
console.log(res)
}
})
},
call(){
console.log('回调函数被触发')
}
}
</script>
uni调用该方法时如果button中设置了 @getuserinfo的回调函数,则还会触发该函数。
但是我们会发现,这请求回来的数据,并不是我们想要的,当前登录用户的个人信息,而是cloud平台给这个用户包装的信息,所以真正的获取用户信息的方法还在后面。:
uni.getStorage(OBJECT)
从本地缓存中异步获取指定 key 对应的内容。
OBJECT 参数说明
参数名 | 类型 | 必填 | 说明 |
---|---|---|---|
key | String | 是 | 本地缓存中的指定的 key |
success | Function | 是 | 接口调用的回调函数,res = {data: key对应的内容} |
fail | Function | 否 | 接口调用失败的回调函数 |
complete | Function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
success 返回参数说明
参数 | 类型 | 说明 |
---|---|---|
data | Any | key 对应的内容 |
示例
uni.getStorage({
key: 'storage_key',
success: function (res) {
console.log(res.data);
}
});
uni.getStorageSync(KEY)
从本地缓存中同步获取指定 key 对应的内容。
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
key | String | 是 | 本地缓存中的指定的 key |
示例
try {
const value = uni.getStorageSync('storage_key');
if (value) {
console.log(value);
}
} catch (e) {
// error
}
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所有可获得的键值:
可以发现 keys中有userInfo这个键,所以我们就用 uni.getStorage()来获取这个键值
uni.getStorageSync(“userInfo”)
此时我们发现,已经获取到了真正的用户信息。
原因:用户在登陆时会将自身信息存入本地缓存进行持久化,所以可以通过这个API来获取用户本地的信息,这样我们有了 用户 id,就能独立实现 浏览记录 和 个人收藏的功能了,好耶!!
可以看到上图中我们打印了res结果中的用户信息,发现完全正确,这下就可以实现绑定到用户的历史记录和收藏夹功能了。