iPhoneアプリからTwitter連携を行う方法①(OAuth認証編)
iPhoneアプリからTwitter投稿を行いたいと思い、調べた結果を残しておきます。iPhoneアプリからのTwitter連携は、他にも使いそうな機能なので。
連携の方法はいくつかありますが、今回はOAuth認証を利用します。ライブラリとして、Twitter-OAuth-iPhoneを使わせていただくことにしました。
また、作業の際には以下のページも参考にさせていただきました。ありがとうございます。
・ Twitter-OAuth-iPhoneを使ってcocos2dプロジェクトからゲーム情報をpostする – ~けものみちを目指して~.
OAuthライブラリのXcodeプロジェクトへの組み込み
はじめに、Twitter-OAuth-iPhoneを自分のiPhoneアプリでライブラリとして利用できるようにするために、githubから、ソースをGetしてきます。
ターミナルを起動して、Getしたファイルを配置したいディレクトリに移動したら、以下のコマンドを打ち込みます。(gethubがインストールされている前提)
git clone http://github.com/bengottlieb/Twitter-OAuth-iPhone.git
これにより、「Twitter-OAuth-iPhone」フォルダがチェックアウトされていますので、そのフォルダの下にある「Twitter+OAuth」をフォルダごとプロジェクトに追加(コピー)しました。
次にlibxml2ライブラリをプロジェクトに追加します。「既存のフレームワークの追加」から、libxml2.dylibを選択して追加します。
ただ、この時点でコンパイルすると、ものすごい数のエラーが出てしまいました。そのため、「プロジェクト設定」の「ヘッダ検索パス」に
$(SDKROOT)/usr/include/libxml2
を追加します。その上でコンパイルすると、ようやく、エラー無しでビルドが終了することが確認できました。
連携を行うアプリをTwitterへ登録
早速コーディングにかかりたいところですが、TwitterでOAuth認証を行うため、http://twitter.com/apps/newからアプリの登録申請もしておかねばいけません。
登録を行うと、「Consumer key」「Consumer secret」が発行されますので、控えておきます。コーディングの際に使用することになるので。

なお、登録したアプリのアクセス権限は、以下のように「Read and Write」としておきます。「Read only」だと、投稿が失敗してしまいました。

Twitterへの投稿処理を記述
さて、いよいよ、Twitterへの投稿処理をアプリの中に記述していきます。今回私は、AppDelegate(MyAppDelegateと記述します)に追加することにしました。MyAppDelegate.hに、以下のインポート宣言と定数宣言を追加します。定数にはTwitterへのアプリ申請時に取得した2つのキーを下記のように設定しておきます。
#import "SA_OAuthTwitterController.h" #import "SA_OAuthTwitterEngine.h" #define kOAuthConsumerKey @"Consumer key here" #define kOAuthConsumerSecret @"Consumer secret here"
また、SA_OAuthTwitterControllerDelegateプロトコルを宣言し、処理のエントリポイントとなるSA_OAuthTwitterEngine型の変数も追加しておきます。(下のようになると思います)
@interface MyAppDelegate : NSObject { UIWindow *window; RootViewController *viewController; SA_OAuthTwitterEngine *_engine; }
後始末の処理も忘れずに記述。
- (void)dealloc { [_engine release]; [super dealloc]; }
最後に、Twitterへの認証と投稿の処理を記述します。tweetFromApplicationという関数にしました。
- (void)tweetFromApplication { // Twitter Initialization if(!_engine){ _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate:self]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret; } if(![_engine isAuthorized]){ UIViewController *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine:_engine delegate:self]; if (controller){ [viewController presentModalViewController: controller animated: YES]; }else{ [_engine sendUpdate: [NSString stringWithFormat: @"アップデート. %@", [NSDate date]]]; } } }
これで認証から投稿までの一連の流れをテストすることができるようになりました。
アプリから初めて投稿を行おうとする場合は、Twitterの認証画面が現れ、次回からは認証画面なしで投稿が可能になっているはずです。
きちんと認証が行われたかどうかは、自分のアカウントでTwitterにログインして、「設定」→「アプリ連携」からも確認できました。

ここに、自分の作ったアプリが見えていれば、OAuth連携の承認がされているということですね。逆に、ここで「許可を取り消す」ボタンを押すと、承認を取り消すことができます。
投稿部分の記載がないかと思いますが。。。
投稿している部分は「_engine sendUpdate:」のところになります。