iOS4.1発表以降、気にはなってたけど結局いまだに使う機会がなかったので、
Leaderboard(スコアランキング)が表示されるサンプルを作ってみました。
以下実装手順です。
iTunes ConnectでGame Centerの設定をする
- iOS Provisioning Portalで新規作成したApp IDでアプリを登録する(バイナリアップロードは不要)
- 「Manage Game Center」ボタン押下→遷移先画面で「Enable」ボタン押下
- リーダーボードのの設定
- リーダーボードの名前(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にスコアを報告する
- GKScoreインスタンスを生成する。カテゴリってのを指定する必要があるのですが、iTunes Connectで指定した「リーダーボードのID」がそれにあたるようです。
- valueプロパティにスコアを入れる
- 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