GameCenter 排行榜

先决条件:

  1. Apple 开发者帐户
  2. 使用 iTunesConnect 设置 GameCenter 排行榜

设置 GameCenter 排行榜:

  1. 登录 iTunesConnect
  2. 转到我的应用程序。为你的项目创建一个应用程序,然后转到功能
  3. 点击游戏中心
  4. 单击排行榜旁边的加号。
  5. 为排行榜类型选择单个排行榜
  6. 创建排行榜参考名称供你参考。
  7. 为你的应用创建排行榜 ID ,以便在报告分数时参考。
  8. 将分数格式设置为 Integer
  9. 分数提交将是最佳分数
  10. 单击添加语言并填写条目。

复制你制作的 LeaderboardID,然后转到 Xcode。

使用 Xcode

我们将使用 4 种功能。

  1. 导入框架并设置协议

  2. 检查用户是否已登录 GameCenter

  3. 将分数报告给 GameCenter

  4. 查看排行榜

  5. 导入 GameKit import GameKit 协议 GKGameCenterControllerDelegate

  6. 现在我们要检查用户是否已登录 GameCenter

func authenticateLocalPlayer() {
        
        let localPlayer = GKLocalPlayer.localPlayer()
        localPlayer.authenticateHandler = { (viewController, error) -> Void in
            
            if viewController != nil {
                //If the user is not signed in to GameCenter, we make them sign in
                let vc:UIViewController = self.view!.window!.rootViewController!
                vc.presentViewController(viewController!, animated: true, completion: nil)
                
            } else {
                
                //Do something here if you want
            }
        }
    }
  1. 现在用户正在使用该应用程序,突然用户有了新的高分,我们通过调用以下功能报告高分。

下面的函数包括 2 个参数。

Identifier,它被定义为一个字符串,用于输入你在 iTunesConnect 中创建的 leaderboardID。

score,定义为 Int,它将是提交给 iTunesConnect 的用户分数

func saveHighScore(identifier:String, score:Int) {
        
        if GKLocalPlayer.localPlayer().authenticated {
            
            let scoreReporter = GKScore(leaderboardIdentifier: identifier)
            
            scoreReporter.value = Int64(score)
            
            let scoreArray:[GKScore] = [scoreReporter]
            
            GKScore.reportScores(scoreArray, withCompletionHandler: {
                error -> Void in
                
                if error != nil {
                    print("Error")
                } else {
                    
                    
                }
            })
        }
    }
  1. 现在,如果用户想要查看排行榜,请调用以下功能
//This function will show GameCenter leaderboards and Achievements if you call this function.
    func showGameCenter() {
        
        let gameCenterViewController = GKGameCenterViewController()
        gameCenterViewController.gameCenterDelegate = self
        
        let vc:UIViewController = self.view!.window!.rootViewController!
        vc.presentViewController(gameCenterViewController, animated: true, completion:nil)
        
    }
    
    //This function closes gameCenter after showing.
    func gameCenterViewControllerDidFinish(gameCenterViewController: GKGameCenterViewController) {
        
        gameCenterViewController.dismissViewControllerAnimated(true, completion: nil)
        self.gameCenterAchievements.removeAll()
        
    }