# 擂台赛组件-开发指南

# 功能说明

擂台赛组件是小游戏官方提供的赛事玩法互动组件。游戏内,擂主邀请好友参与擂台挑战,获胜方可领取擂台赛奖励;游戏外,以「服务通知」和「聊天工具」的社交形式增加回流触达。

【平台限时激励包奖励】 2026年春节期间,可配置平台「擂台赛比拼玩法激励包」作为擂台赛奖励。查看详情

# 玩法介绍

擂台赛玩法C端体验路径:跳一跳-单局超过200分发起「有奖擂台赛」

# 1. 发起擂台赛

● 用户在游戏内,完成游戏对局,产生 结算分数,用户可 向朋友发起擂台赛;

● 擂主发起后不可再次参与,分数不可更改。每个成功发起的擂台赛,有效时间可开发者自定义;

● 擂台赛发起入口、条件,由开发者自定义并控制。

# 2. 参与擂台赛

● 朋友可以通过分享链接,进入游戏,向擂主发起挑战;

● 参与玩家在赛事有效期内可多次尝试。

# 奖励规则

每个擂台赛配置4个礼包,守擂/挑战成功后,可领取对应奖励。开发者可自行设置奖励限额、不同用户不同概率

# 1. 擂主

守擂成功:任意用户参与擂台赛 且 在擂台赛举办期间未超过发起者的分数,视为发起者本次守擂成功;

奖励领取:每个擂台赛,擂主至少守擂成功一次,所有奖励领取时,可按设定概率抽取1次「擂主-稀有奖品」,并按成功次数获得「擂主-必中奖品」;

# 2. 参与者

挑战成功:参与擂台赛并超过擂主设定的目标分数后,视为本擂台赛挑战成功;

奖励领取:每个擂台赛挑战成功,挑战者将固定获得「挑战者-必中奖品」,并按设定的概率抽取「挑战者-稀有奖品」;

# 用户触达

组件支持以社交形式增加回流触达。群聊场景将以聊天工具卡片形式分享:聊天工具模式下,可在卡片实时展示挑战成功人数,并在用户参与/挑战成功/擂台赛结束时,通过群内消息形式下发全局通知。

# 如何接入擂台赛组件

开发者可参考以下方法,快捷完成接入。

# 1. 完成游戏玩法ID设置

● 位置:MP-运营功能管理-基础配置-游戏玩法ID设置

● 用于上报用户当局游戏结果,结果支持 数值、时间格式、枚举格式。

● 游戏玩法生效后,除枚举值新增/修改名称外,不支持更改。

# 2. 配置奖励礼包

● 礼包类型:擂台赛礼包 礼包接入文档

● 建议每个礼包内只包含一个道具。多个道具情况下,采用首个道具icon与名称为c端展示。建议上传透明底的icon图。

● 需要提供 4 个 礼包 id。建议擂主与挑战者 在相同场景(保底、抽奖)奖励相同。

​​  ○ 礼包1:擂主 守擂成功 保底奖励

​​  ○ 礼包2:擂主 守擂成功 稀有奖励

​​  ○ 礼包3:参与者 挑战成功 保底奖励

​​  ○ 礼包4:参与者 挑战成功 稀有奖励

# 3. 配置擂台赛

位置:MP-能力地图-擂台赛组件-关联擂台赛的奖励、ID

# 4. 开发接入实现

版本要求:从基础库 3.13.1 开始支持

支持平台:Android 微信 8.0.65 及以上版本、iOS 微信 8.0.65 及以上版本

# 4.1 接入前准备

聊天工具的分享功能要求小游戏具备有效的登录态。为确保用户分享擂台赛时游戏已建立登录态,需要在擂台赛开始前调用 wx.login 接口完成登录流程。

# 4.2 发起擂台赛

擂台赛功能基于 wx.getRankManager() API 实现,通过该接口返回的类方法进行相关操作。

# 4.2.1 上报擂主分数

发起擂台赛前,需要先上报玩家发起擂台赛的基准分数。使用 update 方法进行分数上报。

// 获取排行榜管理器实例
const rankManager = wx.getRankManager();
// 上报用户分数
rankManager.update({
  scoreKey: 'score_key', // 在MP配置的scoreKey
  score: 100, // 具体分数值
  success: res => {
  console.log('分数上报成功', res);
  },
  fail: err => {
  console.error('分数上报失败', err);
  },
});

# 4.2.2 创建擂台赛

分数上报成功后,使用 createChallenge 方法发起擂台赛。

// 发起擂台赛
wx.getRankManager().createChallenge({
  scoreKey: 'score_key',
  success: res => {
  console.log('擂台赛创建成功', res);
  },
  fail: err => {
  console.error('擂台赛创建失败', err);
  },
});

注意事项:

  • 一次 update 上报的分数只能创建一个擂台赛。

  • 针对同一次上报多次调用 createChallenge 将返回已创建的擂台赛。

# 4.3 加入擂台赛

# 4.3.1 监听挑战开始事件

用户从他人分享的擂台赛卡片进入小游戏,小游戏会在 onShow 时弹起加入擂台赛半屏。用户点击半屏上的“立即挑战”按钮,擂台赛挑战开始。 通过 rankManager.onChallengeStart(callback) 监听onChallengeStart事件,在onChallengeStart事件的回调中处理挑战开始逻辑。

// 监听擂台赛开始事件
wx.getRankManager().onChallengeStart((challengeInfo) => {
  // 处理挑战开始逻辑
  console.log('擂台赛开始', challengeInfo.scoreKey);
});

# 4.3.2 中途操作

擂台赛进行过程中,支持以下操作:

● 中途上报分数。擂台赛的最终分数将取中途上报分数和最终上报分数中最高的一次。

// 游戏过程中上报中间分数
wx.getRankManager().middleUpdate({
  scoreKey: 'score_key',
  score: gameState.score, // 当前分数
  success: res => {
  console.log('中途分数上报成功', res);
  },
  fail: err => {
  console.error('中途分数上报失败', err);
  },
});

● 中途退出挑战。中途退出的擂台赛,本次挑战为0分。

// 中途退出擂台赛
wx.getRankManager().abort({
  success: (res) => {
  console.log('擂台赛退出成功', res);
  },
  fail: (err) => {
  console.error('擂台赛退出失败', err);
  },
});

# 4.4 结束擂台赛

在擂台赛进行过程中调用 update 方法上报最终分数,系统将自动结束擂台赛并拉起结束界面。

// 结束擂台赛并上报最终分数
wx.getRankManager().update({
  scoreKey: 'score_key',
  score: 150, // 最终分数
  success: res => {
  console.log('擂台赛结束', res);
  },
  fail: err => {
  console.error('擂台赛结束异常', err);
  },
});

# 4.5 奖励领取

挑战者战胜擂主,或者擂主守擂成功时,可以在擂台赛组件结果页领取道具奖励。

// 监听挑战赛福利组件信息变更
wx.onOfficialComponentsInfoChange(componentInfo => {
    let receiveDetail = componentInfo.challengeRewardsComponentInfo?.receiveDetail;
    if (receiveDetail) { // 挑战赛礼包领取事件
        // 处理奖励领取结果
        switch (receiveDetail.awardResult) {
            case 1:
                console.log('奖励全部领取成功!');
                break;
            case 2:
                console.log('奖励部分领取成功');
                break;
            case 3:
                console.log('奖励领取失败');
                break;
        }
        // 检查是否领取了稀有奖励
        if (receiveDetail.receivedRareReward === true) {
            console.log('恭喜!领取了稀有奖励!');
        }
        // 遍历用户领取的奖励列表
        receiveDetail.userSourceList.forEach((userSource, index) => {
            if (userSource.source) {
                console.log(`${index + 1}个奖励:`);
                console.log('  礼包名称:', userSource.source.sourceName);                
                // 遍历道具列表
                userSource.source.propList?.forEach(prop => {
                    console.log(`${prop.propName} x${prop.propNum}`);
                });
            }
        });
    }
});

# 4.6 查询擂台赛的成功邀请次数(灰度测试)

开发者可以通过该接口,查询擂主或参与者,当天成功发起擂台赛邀请的次数。仅包括通过小程序卡片发起的邀请。

接口需要通过小游戏官方插件进行调用,小游戏官方插件的使用指南请参考:小游戏官方插件

接口定义:

getGamePkShareData(pkRole: number):  Promise<GamePkShareDataResponse> 

参数:

属性 类型 说明
pkRole number 邀请发起人身份, 1表示擂主,2表示参与者

返回值 GamePkShareDataResponse:

属性 类型 说明
shareCount number 今天成功发起擂台赛邀请次数

error对象结构:

属性 类型 说明
errMsg string 错误原因

使用示例:

const pkRole = 1;
GameGlobal.miniGameCommon.getGamePkShareData(pkRole)
  .then((res) => {
    console.log('邀请次数为:', res.shareCount);
  }).catch((err)=>{
    console.error('error', err.errMsg);
  });

点击咨询小助手