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()
        
    }