GameCenter 排行榜
先決條件:
- Apple 開發者帳戶
- 使用 iTunesConnect 設定 GameCenter 排行榜
設定 GameCenter 排行榜:
- 登入 iTunesConnect
- 轉到我的應用程式。為你的專案建立一個應用程式,然後轉到功能。
- 點選遊戲中心
- 單擊排行榜旁邊的加號。
- 為排行榜型別選擇單個排行榜。
- 建立排行榜參考名稱供你參考。
- 為你的應用建立排行榜 ID ,以便在報告分數時參考。
- 將分數格式設定為 Integer
- 分數提交將是最佳分數
- 單擊新增語言並填寫條目。
複製你製作的 LeaderboardID
,然後轉到 Xcode。
使用 Xcode
我們將使用 4 種功能。
-
匯入框架並設定協議
-
檢查使用者是否已登入 GameCenter
-
將分數報告給 GameCenter
-
檢視排行榜
-
匯入 GameKit
import GameKit
協議GKGameCenterControllerDelegate
-
現在我們要檢查使用者是否已登入 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
}
}
}
- 現在使用者正在使用該應用程式,突然使用者有了新的高分,我們通過呼叫以下功能報告高分。
下面的函式包括 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 {
}
})
}
}
- 現在,如果使用者想要檢視排行榜,請呼叫以下功能
//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()
}