GameCenterを設定してみる


GameCenter(GameKit)を使う準備
iTunesConnect側で新規アプリを登録します。実際のアプリデータはまだ送信しなくてOKです。iTunesConnectGameCenterの設定をしないと、テストも出来ないのです。Xcodeの方だけで設定をしていても「this game is not recognized by game center」とエラーが出るだけです。
アプリを登録したら、アプリの設定画面から「Manage Game Center」をクリック。


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




Leaderboardの各項目について
  • Leaderboard Reference Name・・・リーダーボードの名前:任意
  • Leaderboard ID・・・リーダーボードのID:任意 (Xcodeでの実装にも必要なので忘れずに…)
  • Score Format Type・・・スコアの送り値 整数 / 固定小数点数 / タイム / 金額 より選択
  • Ascending・・・並び順を昇順か降順を選択
  • Score Range・・・とりあえず0から、マックスまで指定
Leaderboard Localizationでは各国毎に表記を変更できます。例えば単位に「点」、「秒」をつけることができます。


Xcodeでの実装
GameKitのフレームワークを追加。
Cocos2dだと、最初からフレームワーク入ってた…。

次にResorces > info.plistの中のRequrired device capabilities内に+ボタンを押して
Keyにgamekit,、TypeはBookean、ValueはYESと入力



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



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



ログインしていれば、ログインしました。と上部ににょろっと表示される。SANBOXというモードはテスト専用のモード。(テストの高得点が、実際のGameCenterに反映されないようになっています。テストユーザーを作る時は、特に注意が必要。ここで使ったメアドは、本番のApple IDに利用できなくなるなどのトラブルが続き、アップル内でも部署をまたぎかなり面倒なことに…)

次にGameCenter呼び出す。
実装ファイルの.h .mの両方に#import <GameKit/GameKit.h>を追加

以下は自分の備忘録的にCocos2dでの実装…。
1)デリゲートをちゃんと記述する
XXXScene.h
@interface XXXScene : CCLayer<GKLeaderboardViewControllerDelegate>{
XXXScene.m
//リーダーボードを立ち上げる
- (void)GoToRankng {
    GKLeaderboardViewController *leaderboardController =
    [[GKLeaderboardViewController alloc] init];
    
    if (leaderboardController != nil)     
        {
        leaderboardController.leaderboardDelegate = self
        [[CCDirector sharedDirector]
         presentModalViewController:leaderboardController animated:YES];
        }
    }

//リーダーボードで完了を押した時に呼ばれる
- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController
    {
    [[CCDirector sharedDirector] dismissModalViewControllerAnimated:YES];
    }


これでビルドしてランキングボタンを押すとリーダーボードが呼び出される(感動)


続いて仕上げにスコアを送る設定
ゲームオーバー処理の箇所に下記を追加。スコア値と、先程メモしておいたリーダーボードIDを設定。

// Game Center スコア送信
    GKScore *scoreReporter = [[GKScore alloc] initWithCategory:@"●●●リーダーボードID●●●"];
    NSInteger scoreR;
    scoreR=●●●スコア値●●●;
    scoreReporter.value = scoreR;
    [scoreReporter reportScoreWithCompletionHandler:^(NSError *error) {
        if (error != nil)
        {
            CCLog(@"error %@",error);
        }
    }];


リーダーボードが呼び出されればスコア送信はすんなり行き完了。
GameCenterはいろんな設定ができますが、頭の悪い私はスコアのランキングだけできればとりあえず満足。

コメント