分享组队接入指南
能力简介
“分享组队”是小游戏提供的一种高级社交分享能力。它允许开发者创建一种可动态更新状态的“动态消息”卡片,支持用户通过抖音私信(IM) 私聊或群聊场景快速邀请好友组队进入游戏。
从客户端 30.9.0 开始,支持转发动态消息。动态消息对比普通消息的优点是:消息发出去之后,开发者可以通过后台接口修改部分消息内容。
适用场景
- •多人组队游戏:如 MOBA、FPS 或“开黑”类游戏,房主创建房间后分享到好友群,群友可看到实时人数变化和游戏状态变化(组队中或者已开始)。
- •社交棋牌游戏:创建棋牌室后邀请牌友,卡片标题显示“好友已就位,就等你补位!”,吸引好友快速加入。
- •限时活动邀请:如“今晚 8 点 Boss 挑战,仅限 10 人”,通过动态消息实时更新剩余名额,营造紧迫感。
用户体验
玩法专区体验示例
页面功能描述 | 示意图 |
| 一级页面: 单款游戏平均日曝光人数 >1kw,单款游戏日点击人数>3w,日新增贡献>2w 二级页面: 单款游戏平均日曝光人数 ≈20w,单款游戏日点击人数>1k,日新增贡献 ≈500 |
| 组队成功率>50%,进一步贡献游戏启动uv |
玩法专区游戏资源位说明
- •保底资源:已完成组队分享能力接入的小游戏,保证游戏稳定在玩法专区二级页面展示。
- •排序逻辑:平台将依据游戏的曝光点击转化率、组队发起成功率等核心指标对玩法专区的游戏动态调优排序,转化效率最高的头部优质游戏,有机会晋升至玩法专区一级页面进行展示,获取更高曝光流量倾斜。
游戏内发起组队示例(非IM玩法专区入口)
页面描述 | 示意图 |
| |
|
动作收益
游戏动作 | 游戏收益 (参考40+款已接入游戏的动作前后数据) |
游戏新增【组队玩法】收益 |
|
游戏上架【玩法专区】收益 |
|
能力接入
接入流程简述
核心特性
- •动态更新:分享卡片发出后,其展示状态和内容(如“1/2组队中”)可通过服务端 API 实时更新,为接收方提供最及时的房间信息。
- •状态流转:消息拥有明确的生命周期(如:招募中 → 已开始 → 已结束),并支持在状态变更时更新卡片点击后的跳转逻辑(
query 参数)。- •高效触达:分享以 IM 私信卡片形式发送给指定好友或群聊,对在线用户有强提醒,点击即可直接拉起游戏,路径短、转化高。
- •数据透传:支持通过
query 参数在分享和启动链路中传递自定义信息,如房间号、邀请者 ID 等,便于实现自动进房、邀请归因与奖励发放等逻辑。
接入流程详情
交互时序图:
Step 1:创建房间
- •抖音聊天场景内 - 「一起玩」启动游戏并自动创建房间
游戏客户端需要通过tt.getLaunchOptionsSync
或者tt.onShow来获取启动参数,判断如果是发起者的一键组队启动场景则开始创建房间逻辑。聊天框内一起玩自动发卡的启动参数:key=_team_action,value=create。示例代码:
// 在游戏启动时 launchOptions = tt.getLaunchOptionsSync(); console.log("游戏启动参数:", launchOptions); if (launchOptions.query && launchOptions.query._team_action == "create") { console.log(`一键组队场景`); // 执行创建房间的逻辑... createRoom(roomId); }
特别地,如果需要根据聊天类型(群聊或者私聊)创建不同的组队房间,则可以从query中额外获取
_chat_type,其值 1 为 私聊,2 为 群聊。获取方式同上述 _team_action。- •游戏内 - 用户主动创建房间
无需和平台侧有交互
Step 2:创建 activity_id
注意:
- •
activity_id 是后续所有操作(客户端分享、服务端更新)的凭证,请务必妥善保存。- •活动到期后(默认 24 小时),分享卡片将自动变为“已结束”状态,且无法再被更新。
- •如果上一次发卡已经创建过了
activity_id,且与上一次是同一个组队房间,则请勿重复创建activity_id
Step 3:发送组队卡
参数 | 类型 | 默认值 | 必填 | 说明 |
channel | string | - | 是 |
team_up
invite |
query | string | - | 否 | 查询字符串,必须是 key1=val1&key2=val2 的格式。从这条转发消息进入后,可通过 tt.getLaunchOptionsSync 获取启动参数中的 query 用来实现信息透传 |
templateId | string | - | 否 | channel为invite时必传此素材 ID,指定通过平台审核的 templateId 来选择分享内容,需在平台设置且通过审核 |
extra | Extra | - | 是 | 请看 Extra类型说明 |
success | function | - | 否 | 分享成功后执行的回调函数 |
fail | function | - | 否 | 分享失败或者用户取消发布器后执行的回调函数 |
complete | function | - | 否 | 分享完成(无论成功与否)后执 行的回调函数 |
其中
templateId 分享素材ID通过如下图进行配置后获取图一
图二
Extra类型说明
参数 | 类型 | 默认值 | 必填 | 说明 |
useTeamInvitationStyle | boolean | - | 是 | true |
activityID | string | - | 是 | 从第2步中获取的 activity_id。 |
templateInfo | Array<TemplateInfo> | - | 是 | 数组,组队卡参数。TemplateInfo 对象包含 name 和 value 两个字段。 |
versionType | string | current | 否 | 指定通过此消息启动的小游戏版本,默认为 current (线上版),可设为 latest (开发版) 用于测试。 |
TemplateInfo类型说明
参数 | 类型 | 默认值 | 必填 | 说明 |
name | string | - | 是 | 参数名,有效值: memberCount——当前 房间人数roomLimit——房间人数上限users——当前房间内的玩家OpenID |
value | string | - | 是 | 参数值 |
示例代码:
tt.shareAppMessage({ channel: "team_up", //识别发卡场景,传team_up或者invite query: "roomId=xxx&key2=val2", // 一般需要带上一些房间id之类的字段,由开发者自行定义实现 extra: { activityID: "6800*****", // 从服务端createActivityID获取 templateInfo: [ { name: "memberCount", value: "1" // 初始人数 }, { name: "roomLimit", value: "4" // 房间人数上限 }, { name: "users", value: '[\"grtmlx2dqcmTO7C\"]' // 当前房间内的用户OpenID,为空则传[] } ], versionType: "current" // 指定通过动态消息进入的小游戏版本:线上版current、测试版latest }, success() { console.log("分享成功"); // 可在此处上报分享成功事件 }, fail(e) { console.log("分享失败"); }, });
错误码
errNo | errMsg | 错误原因 |
20001 | xxx should be xxx, but got xxx | 参数错误 |
20002 | missing debug uid for channel "team_up" | 模拟组队时无法读取测试的uid,可能是启动参数_team_debug_mode=1 时缺少_team_debug_uid,或者是弹窗提示输入uid时取消输入 |
10401 | server error ${data.err_msg} | 平台服务端错误 |
10103 | network unavailable | 网络请求不可达 |
Step 4:好友点击卡片进入游戏
示例代码:
const launchOptions = tt.getLaunchOptionsSync(); console.log("游戏启动参数:", launchOptions); if (launchOptions.query) { const activityID = launchOptions.query.activity_id; const roomID = launchOptions.query.room_id; console.log(`通过分享卡片进入,activityID为: ${activityID},roomID为: ${roomID}`); // 执行加入房间的逻辑... joinRoom(roomId); }
如果是发起组队的人关掉游戏,从群聊组队卡进入游戏, 这时候会回到之前的游戏,并触发tt.onShow,开发者可以在tt.onShow的回调参数读到res.query判断是否需要引导用户进房
Step 5:更新组队卡状态
消息状态说明 (
target_state)消息有3个状态,分别有其对应的文字内容。其中状态 0 可以转移到状态 0 、1和2,状态 1和状态2 无法再转移。
字段 | 取值 | 状态说明 | 允许转移的状态 |
target_state | 0 | 组队中 | 0, 1, 2 |
1 | 组队成功,队伍成员不再发生变更,一般是游戏已开始 | 无 | |
2 | 组队失败,一般是队伍解散 | 无 |
组队卡参数 (
template_info):见“Step 3:发送组队卡”,注意users需要尽可能保证此数组中最先进房的玩家排在前面,最后进房的玩家排在最后面。新增参数 (
card_version):默认为1即可示例代码:
curl --location 'https://minigame.zijieapi.com/mgplatform/api/apps/share/update_dynamic_message' \ --header 'access-token: 08011218462b4b54307662766c3150454833752b353739513d3d' \ --header 'Content-Type: application/json' \ --data '{ "access_token": "08011218462b4b54307662766c3150454833752b353739513d3d", "activity_id": "562176002", "target_state": 0, "card_version": 1, "query": "?room_id=48796951", "version_type": "", "template_info": [ { "name": "memberCount", "value": "2" }, { "name": "roomLimit", "value": "3" }, { "name": "users", "value": "[\"abc\",\"abc\"]" } ] } '
上线前的预览调试
- •小游戏接入能力,需要发版上线后才有可能在群聊功能的组队玩游戏列表中可见。为了方便开发者在上线前完成调试开发,在上述的接入流程增设以下步骤:
模拟发起组队场景
步骤 | 示意图 | 步骤描述 |
指定启动参数 | |
_team_action=create&_team_debug_mode=1。
|
模拟流程说明 | |
|
生成预览码 | |
_team_action=create&_team_debug_mode=1&_team_debug_uid=${uid} ,生成预览码在真机上模拟发送组队卡 |
模拟器内完成测试流程 | |
|
模拟加入组队场景
步骤 | 流程说明 |
模拟加入组队测试 |
|
验收 & 上架「组队一起玩」资源位流程
- •需先按以下步骤和测试要求,由厂商自行完成验收并录屏,梳理能力验收文档
- •由验收后,每周五18:00前完成资源上架
- •资源上架后,可通过以下路径查看游戏资源上架情况
验收文档步骤名称 | 验收文档详情说明 | 示意图 |
Step1:梳理游戏基本信息 |
|
