お?いけるくさい?

iPhoneアプリエンジニアのたまごです。いっちょまえエンジニア目指してちいさな発見や学んだことを覚え書きしていきます!Objective-C/iOS/開発

Game Center実装できたよ(とりあえず)

いろんなブログさんを渡り歩いたら、

とりあえず実装はさくっとできました!

ただ、iOS4.1以降のみ対応とかはまだできてないけん、

こっから分析してみます。

参考にしたサイトを列挙します!

 

■参考

http://golog.plus.vc/iphone/2867/

全体の参考に。

とっても簡単。わかりやすい!

 

■項目について

https://sites.google.com/site/aoi68k/home/gamecenter-dui-ying

iTunes ConnectでGame Centerの登録を行う際に、

名前とかIDとかつけるときに少し参考にした。

一番迷った上の2つの項目について、

「日本語やとだめなのかな?」とか

「ユニークっていうけど適当でいいのかな?」とか疑問に感じて、

結局あたしの設定は

 

  • Leaderboard Reference Name・・・日本語のアプリタイトル
  •                  (=日本語でも全然いけるみたい)
  • Leaderboard ID・・・バンドルIDに.leaderboardをつけたもの
  •           (別にそうしなきゃだめとか全然ない。
  •            おそらくユニークであれば何でも良い)
  • Leaderboard Localization・・・以下参照

にしました。

 

■Leaderboard Localizationの設定

LeaderBoard画面に接続したときに表示される

スコア画面のメインタイトルには、

iTunes Connectで登録したアプリの名前がおそらく自動で入るようで、

 Leaderboard Localizationに書く「Name」って項目名には、

「初級」「中級」「上級」ってだけ書けば、

思った通りの表示になりました。

 

 

 ■コード

基本は↑■参考で引用させていただいたコード通り進めます。

①GameKitのフレームワークを入手

②AppDelegate.hにGameKitをimportし、

 

#import <GameKit/GameKit.h>

そのままAppelegate.mに以下を実装

 

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

   //gamecenterのプレイヤーを取得

    [[GKLocalPlayerlocalPlayer] authenticateWithCompletionHandler:^(NSError *error){}];

 

 

 〜以下その他コード〜

}

③Game Centerを呼び出したい画面にボタン設置

④そのボタンのある画面(ViewController.h)にGameKitをimport、

 さらにGKLeaderboardViewControllerDelegateを実装

#import <GameKit/GameKit.h>

 

@interface ScoreViewController : UIViewController<GKLeaderboardViewControllerDelegate>{

 

⑤その実装が終わったら、ボタンと以下のIBActionをつなげる

 

-(IBAction)showBoard:(id)sender {

    

    //初級データ送信

    GKScore *scoreReporterLow = [[GKScorealloc] initWithCategory:@"LeaderboardIDの名前(初級)"];

    NSInteger scoreL;

    scoreL=送信したいスコア(初級スコア);

    scoreReporterLow.value = scoreL;

    [scoreReporterLow reportScoreWithCompletionHandler:^(NSError *error) {

        if (error != nil)

        {

            // 報告エラーの処理

            NSLog(@"error %@",error);

        }

    }];

    

    //↓中級も上級も同じようにかいたら(略)、こいつを!

 

    GKLeaderboardViewController *leaderboardController = [[GKLeaderboardViewControlleralloc] init];

    if (leaderboardController != nil) {

        leaderboardController.leaderboardDelegate = self;

        [self presentModalViewController: leaderboardController animated: YES];

    }

 

    [selfleaderboardViewControllerDidFinish:leaderboardController];

    [leaderboardController release];

}

 

//リーダーボードで完了を押した時に呼ばれる

- (void)leaderboardViewControllerDidFinish:(GKLeaderboardViewController *)viewController

{

    [selfdismissModalViewControllerAnimated:YES];

}

 

 

独自に書き足したポイントていうのは

*(IBAction)のshowBoardメソッドに(id)senderを付け加えたこと

*データ送信を、スコア画面を表示するメソッドの中に書いたこと

*leaderboardViewControllerDidFinishメソッドも、表示のときに書いちゃうこと

*alloc initしたものはリリースをわすれないこと

 

■起こりうるエラー

http://hhageru.blog.fc2.com/blog-entry-105.html

「This game is not recognized by Game Center」 と表示されたあなた!

はい、私も!

登録したはずなのに、認識されないときはチェック。

私もこれでさくっと解決。

いろんなところに書いてあるように、

SandBoxで試すときは新しくApple ID作ってね。

 

■その他ご参考

http://quicktipsja.blogspot.jp/2011_08_01_archive.html

http://hamasyou.com/blog/archives/000411

ちらほら見つつ。

リンクとんでいったところにあるAppleの公式文書も役立った。

 

iOS4.0以降の対応

そもそもFrameWorkをプロジェクトに追加してしまうと

アプリをDLしたときに起動しないなどといった問題が出てくる模様!

ということで、iOS4かどうか認識するとか言う前に、

iOS4.1以降しか対応してない」というふうに

プロジェクト側の設定をかえてやれば 良いらしい。

Project>Summery>Deployment Targetてとこを4.1にすればオK!!

ちなみにこの対応OSの範囲については以下のリンク参照。

http://d.hatena.ne.jp/KishikawaKatsumi/20100625/1277476249

 

以上!帰宅!