Twitter-OAuth-iPhoneを使ってcocos2dプロジェクトからゲーム情報をpostする
はじめに
cocos2d上でゲームを創っていくなかでハイスコアなどのユーザ情報をWeb上に投稿させたいこと、あると思います。
これを行うことで、ユーザは他者から「おまえ、すごいな!」などと賞賛され承認欲求が満たされ、ユーザは更にゲームを楽しんでくれると思います。
また、デベロッパーもWeb上にプロダクトの情報が広がることで、様々な人の目に付く可能性が広がると思います。
はい。
Objective-Cでは一般的に良く知られている(と思われる)Twitter-OAuth-iPhoneというライブラリがあります。
ということで、それを使ってcocos2d上でTwitterにpostするための簡単なチュートリアルのようなものを行っていきましょう!
準備
アプリケーション登録
まずは情報をpostするために、Twitter上でアプリケーションの登録を行う必要があります。
http://dev.twitter.com/apps
登録の詳細な手順はここでは省略します。
そこで取得した、「Consumer key」と「Consumer secret」は大事に取っておいて下さい。後で使用します。
フレームワークをプロジェクトに結合
ここでは先ほどダウンロードしたライブラリを実際にcocos2dプロジェクトに結合していきます。
libxml2追加
Twitter-OAuth-iPhoneはiPhone SDK付属のXMLパースライブラリであるlibxml2を必要としているので追加する必要があります。
まずは実際のファイルをプロジェクトのFrameworksに追加しましょう。
Project >> Add to Project >> /usr/lib/libxml2.dylib >> Add
これだけだとlibxml2.dylibをコンパイラが認識してくれないので、プロジェクトに教える必要があります。
Edit Project Settings >> Header Search Path
に
/usr/include/libxml2.dylib
を追加します。
これでライブラリの追加は終了です。
ビルドしてエラーが出ていなければ、「大丈夫だ、問題ない。」
ソースコード編集
では実際に、あなたが作成中のcocos2dのソースコードに手を加えていきます。
なので、若干一般的な内容になってしまいますが、基本的な所は同じはずなので適当に取捨選択していってくれると助かります。
以下からは編集するファイル名ごとに段落分けしています。
AppDelegate.h
基本的にはAppDelegateを編集していきます。このクラスに記述して、そのメソッドを様々なクラスがデリゲートして使用するという形になります。
なぜかというと、おそらくTwitter-OAuth-iPhoneがUIKit周りのフレームワークを用いているため、Sceneクラスなどでメソッド定義してしまうと動作がおかしくなったりするかもしれないですし、何よりデザイン的に問題があるからです。
なので、アプリケーションのデリゲートクラスにこの機能を持たせています。
以下が
#import <UIKit/UIKit.h> #import "SA_OAuthTwitterEngine.h" #import "SA_OAuthTwitterController.h" #define kOAuthConsumerKey @"" //REPLACE ME #define kOAuthConsumerSecret @"" //REPLACE ME @class RootViewController; @interface TheaterActAppDelegate : NSObject <UIApplicationDelegate, SA_OAuthTwitterControllerDelegate> { UIWindow *window; RootViewController *viewController; SA_OAuthTwitterEngine *_engine; } -(void) twitterAccountLogin; @property (nonatomic, retain) UIWindow *window; @end
kOAuthConsumerKeyとkOAuthConsumerSecretについては、アプリケーション登録の時に発行された「ConsumerKey」と「OAuthConsumerSecret」をコピーして貼付けて下さい。
ここで定義したtwitterAccountLoginメソッドを各Sceneで呼び出すことで、OAuth認証を可能にしてTwitterにpostできるようにしていきます。
難しいように聞こえますが、そこらへんは全てライブラリがやってくれるので問題ありません。
「Tweet」ボタンのコールバック関数など
では、
これを記述するファイルはあなたが決めます。CCMenuItemのコールバック関数などがベターでしょう。
[[NSUserDefaults standardUserDefaults] setBool:YES forKey:@"postToTwitter"]; [[NSUserDefaults standardUserDefaults] synchronize]; <Project Name>AppDelegate *myApp = (<Project Name>AppDelegate *)[UIApplication sharedApplication].delegate; [myApp twitterAccountLogin];
AppDelegate.m
最後にtwitterAccountLoginを実装します。
-(void) twitterAccountLogin { UIViewController *controller = nil; if (!_engine) { _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret; controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self]; } if (controller) { //[[CCDirector sharedDirector] stopAnimation]; [mainViewController presentModalViewController: controller animated: YES]; // [controller release]; return; }else { [_engine sendUpdate: [NSString stringWithFormat: @"test from けものみちを目指して on %@", [NSDate date]]]; } }
内容を簡単に説明すると、Twitter APIに関する基本的な機能は全てSA_OAuthTwitterEngineが行ってくれます。
そして、SA_OAuthTwitterEngineにConsumer keyとConsumer secretをセットし、それを引数に与えてSA_OAuthTwitterControlerをイニシャライズします。
そのときに、コントローラが出現してTwitterのOAuth認証画面が表示されるようになっています。
もし以前に認証を行っていればコントローラは作成されず、SA_OAuthTwitterEngineがupdate APIを叩いてメッセージをpostします。
これで基本的な実装は終わりになります。
ビルドしてコールバック関数を設定したイベントを実行してみましょう。
UIWebViewが出て、あなたのTwitter AccountとPasswordを尋ねてきます。
正しく入力すると、UIWebViewが下にアニメーションして消え、再び先ほどのCCSceneが登場します。
ねっ、簡単でしょ?
http://twitter.com/#!/jarinosuke/status/27834909855