コンテンツへスキップ →

iPhoneアプリをGameCenterのLeaderboard(ランキング)に対応させる方法

iOS4.1よりAppleが提供するGameCenterを組み込むことができるようになりました。このGameCenterのGameKitを使えば、スコアの送信や、ランキング確認などの機能を簡単にアプリ内に入れることができます。自分で作るとすればサーバーも必要で、ちょっと大変なのでありがたい機能です。ちょうど今、iPhoneアプリでパズルゲームを作っているので組み込むために調べたことのまとめです。

GameCenter(GameKit)で何が出来るか

詳しい説明はAppleの公式ドキュメントにも記載がありますが、出来ることはざっくりこんなこと。

認証、LeaderBoard、オートマッチ、ボイス。
LeaderBoardを使って、スコアの送信やランキング確認が出来たり、オートマッチでは対戦機能を実現出来たり、ボイスチャットまでカバー。今回はLeaderBoardを使う方法をまとめました。

こんなことをしようとしています↓

GameCenter(GameKit)を使う準備

iTunesConnect側で新規アプリを登録します。実際のアプリデータはまだ送信しなくてOKです。iTunesConnectでGameCenterの設定をしないと、テストも出来ないのです。Xcodeの方だけで設定をしていても「this game is not recognized by game center」とエラーが出るだけです。

アプリを登録したら、アプリの設定画面から「Manage Game Center」をクリック。

次にGameCenterの設定画面に入ったら、「Enable」をクリック。GameCenterを有効にします。

「Edit」で中に入ったら、左上の「Add Leaderboard」をクリックして新しくLeaderboardを作ります。Choose Leaderboard Typeでは「Single Leaderboard」をクリック。

Leaderboardの各項目について

  • Leaderboard Reference Name・・・リーダーボードの名前:任意
  • Leaderboard ID・・・リーダーボードのID:任意
  • Score Format Type・・・スコアの送り値 整数 / 固定小数点数 / タイム / 金額 より選択
  • Ascending・・・並び順を昇順か降順を選択
  • Score Range・・・スコアの範囲 0〜100までなど

Leaderboard Localizationでは各国毎に表記を変更できます。例えば単位に「円」をつけるなど。

GameCenter(GameKit)をXocdeで使う

さて、ここまで下準備が整ったら、Xcodeでアプリ内に組み込みます。

まず、GameKitのフレームワークを追加。

次にInfo.plistの「Required device capabilities」に「gamekit」と追加入力。

アプリ起動時にGameCenterへのログイン認証を行いたいので、AppDelegate.m内に追記。

#import <GameKit/GameKit.h>

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //gamecenterのプレイヤーを取得
    [[GKLocalPlayer localPlayer] authenticateWithCompletionHandler:^(NSError *error){}];

    〜以下続く〜
}

ログインしていれば、ログインしました。と上部に表示され、ログインしてなければ、既存のアカウントを使うか、新規にアカウントを作るか、たずねられます。注意するのは、既存のAppleIDを使うと上手くいかないので、ここで新たにアカウントを作ってください。現状、サンドボックスと呼ばれるテスト環境にあります。このサンドボックス環境でアカウントを作る必要があるようです。

スコアの送信は以下のコードで。

#import <GameKit/GameKit.h>

GKScore *scoreReporter = [[GKScore alloc] initWithCategory:@"itunes connectで作ったLeaderboard ID"];
        NSInteger scoreR;
        scoreR=スコアの値;
        scoreReporter.value = scoreR;
        [scoreReporter reportScoreWithCompletionHandler:^(NSError *error) {
            if (error != nil)
            {
                // 報告エラーの処理
                NSLog(@"error %@",error);
            }
        }];

これだけでOKです。

ランキングを見るには

#import <GameKit/GameKit.h>

//リーダーボードを立ち上げる
-(IBAction)showBord
{
	GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewController alloc] init];
	if (leaderboardController != nil)
	{
		leaderboardController.leaderboardDelegate = self;
		[self presentModalViewController: leaderboardController animated: YES];
	}
}
//リーダーボードで完了を押した時に呼ばれる
- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController
{
	[self dismissModalViewControllerAnimated:YES];
}

これだけでランキング画面がModalViewでニョキッと出てくるようになります。ちなみにランキング画面はオリジナルでも作ることが可能。

注意点

今回記載していませんが、Game CenterはiOS4.1より下のバージョンでは動きません。なので、最初にバージョンを確認して、4.1以降じゃなければGame Centerが動かないようにしておく必要があります。また、スコアを送信しても、すぐにはLeaderboardに反映されなず、しばらく間があります。

SHARE

スキルアップにMENTA

MENTAはいろんなプロに相談できるNo1メンターサービスです。

僕自身もプロダクトの壁打ち・相談にのっています。個人開発でもコードレビュー、セキュリティ面のチェック、デザイン、広告、コンテンツマーケ、SNS集客について相談する、など使えます。

YouTubeでも発信中!

PROFILE

入江 慎吾
あらゆるスキルが学べるパーソナルメンターサービスMENTAの代表/個人開発が好きでこれまでに30個ほどのWEBサービスやアプリを作ってきました/福岡のWEB制作会社勤務→フリーランスエンジニア→法人立ち上げ→M&A億単位の売却を経験。 (詳しいプロフィール)

カテゴリー: HACK 開発奮闘記