在开放 关系链数据能力 的基础上,小游戏新增 互动型托管数据 ,提供关系链互动能力,用于实现小游戏内QQ好友互动(点赞,送礼物等)的功能。
关系链互动数据能力支持:
互动型托管数据与普通托管数据的对比如下:
- | 普通托管数据 | 互动型托管数据 |
---|---|---|
单用户数据大小 | 128块不大于1K的数据 | 只提供1个32位整形存储。 |
数据来源 | 开放数据域/主域/后台 | 开放数据域/后台 |
数据流向 | 开放数据域 | 开放数据域/主域 |
写入方式 | 覆盖写 | 递增(在开放数据域),覆盖写(后台) |
写入时机 | 任意时机 | 用户点击弹框确认 |
写入对象 | 任意(本人/好友) | 只能写好友(在开放数据域),本人(后台) |
读取对象 | 任意(本人/好友) | 只能读本人 |
关系链互动数据可以从小游戏主域直接读取。
提供以下前端接口读写关系链互动数据
qq.getUserInteractiveStorage
读取当前用户关系链互动数据qq.modifyFriendInteractiveStorage
修改当前用户好友的关系链互动数据提供以下后端接口读写关系链互动数据
获取当前用户互动型托管数据对应 key 的数据
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
keyList | string | 是 | 要获取的 key 列表 | |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
属性 | 类型 | 说明 |
---|---|---|
encryptedData | string | 加密数据,包含互动型托管数据的值。解密后的结果为一个 KVDataList,每一项为一个 KVData。 用户数据的签名验证和加解密 |
iv | string | 加密算法的初始向量,详见 用户数据的签名验证和加解密 |
属性 | 类型 | 说明 |
---|---|---|
errMsg | string | 错误信息 |
修改好友的互动型托管数据,该接口只可在开放数据域下使用。
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
key | string | 是 | 需要修改的数据的 key,目前可以为 '1' - '50' | |
opNum | number | 是 | 需要修改的数值,目前只能为 1 | |
operation | string | 是 | 修改类型 | |
friendInfo | object | 是 | 发送对象的 friendInfo | |
title | string | 否 | 分享标题,如果设置了这个值,则在交互成功后自动询问用户是否分享给好友(需要配置模板规则) | |
imageUrl | string | 否 | 分享图片地址,详见 qq.shareMessageToFriend 同名参数(需要配置模板规则) | |
quiet | boolean | false | 否 | 是否静默修改(不弹框),静默修改需要用户通过快捷分享消息卡片进入才有效,代表分享反馈操作,无需填写 toUser,直接修改分享者与被分享者交互数据 |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
值 | 说明 |
---|---|
add | 加 |
属性 | 类型 | 说明 |
---|---|---|
errMsg | string | 错误信息 |
每次调用该接口会弹窗询问用户是否确认执行该操作,需要在 game.json
中设置 modifyFriendInteractiveStorageTemplates
来定制交互的文案。 modifyFriendInteractiveStorageTemplates
是一个模板数组,每一个模板需要有 key
, action
, object
参数,还有一个可选参数 ratio
,详细说明见示例配置:
{
"modifyFriendInteractiveStorageTemplates": [
{
"key": "1", // 这个 key 与接口中同名参数相对应,不同的 key 对应不同的模板
"action": "赠送", // 互动行为
"object": "金币", // 互动物品
"ratio": 10 // 物品比率,opNum * ratio 代表物品个数
}
]
}
最后生成的文案为 "确认 ${action} ${nickname} ${object}?",或者 "确认 ${action} ${nickname} ${object} x ${opNum * ratio}?"
1.定义函数main
2.export函数main
//checkInteractiveData.js
exports.main = function (arg) {
console.log(arg);
return JSON.stringify({ "ret": true });
}
1.工具配置文件 project.config.json 新增配置项
// project.config.json
{
"jsserverRoot": "jsserver"
}
2.配置生效后,该目录不参与编译,所以建议该目录不在小游戏代码根目录里。
├── game.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>
const friendsStorage = qq.getFriendUserStorage(["friendGift"]);
const userList = friendsStorage.user_item;
接口名: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")
}
qq.modifyFriendInteractiveData 接口在具体写入操作之前会默认执行开发者托管在JSServer上的一段代码,要求开发者使用开发者工具上传文件checkInteractiveData.js。
开发者在checkInteractiveData.js可以拿到参数
开发者可以在checkInteractiveData.js中读写普通托管数据来存储用户互动记录。
提供给定向分享能力,支持用户游戏内向指定好友发起分享。
相关接口
定向分享:qq.shareMessageToFriend
主域设置定向分享参数:qq.setMessageToFriendQuery
给指定的好友分享游戏信息,该接口只可在开放数据域下使用
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
friendInfo | object | 是 | 发送对象的 friendInfo | |
title | string | 否 | 转发标题,不传则默认使用当前小游戏的昵称。 | |
imageUrl | string | 否 | 转发显示图片的链接,可以是网络图片路径(仅 QQ CDN 域名路径)或本地图片文件路径或相对代码包根目录的图片文件路径。显示图片长宽比是 5:4 | |
success | function | 否 | 接口调用成功的回调函数 | |
fail | function | 否 | 接口调用失败的回调函数 | |
complete | function | 否 | 接口调用结束的回调函数(调用成功、失败都会执行) |
定向分享不允许直接在开放数据域设置 query
参数 需要设置请参见游戏域 qq.setMessageToFriendQuery
接口
# friendInfo
用户信息
# 属性
# string avatarUrl
用户的QQ头像 url
# string nickname
用户的QQ昵称
# string openid
用户 openid
# KVData
托管的 KV 数据
# 属性
# string key
数据的 key
# string value
数据的 value
设置 qq.shareMessageToFriend 接口 query 字段的值
属性 | 类型 | 默认值 | 必填 | 说明 |
---|---|---|---|---|
shareMessageToFriendScene | number | 是 | 需要传递的代表场景的数字,需要在 0 - 50 之间 |
是否设置成功