# uniapp-qq 开放数据使用
用途
展示用户个人信息如头像等,类似
getUserInfo()。展示针对用户好友对于某一产品或某一产品下的不同选项的选择。
# 示例:

# uniapp 中具体使用方式
创建一个组件并在要展示用户数据的页面引入,此处为
FriendList.vue。# 示例
1 | <template> |
- 调用
qq.setUserCloudStorage()方法托管用户关系数据。
具体属性:
| 属性 | 类型 | 必填 | 说明 |
|---|---|---|---|
| KVDataList | Array. |
是 | 要修改的 KV 数据列表 |
| success | function | 否 | 接口调用成功的回调函数 |
| fail | function | 否 | 接口调用失败的回调函数 |
| complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
# 示例:
1 | qq.setUserCloudStorage({ |
# 托管数据的限制
- 每个 openid 所标识的 QQ 用户在每个游戏上托管的数据不能超过 128 个 key-value 对。
- 上报的 key-value 列表当中每一项的 key+value 长度都不能超过 1K(1024)字节。
- 上报的 key-value 列表当中每一个 key 长度都不能超过 128 字节。
在想展示好友关系链的地方使用 open-data 标签
# 示例
1 | <open-data |
1 | data: { |
open-data 标签用于展示 QQ 开放数据。
具体属性:
| 属性名 | 类型 | 默认值 | 说明 | 最低版本 |
|---|---|---|---|---|
| type | String | 开放数据类型 | ||
| open-gid | String | 当 type=”groupName” 时生效, 群 id | ||
| lang | String | en | 当 type=”user*“ 时生效,以哪种语言展示 userInfo,有效值有:en, zh_CN, zh_TW | |
| share-ticket | String | en | 当 type=groupCloudStorage 时有效,群分享对应的 shareTicket | 1.17.0 |
| key-list | String | en | 当 type=*CloudStorage 时有效,指定要拉取的 key 列表 | 1.17.0 |
| component-data | String | en | 当 type=*CloudStorage 时有效,从主域透传给开放数据域的数据,会自动注入到自定义开放数据域组件的 properties 中 | 1.17.0 |
| generic:simple-component | String | en | 当 type=*CloudStorage 时有效,指定使用哪个自定义开放数据域组件来渲染开放数据,具体说明见下方 | 1.17.0 |
| binderror | String | en | 当 type=*CloudStorage 时有效,开放数据请求或定向分享失败时触发,event.detail = {errMsg: “getGroupCloudStorage:fail no data”} | 1.17.0 |
type 有效值:
| 值 | 说明 | 最低版本 |
|---|---|---|
| groupName | 拉取群名称,只有当前用户在此群内才能拉取到群名称 | |
| userNickName | 用户昵称 | |
| userAvatarUrl | 用户头像 | |
| userGender | 用户性别 | |
| userCity | 用户所在城市 | |
| userProvince | 用户所在省份 | |
| userCountry | 用户所在国家 | |
| userLanguage | 用户的语言 | |
| userCloudStorage | 获取当前用户的应用数据 |
1.17.0 |
| friendCloudStorage | 获取当前用户也玩该小程序的好友的应用数据 |
1.17.0 |
| groupCloudStorage | 获取当前用户在某个群中也玩该小程序的成员的应用数据 |
1.17.0 |
# 关系链数据展示说明
当 type=*CloudStorage, 可通过 generic:simple-component属性指定自定义开放数据域组件
指定的自定义开放数据域组件中会在props中自动注入以下属性
| 属性 | 类型 | 说明 |
|---|---|---|
| kvDataList | Array. |
当type=userCloudStorage时 |
| userList | Array. |
当type=friendCloudStorage 或 type=groupCloudStorage 时 |
| componentData | Object | 从主域透传给开放数据域的数据 |
KVData数据结构说明
| 属性 | 类型 | 说明 |
|---|---|---|
| key | string | 数据的 key |
| value | KVData | 数据的 value |
UserData数据结构说明
| 属性 | 类型 | 说明 |
|---|---|---|
| openid | string | 用户的 openid |
| avatarUrl | string | 用户的 QQ 头像 url |
| nickname | string | 用户的 QQ 昵称 |
| kvDataList | Array. |
用户的应用数据 |
用户的 应用数据 指的是用户的分数、段位等小程序业务特有的数据,通过调用 qq.setUserCloudStorage() 可以将当前用户的应用数据托管在 QQ 后台。只有被托管过数据的用户,才会被视为 玩过 该小程序的用户,才会出现在 type=friendCloudStorage 和 type=groupCloudStorage 的<open-data>组件中
# 一些限制及处理方法
自定义组件中无法对
userList进行操作,无法将userList赋值给在data中的变量,无法使用watch监控userList使其存在后赋值给data里的变量,无法使用 data 中定义的变量。需要显示固定数量的用户数据:
1
2<view v-for="item of userList.slice(0,3)"> // 无法显示
<view v-for="(item, index) of userList" v-if="index < 4"> // 正常显示
自定义组件中无法使用
methods中的方法(不识别 methods),无法使用外部导入的 js 中的方法(打包后找不到 js 文件)需要对用户数据进行排序:
在打包后的代码中使用官方文档中的原生排序方法 (参考文档 3)
关于 componentData ,需要传递对象类型。
示例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14dataList: [
{
id: '1',
data: {
value: 1,
},
},
{
id: '2',
data: {
value: 2,
},
},
];1
2
3
4
5
6
7
8
9<view v-for="item of dataList">
<open-data
type="friendCloudStorage"
generic:simple-component="list"
:keyList="[item.id]"
:component-data="item.data"
>
</open-data>
</view>结果:

关于记录存放上限:
由于无法在自定义组件中对
userList进行操作,从而无法根据产品去筛选其中的选项,因此采用一种妥协的处理方法——将单个选项的 id 作为 key,时间戳作为 value。缺点是最多只能存 128 条记录。因此当存储记录达到上限后会无法继续存用户数据。- 解决方法:在
storage中添加数组keyList同步云端数据的 key 进行更新,在setUserCloudStorage方法的回调里对keyList进行处理,弹出栈底的 key,这里的 key 同步云端最早添加的一条记录,调用qq.removeUserCloudStorage()方法删除云端数据。 - 关于排序的补充,需要在
setUserCloudStorage方法的回调里对keyList进行处理,移动已存在的数据至栈顶。从而保证云端数据表时间戳更新后和本地keyList顺序保持同步。
- 解决方法:在
其他限制:
组件所有的生命周期函数都不会被触发
无法绑定任何事件回调(所有事件绑定都会被过滤掉)
无法通过
createSelectorQuery、createIntersectionObserver接口获取自定义开放数据域组件的任何节点仅支持使用
<view>、<text>、<image>、<button>组件,其他组件会被自动过滤掉开放数据域组件内引用的任何组件,其
style属性都会被置空拥有独立的作用域,qml 文件引用的 qs 模块会重新生成新的实例
调试工具中无法展示
open-data中的数据,开发时需使用预览或真机调试。
预览模式在手机的调试窗口的 QML 中无法查看当前元素中的
key-list值和component-data值,需使用真机调试在 PC 的窗口中查看。
# 处理逻辑代码参考
1 | qq.setUserCloudStorage({ |
参考文档: