jarinosuke blog

about software engineering, mostly about iOS

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」は大事に取っておいて下さい。後で使用します。

ライブラリダウンロード

次にTwitter-OAuth-iPhoneというライブラリをダウンロードする必要があります。
これを使用することで、とても簡単にTwitterとの連携が行えることになります。
Terminal.appを開いて、ファイルを置きたいディレクトリに移動します。
そこで以下のコマンドを実行します。ただし、gitがインストールされている必要があります。

git clone http://github.com/bengottlieb/Twitter-OAuth-iPhone.git

無事ダウンロードできましたか?
これで必要なものは、全て揃いました。

フレームワークをプロジェクトに結合

ここでは先ほどダウンロードしたライブラリを実際にcocos2dプロジェクトに結合していきます。

libxml2追加

Twitter-OAuth-iPhoneiPhone 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クラスなどでメソッド定義してしまうと動作がおかしくなったりするかもしれないですし、何よりデザイン的に問題があるからです。
なので、アプリケーションのデリゲートクラスにこの機能を持たせています。
以下が AppDelegate.hになります。

#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」ボタンのコールバック関数など

では、AppDelegate.mでtwitterAccountLoginを実装する前に、AppDelegateクラスを使ってtwitterAccountLoginを呼び出す部分を実装しましょう。
これを記述するファイルはあなたが決めます。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が登場します。

ねっ、簡単でしょ?
f:id:jarinosuke0808:20101019225514p:image
http://twitter.com/#!/jarinosuke/status/27834909855