Bring Recurring Leaderboards to your game
Graphics & Games 进阶 15m

为你的游戏添加循环排行榜

Bring Recurring Leaderboards to your game

2021年6月10日

在 Apple 官方观看视频

一句话判断

循环排行榜(Recurring Leaderboards)让每周/每月自动重置的排行榜成为原生能力,终于不用自己搞定时任务清数据了 —— 但前提是你得接受苹果的排行榜 UI 设计。

这场 Session 讲了什么

这次更新给 Game Center 的排行榜系统引入了”循环”概念。以前的排行榜是永久的,分数只会被不断覆盖,排行榜永远被早期玩家霸占。现在你可以设置排行榜按固定周期重置:每天、每周或每月。每个周期结束后,新一轮排行榜自动开始,旧的排行榜成绩归档为历史记录。

这个功能在 App Store Connect 中配置,不需要写任何代码来管理周期。玩家可以看到当前周期的排名,也能查看历史周期的冠军。游戏内通过 GKLeaderboard API 获取数据,和普通排行榜的调用方式一致。

Session 还讲解了如何在 App Store Connect 中设置 recurring leaderboard:选择时间间隔、设置开始日期、配置玩家范围。一切配好之后,系统自动处理重置逻辑。

值得深挖的点

循环排行榜的时区处理是个隐性坑。重置时间基于太平洋时间(PT),如果你的玩家主要在亚太地区,“每周重置”可能发生在当地周五而非周一。目前没有办法自定义时区,需要在游戏内做文案说明。

历史排行榜的数据访问。每个完成的周期会生成一个 GKLeaderboardEntry 的归档,通过设置 leaderboard 的 playerScopetimeScope 可以检索特定周期的数据。这为”名人堂”或”历史冠军展示”功能提供了数据基础,但 API 没有直接按周期 ID 查询的能力,只能按时间范围筛选。

代码片段

加载当前周期的排行榜

import GameKit

func loadWeeklyLeaderboard() {
    let leaderboard = GKLeaderboard()
    leaderboard.playerScope = .global
    leaderboard.timeScope = .week  // 获取本周循环排行榜
    leaderboard.identifier = "weekly_score"
    leaderboard.loadScores { scores, error in
        guard let scores = scores else { return }
        for score in scores {
            print("玩家: \(score.player.alias), 分数: \(score.value)")
        }
    }
}

提交分数到循环排行榜

import GameKit

func submitScore(_ score: Int) {
    // 向指定循环排行榜提交分数
    GKLeaderboard.submitScore(
        score,
        context: 0,
        player: GKLocalPlayer.local,
        leaderboardIDs: ["weekly_score"]
    ) { error in
        if let error = error {
            print("提交分数失败: \(error.localizedDescription)")
        }
    }
}

展示排行榜 UI

import GameKit

func showLeaderboard() {
    let viewController = GKGameCenterViewController(
        leaderboardID: "weekly_score",
        playerScope: .global,
        timeScope: .week
    )
    viewController.gameCenterDelegate = self
    present(viewController, animated: true)
}

最佳实践

  1. 为不同玩家规模选择不同的重置周期。日活 10 万以上的游戏适合每日重置,中小体量用每周重置更合理,否则每个周期只有几个人参与,排行榜缺乏竞争感。
  2. 循环排行榜适合”赛季”概念。配合成就系统和奖励机制,每个周期结束时给冠军发限定道具或称号,形成循环激励。
  3. 不要完全依赖系统 UIGKGameCenterViewController 的样式你控制不了,如果游戏有强品牌调性,建议用 GKLeaderboard API 拉数据后自绘 UI。

还有什么值得关注

  • 循环排行榜最多支持同时激活 100 个,足够覆盖不同游戏模式。
  • 经典(Classic)排行榜仍然可用,不会被废弃,两种类型可以共存。
  • 排行榜数据在 App Store Connect 中有更详细的统计面板,能看到每个周期的参与人数趋势。
WWDC 2021