如何为应用接入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
相关产品推荐
相关产品推荐

