You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为应用接入Game Center排行榜?求Swift 5版本实现代码

Swift 5 Game Center 排行榜集成代码实现

前置校验

你已经完成的Xcode开启Game Center功能、App Store Connect创建排行榜的流程符合要求,只需提前记录你在App Store Connect中设置的排行榜ID,后续代码需要用到。

核心代码实现

1. 基础导入

首先在需要使用Game Center功能的Swift文件顶部导入GameKit框架:
import GameKit

2. 本地玩家认证

需要在App启动后尽早调用该方法,触发Game Center登录流程,建议放在根控制器的viewDidLoad中调用:

func authenticateLocalPlayer() {
    let localPlayer = GKLocalPlayer.local
    localPlayer.authenticateHandler = { [weak self] viewController, error in
        if let loginVC = viewController {
            self?.present(loginVC, animated: true)
        } else if localPlayer.isAuthenticated {
            print("Game Center 登录成功")
        } else {
            print("Game Center 登录失败:\(error?.localizedDescription ?? "未知错误")")
            // 可自定义用户拒绝登录后的业务逻辑
        }
    }
}

3. 提交分数到排行榜

在游戏结束、分数结算完成后调用该方法提交分数:

/// 提交分数到指定排行榜
/// - Parameters:
///   - score: 最终结算的分数值
///   - leaderboardID: 你在App Store Connect中创建的对应排行榜ID
func submitScore(score: Int, leaderboardID: String) {
    guard GKLocalPlayer.local.isAuthenticated else {
        print("用户未登录Game Center,分数提交失败")
        return
    }
    let gkScore = GKScore(leaderboardIdentifier: leaderboardID)
    gkScore.value = Int64(score)
    GKScore.report([gkScore]) { error in
        if let error = error {
            print("分数提交出错:\(error.localizedDescription)")
        } else {
            print("分数提交成功")
        }
    }
}

4. 打开排行榜界面

用户点击排行榜按钮时调用该方法,拉起系统自带的Game Center排行榜页面:

func openLeaderboard() {
    guard GKLocalPlayer.local.isAuthenticated else {
        print("用户未登录Game Center,无法查看排行榜")
        return
    }
    // 替换下方leaderboardID为你自己的排行榜ID,可按需修改玩家范围、时间范围参数
    let gcVC = GKGameCenterViewController(leaderboardID: "你的排行榜ID", playerScope: .global, timeScope: .allTime)
    gcVC.gameCenterDelegate = self
    present(gcVC, animated: true)
}

5. 实现关闭代理

需要在当前控制器实现GKGameCenterControllerDelegate协议,处理排行榜页面的关闭逻辑:

// 替换YourViewController为你实际使用的控制器类名
extension YourViewController: GKGameCenterControllerDelegate {
    func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {
        gameCenterViewController.dismiss(animated: true)
    }
}

注意事项

  • 所有Game Center相关操作执行前必须校验本地玩家已登录,避免出现无响应或崩溃
  • 提交的分数类型需要和你在App Store Connect中设置的排行榜分数类型完全匹配
  • 测试时需要使用登陆了有效Apple ID的真机或模拟器,沙盒环境下即可正常测试分数提交、排行榜查看功能
  • 多排行榜场景仅需传入对应排行榜ID即可复用上述逻辑

内容的提问来源于stack exchange,提问作者Folzo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 11:54:05