その後のその後

iOSエンジニア 堤 修一のブログ github.com/shu223

Game Center のリーダーボード(スコアランキング)対応アプリの作り方


iOS4.1発表以降、気にはなってたけど結局いまだに使う機会がなかったので、
Leaderboard(スコアランキング)が表示されるサンプルを作ってみました。


以下実装手順です。

iTunes ConnectでGame Centerの設定をする

  1. iOS Provisioning Portalで新規作成したApp IDでアプリを登録する(バイナリアップロードは不要)
  2. 「Manage Game Center」ボタン押下→遷移先画面で「Enable」ボタン押下
  3. リーダーボードのの設定
    • リーダーボードの名前(Leaderboard Reference Name)・・・任意
    • リーダーボードのID(Leaderboard ID)・・・任意
    • スコアのフォーマット(Score Format Type)・・・整数 / 固定小数点数 / タイム / 金額 より選択
    • ソート順・・・昇順(Ascending)か降順(Descending)かを選択
    • スコアの表記(円とか)・・・任意。ローカライズ可能

プロジェクト作成時にやること

  • Info.plist の Bundle identifier に、作成したApp IDを設定する
  • プロジェクトにGameKitフレームワークを追加

ユーザーを認証する

リーダーボードを利用するにしろ対戦ゲームをやるにしろ、Game Center機能を使う場合はまず最初にこれ。

[[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error) {
    if (error == nil) {
        // 認証に成功した場合の処理コードをここに挿入する
    } else {
        // アプリケーションはエラーパラメータを処理してプレーヤーにエラーを報告できる
    }
}];

Game Centerにスコアを報告する

  1. GKScoreインスタンスを生成する。カテゴリってのを指定する必要があるのですが、iTunes Connectで指定した「リーダーボードのID」がそれにあたるようです。
  2. valueプロパティにスコアを入れる
  3. reportScoreWithCompletionHandler:メソッドでスコアを報告する
GKScore *scoreReporter = [[[GKScore alloc] initWithCategory:{リーダーボードのID}] autorelease];
scoreReporter.value = rand() % 1000000;	// とりあえずランダム値をスコアに
[scoreReporter reportScoreWithCompletionHandler:^(NSError *error) {
	if (error != nil)
	{
		// 報告エラーの処理
	}
}];

Leaderboardを表示する

  • ヘッダでGKLeaderboardViewControllerDelegateプロトコルへの準拠を宣言
@interface GameCenterTestViewController : UIViewController
<GKLeaderboardViewControllerDelegate>
{

}

@end
  • GKLeaderboardViewControllerを生成、表示する
- (IBAction)showLeaderboard
{
    GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init];
    leaderboardController.leaderboardDelegate = self;
    [self presentModalViewController:leaderboardController animated:YES];
}
  • leaderboardViewControllerDidFinish:を実装する
- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController {

	[self dismissModalViewControllerAnimated:YES];
}

動作確認

Appleのドキュメントによると、

Game Centerでアプリケーションを明確にテストするには、常に新しいテストアカウントを作成します。既存のApple IDを再利用することはできません。

とあります。


実際上記コードをデバッグビルドしてシミュレータで動作させたところ、
リーダーボード表示と同時に新アカウント作成フローに入り、
パスワードリマインダ用の質問までフル入力を求められ弱冠面倒でした。


が、がんばって入力するとちゃんとリーダーボードに表示されました。




サーバー立てずにランキング機能つけられるのはありがたいですね!
スコアの単位やタイトルもけっこう柔軟につけられるので、
今後積極的に使っていこうと思います。


ちなみに、こちらに日本語訳された「GameKitプログラミングガイド」があり、
Game Centerについてもかなり詳細な説明が書かれています。
http://developer.apple.com/jp/devcenter/ios/library/documentation/GameKit_Guide.pdf