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
以上!帰宅!