在开放 关系链数据 的基础上,小程序新增互动型托管数据
,提供关系链互动能力,用于实现小程序内 QQ 好友互动(点赞,送礼物等)的功能。
关系链互动数据能力支持:
互动型托管数据与普通托管数据的对比如下:
- | 普通托管数据 | 互动型托管数据 |
---|---|---|
单用户数据大小 | 128 块不大于 1K 的数据 | 只提供 1 个 32 位整形存储。 |
数据来源 | 开放数据域/主域/后台 | 开放数据域/后台 |
数据流向 | 开放数据域 | 开放数据域/主域 |
写入方式 | 覆盖写 | 递增(在开放数据域),覆盖写(后台) |
写入时机 | 任意时机 | 用户点击弹框确认 |
写入对象 | 任意(本人/好友) | 只能写好友(在开放数据域),本人(后台) |
读取对象 | 任意(本人/好友) | 只能读本人 |
关系链互动数据可以从小程序主域直接读取。
提供以下前端接口/组件读写关系链互动数据:
<button open-type="modifyFriendInteractiveStorage">
修改当前用户好友的关系链互动数据提供以下后端接口读写关系链互动数据:
qq.getUserInteractiveStorage(Object object) 获取当前用户互动型托管数据对应 key 的数据
Object object
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
keyList | string | 是 | 要获取的 key 列表 | |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
Object res
属性 | 类型 | 说明 |
---|---|---|
encryptedData | string | 加密数据,包含互动型托管数据的值。解密后的结果为一个 KVDataList,每一项为一个 KVData。 详见 用户数据的签名验证和加解密 |
iv | string | 加密算法的初始向量,详见 用户数据的签名验证和加解密 |
Object res
属性 | 类型 | 说明 |
---|---|---|
errMsg | string | 错误信息 |
修改好友的互动型托管数据,该组件只可在自定义开放数据域
组件下使用。
属性 | 类型 | 默认值 | 说明 | 最低版本 |
---|---|---|---|---|
open-type | string | QQ 开放能力 | 1.19.0 | |
interactive-storage-key | string | 需要修改的数据的 key,目前可以为 '1' - '50' | 1.19.0 | |
interactive-storage-op-num | number | 需要修改的数值,目前只能为 1 | 1.19.0 | |
interactive-storage-operation | string | 修改类型 | 1.19.0 | |
interactive-storage-friend-info | object | 发送对象的 friendInfo | 1.19.0 | |
interactive-storage-title | string | 分享标题,如果设置了这个值,则在交互成功后自动询问用户是否分享给好友(需要配置模板规则) | 1.19.0 | |
interactive-storage-image-url | string | 转发显示图片的链接,可以是网络图片路径(仅 QQ CDN 域名路径)或本地图片文件路径或相对代码包根目录的图片文件路径。显示图片长宽比是 5:4 | 1.19.0 | |
interactive-storage-quiet | boolean | false | 是否静默修改(不弹框)。当进入场景是好友 定向分享 的卡片时有效,代表分享反馈操作,此时 interactive-storage-friend-info 默认为原分享者的 | 1.19.0 |
属性 | 类型 | 说明 |
---|---|---|
openid | string | 用户的 openid |
avatarUrl | string | 用户的 QQ 头像 url |
nickname | string | 用户的 QQ 昵称 |
值 | 说明 |
---|---|
add | 加 |
每次调用该接口会弹窗询问用户是否确认执行该操作,需要在 app.json
中设置 modifyFriendInteractiveStorageTemplates
来定制交互的文案。 modifyFriendInteractiveStorageTemplates
是一个模板数组,每一个模板需要有 key, action, object 参数,还有一个可选参数 ratio, 详细说明见示例配置:
{
"modifyFriendInteractiveStorageTemplates": [
{
"key": "1", // 这个 key 与接口中同名参数相对应,不同的 key 对应不同的模板
"action": "赠送", // 互动行为
"object": "金币", // 互动物品
"ratio": 10 // 物品比率,opNum * ratio 代表物品个数
}
]
}
最后生成的文案为 "确认 actionaction{nickname} object?",或者"确认 object?",或者"确认{action} nicknamenickname{object} x ${opNum * ratio}?
监听成功修改好友的互动型托管数据事件,该接口在主域使用
function callback 事件发生的回调函数,只有一个参数为 qq.modifyFriendInteractiveStorage 传入的 key
由于互动型托管数据涉及用户好友的业务数据,这里为小程序方提供一种安全的,灵活的校验方式。 QQ 小程序平台提供一个后台 JS 运行环境,由开发者上传一段代码,平台方在接受小程序前端发起的写入请求之后执该逻辑,并根据返回结果判断是否要真正执行写入操作。
//checkInteractiveData.js
exports.main = function(arg) {
console.log(arg)
return JSON.stringify({ ret: true })
}
1.工具配置文件 project.config.json 新增配置项
// project.config.json
{
"jsserverRoot": "jsserver"
}
2.配置生效后,该目录不参与编译,所以建议该目录不要包含小程序代码。
├── app.js
├── jsserver
│ └── checkInteractiveData.js
3.鼠标右键点击对应目录,可以看到新建 JS 的选择项,点击即可创建一个 JS 文件,这里一个 JS 文件即为一个小游戏前端请求 JSServer 的入口,文件名即入口标识,如果已经有开发者创建同名 JS,会失败, 目前只支持上传 checkInteractiveData.js。
4.工具可以下载该小程序已经上传的 JS 代码,分为开发版和正式版。
接口名:qq.getOpenId()
参数:无 返回:openid
let openid = qq.getOpenId()
接口名:qq.getFriendUserStorage()
参数:Array.< String >
返回:Array.< KVData >
let friendsStorage = qq.getFriendUserStorage(['friendGift'])
接口名:qq.setFriendUserStorage()
参数:openid,Array.< KVData >
返回:{"errcode":0}
注意:KVData 中的 key 不要使用下划线_
let ret = qq.setFriendUserStorage(openid, [
{
key: 'friendGift',
value: JSON.stringify(giftRecords),
},
])
if (ret.errcode != 0) {
console.error('set err') //console 所打印的日志会通过接口返回给前端
} else {
console.log('set success')
}
备注:
modifyFriendInteractiveData 在具体写入操作之前会默认执行开发者托管在 JSServer 上的一段代码,要求开发者使用开发者工具上传文件 checkInteractiveData.js。
开发者在 checkInteractiveData.js 可以拿到参数