【iOS】#29 Game Center 排行榜設定

使用 GameKit 連接 Game Center

--

這次針對上次發布的 Set 神奇形色牌 新增排行榜內容,因為有玩家提到說想要看其他人的成績如何。現階段的 App 只有做到 Local 的排行榜,所以這次利用 Game Center 的功能來實作線上排行榜。

Game Center 是 apple 提供的線上多人遊戲中心,可以設定排行榜、成就等內容,玩家可以看到其他人的遊戲資料,或者朋友的遊戲資料,增加社交性。

進入 App 功能 Tab 新增排行榜

進入 App Store Connect 的後台中,選擇「功能」,可以看到 Game Center 的部分,按下排行榜旁的「+」新增新排行榜

排行榜的類型有兩種,一種是會按照日期刷新,例如一週排行;另一種是永遠不會重置的經典排行榜,依據遊戲設定。這邊我選擇的是「經典排行榜」

接著其他資料:

  • 名稱:內部名稱,顯示在 App Store Connect,方便管理
  • ID:這個 ID 是從程式碼存取時,需要使用到的
  • 格式類型:根據積分格式設定
  • 提交類型:看要顯示最佳或者是最新的玩家積分
  • 排序方式:成績要升冪或降冪排列

接著設定本地化語言,顯示的名稱、格式以及是否要增加後綴。例如 Set game 是比秒數,後綴可填上秒,到時候排行榜時就會顯示 XX秒

Xcode 設定打開 Game Center 功能

在專案中,enable game center feature。

按下上圖右下方的 Capability 選擇 Game Center 即可

認證使用者 Authenticate

記得先 import GameKit,才能使用相關 SDK

import GameKit

接著在 view controller 上委派 GKGameCenterControllerDelegate,它協定的內容是當 Game Center 的頁面關閉時要執行什麼行為,以下設定把這個 game center 的 view controller 關閉

func gameCenterViewControllerDidFinish(_ gameCenterViewController: GKGameCenterViewController) {    gameCenterViewController.dismiss(animated: true)}

一開始進入遊戲時,使用者必須登入 Game Center 才能取得其資料,所以在 viewDidLoad 中呼叫 authenticatePlayer。在使用者沒登入 Game Center 的情況下,即會顯示登入 Game Center 的頁面;反之則會顯示某某某登入 Game Center 的提示在上方

轉圈圈的 Activity Indicator 需額外設定,不包含在上面程式碼中喔~

提交排行榜資料

GKLeaderboard.submitScore(score: 100, context: 0, player:  GKLocalPlayer.local, leaderboardIDs: ["com.leokuo0724.set_game.find_10_leaderboard"], completionHandler: nil)

使用 submitScore 即可提交成績。

其中 score 為要提交的成績、player 是當前玩家、leaderboardIDs 輸入在 App Store Connect 中排行榜設定的 ID

查看排行榜

一樣在要顯示排行榜的 view controller 中,設定 GKGameCenterControllerDelegate

利用 GKGameCenterViewController 函式,可以呼叫出排行榜。其中參數可以設定玩家的 Scope 或者 時間的範圍

Demo

如果想要讓登入提示在別的地方跑出來,可以調整 GKAccessPoint,預設是從正上方跳出

--

--