# 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({ |
参考文档: