# RankManager wx.getRankManager()

基础库 3.10.1 开始支持,低版本需做兼容处理

# 功能描述

初始化并返回一个擂台赛管理器实例,用于管理游戏得分存取、得分排行榜(开发中)以及擂台赛功能。小游戏擂台赛功能介绍详见小游戏擂台赛指南文档

# 返回值

# RankManager

擂台赛管理器实例,全局单例。

# 示例代码

1 存取用户得分

1.1 上报用户分数

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

1.2 查询用户最新得分

示例代码 <div class="language-js extra-class"><pre class="language-js"><code><span class="token keyword">const</span> rankManager <span class="token operator">=</span> wx<span class="token punctuation">.</span><span class="token function">getRankManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token keyword">const</span> rankManager <span class="token operator">=</span> wx<span class="token punctuation">.</span><span class="token function">getRankManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span> rankManager<span class="token punctuation">.</span><span class="token function">getScore</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">scoreKeys</span><span class="token operator">:</span> <span class="token punctuation">[</span><span class="token string">'score_key'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token literal-property property">periodType</span><span class="token operator">:</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token comment">// 自然日最高分</span> <span class="token function-variable function">success</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token parameter">res</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'分数信息'</span><span class="token punctuation">,</span> res<span class="token punctuation">.</span>scores<span class="token punctuation">)</span> <span class="token comment">// res.scores 格式: { 'score_key': { score: 100, timestamp: 1234567890 } }</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">)</span> <span class="token operator">**</span><span class="token number">2</span> 发起擂台赛<span class="token operator">**</span> <span class="token operator">**</span><span class="token number">2.1</span> 接入前准备<span class="token operator">**</span> 擂台赛组件的分享和动态消息功能依赖<span class="token punctuation">[</span>聊天工具模式<span class="token punctuation">]</span><span class="token punctuation">(</span>https<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>developers<span class="token punctuation">.</span>weixin<span class="token punctuation">.</span>qq<span class="token punctuation">.</span>com<span class="token operator">/</span>minigame<span class="token operator">/</span>dev<span class="token operator">/</span>guide<span class="token operator">/</span>open<span class="token operator">-</span>ability<span class="token operator">/</span>chat<span class="token operator">-</span>tool<span class="token punctuation">.</span>html<span class="token punctuation">)</span>。 聊天工具的分享功能要求小游戏具备有效的登录态。为确保用户分享擂台赛时游戏已建立登录态,需要在擂台赛开始前调用<span class="token punctuation">[</span>wx<span class="token punctuation">.</span>login<span class="token punctuation">]</span><span class="token punctuation">(</span>https<span class="token operator">:</span><span class="token operator">/</span><span class="token operator">/</span>developers<span class="token punctuation">.</span>weixin<span class="token punctuation">.</span>qq<span class="token punctuation">.</span>com<span class="token operator">/</span>minigame<span class="token operator">/</span>dev<span class="token operator">/</span>api<span class="token operator">/</span>open<span class="token operator">-</span>api<span class="token operator">/</span>login<span class="token operator">/</span>wx<span class="token punctuation">.</span>login<span class="token punctuation">.</span>html<span class="token punctuation">)</span>接口完成登录流程。 <span class="token operator">**</span><span class="token number">2.2</span> 上报擂主分数<span class="token operator">**</span> 发起擂台赛前,需要先上报玩家发起擂台赛的基准分数。使用 <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token string">update</span><span class="token template-punctuation string">`</span></span> 方法进行分数上报。 <span class="token template-string"><span class="token template-punctuation string">`</span><span class="token template-punctuation string">`</span></span>`js <span class="token comment">// 获取擂台赛管理器实例</span> <span class="token keyword">const</span> rankManager <span class="token operator">=</span> wx<span class="token punctuation">.</span><span class="token function">getRankManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment">// 上报用户分数</span> rankManager<span class="token punctuation">.</span><span class="token function">update</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">scoreKey</span><span class="token operator">:</span> <span class="token string">'score_key'</span><span class="token punctuation">,</span> <span class="token comment">// 在MP配置的scoreKey</span> <span class="token literal-property property">score</span><span class="token operator">:</span> <span class="token number">100</span><span class="token punctuation">,</span> <span class="token comment">// 具体分数值</span> <span class="token function-variable function">success</span><span class="token operator">:</span> <span class="token parameter">res</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'分数上报成功'</span><span class="token punctuation">,</span> res<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function-variable function">fail</span><span class="token operator">:</span> <span class="token parameter">err</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'分数上报失败'</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre></div><p><strong>2.3 创建擂台赛</strong></p> <p>分数上报成功后,使用 <code>createChallenge</code> 方法发起擂台赛。</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token comment">// 发起擂台赛</span> wx<span class="token punctuation">.</span><span class="token function">getRankManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">createChallenge</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">scoreKey</span><span class="token operator">:</span> <span class="token string">'score_key'</span><span class="token punctuation">,</span> <span class="token function-variable function">success</span><span class="token operator">:</span> <span class="token parameter">res</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'擂台赛创建成功'</span><span class="token punctuation">,</span> res<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function-variable function">fail</span><span class="token operator">:</span> <span class="token parameter">err</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'擂台赛创建失败'</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre></div><p>注意事项:</p> <ul><li>一次 <code>update</code> 上报的分数只能创建一个擂台赛。</li> <li>针对同一次上报多次调用 <code>createChallenge</code> 将返回已创建的擂台赛。</li></ul> <p><strong>3 加入擂台赛</strong></p> <p><strong>3.1 监听挑战开始事件</strong></p> <p>用户从他人分享的擂台赛卡片进入小游戏,小游戏会在 onShow 时弹起加入擂台赛半屏。用户点击半屏上的"立即挑战"按钮,擂台赛挑战开始。 通过 <code>rankManager.onChallengeStart(callback)</code> 监听onChallengeStart事件,在onChallengeStart事件的回调中处理挑战开始逻辑。</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token comment">// 监听擂台赛开始事件</span> wx<span class="token punctuation">.</span><span class="token function">getRankManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">onChallengeStart</span><span class="token punctuation">(</span><span class="token punctuation">(</span><span class="token parameter">challengeInfo</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> <span class="token comment">// 处理挑战开始逻辑</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'擂台赛开始'</span><span class="token punctuation">,</span> challengeInfo<span class="token punctuation">.</span>scoreKey<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre></div><p>注意事项:</p> <ul><li>应尽早监听 onChallengeStart,推荐在游戏初始化或 onLaunch 生命周期里监听。由于用户点击“立即挑战”事件会等到onChallengeStart成功注册后再派发,过晚监听可能出现用户点了立即挑战,游戏没有及时开始擂台赛的情况。</li></ul> <p><strong>3.2 中途操作</strong></p> <p>擂台赛进行过程中,支持以下操作:</p> <p>中途上报分数。擂台赛的最终分数将取中途上报分数和最终上报分数中最高的一次。中途上报不会结束擂台赛。</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token comment">// 游戏过程中上报中间分数</span> wx<span class="token punctuation">.</span><span class="token function">getRankManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">middleUpdate</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">scoreKey</span><span class="token operator">:</span> <span class="token string">'score_key'</span><span class="token punctuation">,</span> <span class="token literal-property property">score</span><span class="token operator">:</span> gameState<span class="token punctuation">.</span>score<span class="token punctuation">,</span> <span class="token comment">// 当前分数</span> <span class="token function-variable function">success</span><span class="token operator">:</span> <span class="token parameter">res</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'中途分数上报成功'</span><span class="token punctuation">,</span> res<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function-variable function">fail</span><span class="token operator">:</span> <span class="token parameter">err</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'中途分数上报失败'</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre></div><p>中途退出挑战,并拉起擂台赛结果页。中途退出的擂台赛,本次挑战为0分。</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token comment">// 中途退出擂台赛</span> wx<span class="token punctuation">.</span><span class="token function">getRankManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">abort</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token function-variable function">success</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token parameter">res</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'擂台赛退出成功'</span><span class="token punctuation">,</span> res<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function-variable function">fail</span><span class="token operator">:</span> <span class="token punctuation">(</span><span class="token parameter">err</span><span class="token punctuation">)</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'擂台赛退出失败'</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre></div><p><strong>3.3 结束擂台赛</strong></p> <p>在擂台赛进行过程中调用 <code>update</code> 方法上报最终分数,系统将自动结束擂台赛并拉起结束界面。</p> <div class="language-js extra-class"><pre class="language-js"><code><span class="token comment">// 结束擂台赛并上报最终分数</span> wx<span class="token punctuation">.</span><span class="token function">getRankManager</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">update</span><span class="token punctuation">(</span><span class="token punctuation">{</span> <span class="token literal-property property">scoreKey</span><span class="token operator">:</span> <span class="token string">'score_key'</span><span class="token punctuation">,</span> <span class="token literal-property property">score</span><span class="token operator">:</span> <span class="token number">150</span><span class="token punctuation">,</span> <span class="token comment">// 最终分数</span> <span class="token function-variable function">success</span><span class="token operator">:</span> <span class="token parameter">res</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">'擂台赛结束'</span><span class="token punctuation">,</span> res<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token function-variable function">fail</span><span class="token operator">:</span> <span class="token parameter">err</span> <span class="token operator">=></span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">error</span><span class="token punctuation">(</span><span class="token string">'擂台赛结束异常'</span><span class="token punctuation">,</span> err<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">}</span><span class="token punctuation">)</span><span class="token punctuation">;</span> </code></pre></div><p><strong>3.4 奖励领取</strong></p> <p>挑战者战胜擂主,或者擂主守擂成功时,可以在擂台赛组件结果页领取道具奖励。</p>
点击咨询小助手