iOSアプリ・Webシステム開発のイリテク

HOME > iOS プログラミング > iPhoneアプリをGameCenterのLeaderboard(ランキング)に対応させる方法
2012.01.06

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

このエントリーをはてなブックマークに追加

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

SPONSOR

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に反映されなず、しばらく間があります。

このエントリーをはてなブックマークに追加

記事を書いている人

イリテク(株)代表。Webシステム/iOSアプリの開発を行っています。
受託開発だけでなく、月額固定の専属エンジニアサービスおよび、 自社でクラウド見積請求書サービス CLOUD PAPERを運用中!
プロフィール

月額10万円で御社専属エンジニアを雇いませんか?

御社の顧問エンジニアとして、デザイン・システムに関わる様々なご相談をお受けします。企画・提案だけでなく、実際に手を動かして開発まで行います。また、システムにとどまらず、デザイン案件もお受けできるのが強みです。
顧問エンジニアサービス

イリテクの最新記事をフォロー

  • follow us in feedly
    RSSで最新記事を取得

SPONSER

コメントをどうぞ!

関連記事

SPONSOR

NEW ENTRIES
FACEBOOK
Twitter
CATEGORY
開発したWebサービス
RECRUIT
Webサービスを一緒に開発して頂けるPHPエンジニア募集!週1回のリモート勤務!