TwitterのOAuth認証を使う
アプリの登録申請
選択項目 | 説明 |
---|---|
クライアントプリケーション | 実行ファイルを起動するようなディスクトップ系のアプリのときに選択します。 |
ブラウザアプリ | ブラウザで動作するアプリのとき選択します。こちらを選択した場合、ユーザによるOauth認証の承認が完了した後に表示するURLを指定する事が出来ます。 |
ライブラリ
git clone http://github.com/bengottlieb/Twitter-OAuth-iPhone.gitこちらのライブラリにはサンプルが付属しており、DLしたディレクトリ内の Demo というディレクトリに入っているプロジェクトがサンプルとなります。こちらを開いて下さい。 次に﹁Code﹂グループの中のファイル OAuthTwitterDemoViewController.m の先頭の以下の2つの定数に登録完了時に表示された﹁Consumer key﹂と﹁Consumer secret﹂の文字列を設定します。
#define kOAuthConsumerKey @"" //REPLACE ME #define kOAuthConsumerSecret @"" //REPLACE MEこのサンプルの起点となる部分は OAuthTwitterDemoViewController.m の - viewDidAppear: になります。処理を追いたい場合はここから始めると良いでしょう。 ざっくりと解説しておくと _engine がメインの処理エンジンとなります。 SA_OAuthTwitterEngine クラスを追っかけると詳細が理解できます。 続いて、 SA_OAuthTwitterController の生成と表示が行われます。 SA_OAuthTwitterController の + controllerToEnterCredentialsWithTwitterEngine:delegate: ですがこのメソッドは認証済みの場合は nil を返します。
UIViewController *controller = [SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self];
そのため、続く以下の部分でまだOAuth認証のユーザからの承認が終わってない場合は認証用の画面が表示され、既に承認が終わってる場合にはつぶやきの投稿が行わる様に処理が分岐します。
if (controller) [self presentModalViewController: controller animated: YES]; else { [_engine sendUpdate: [NSString stringWithFormat: @"Already Updated. %@", [NSDate date]]]; }そのためこのアプリは1回目の起動で認証を終わらせた後に再度起動すると else のブロックの方に分岐しつぶやきの投稿が行われます。この動作が嫌な人はこの部分を NSLog などに書き換えておきましょう。 つぶやきの投稿以外に実行可能なものは MGTwitterEngine.h の以下の記述以降に記載があります。
#pragma mark REST API methods自分が試したときは﹁つぶやきの検索﹂などが上手く動作しませんでした。深くは追ってないのですがOAuthの必要が無いので実装してないのかな?と思っています。まぁOAuthを使わないものは必要なパラメータを指定してアクセスするだけで良いので自前で準備してもそんなに負担になることも無いでしょう。
ビルド
Undefined symbols:
"_OBJC_CLASS_$_OAConsumer", referenced from:
objc-class-ref-to-OAConsumer in SA_OAuthTwitterEngine.o
"_OBJC_CLASS_$_OAToken", referenced from:
objc-class-ref-to-OAToken in SA_OAuthTwitterEngine.o
"_OBJC_CLASS_$_OAMutableURLRequest", referenced from:
objc-class-ref-to-OAMutableURLRequest in SA_OAuthTwitterEngine.o
"_OBJC_CLASS_$_OADataFetcher", referenced from:
objc-class-ref-to-OADataFetcher in SA_OAuthTwitterEngine.o
"_OBJC_CLASS_$_OARequestParameter", referenced from:
objc-class-ref-to-OARequestParameter in SA_OAuthTwitterEngine.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
実際に試してみるとWebViewでのやりとりが続く事が確認できると思います。
なお、本来であれば最後の辺りでPINという7桁の数字をユーザにTextFieldなどにコピペして貰い、それをプログラムでTwitterのサーバへ投げる処理が必要なのですがこのライブラリではHTMLをパースしてその部分を自動的に取得して最終的なアクセストークン(twitterサーバにREST APIでアクセスするときにこの値をパラメータに含める)の取得するところまでやってくれます。
Twitter API Wiki / Authentication
http://apiwiki.twitter.com/Authentication
ユーザID、パスワードを入力してOAuthの許可が完了したらもう一度アプリを起動してみましょう。プログラムを変更していない場合は自分がOAuthの許可をしたユーザIDのつぶやきとして以下の様なつぶやきが投稿されているが確認できると思います。
おまけ
なお、twitterのサーバから返される情報のパースは以下の id:tomute さんのサイトで丁寧な解説が有るJSON Frameworkなどを使うと簡単に行えてオススメです。
Objective-CのJSON Frameworkを使ってTwitterの情報等を取得する方法 - Tomute’s Notes
http://d.hatena.ne.jp/tomute/20090518/1242687954
関連情報
OAuth関連の専門用語 - 強火で進め
http://d.hatena.ne.jp/nakamura001/20100531/1275329032
やる夫で学ぶOAuth 〜やる夫がユニクロの行列に並んだようです〜 - くらげのBlog
http://d.hatena.ne.jp/ku__ra__ge+blog/20100531/1275331398
OAuthプロトコルの中身をざっくり解説してみるよ - ゆろよろ日記
http://d.hatena.ne.jp/yuroyoro/20100506/1273137673
Yahoo!デベロッパーネットワーク - OAuth - フロー
http://developer.yahoo.co.jp/other/oauth/flow.html
OAuth Core 1.0
http://oauth.net/core/1.0/#anchor9
iPhoneとTwitter OAuth認証の流れについて » いとーけーのページ
http://itok.jp/blog/2010/01/13/iphone_twitter_oauth_gui/
OAuthやxAuthなどもについての解説が書いてあるTwitter APIの解説本。
日頃からTwitter APIをよく使っている方が書かれた本という印象で「twitterの負荷で挙動が…」などの体験に基づいた情報も有る実践的な内容でした。
- 作者: 辻村浩
- 出版社/メーカー: ワークスコーポレーション
- 発売日: 2010/04/21
- メディア: 単行本
- 購入: 4人 クリック: 501回
- この商品を含むブログ (30件) を見る
xAuthの申請についてはこちらサイトが参考になります。最初は1週間の期限付きになるなど色々と注意すべき事が有る様です。
xAuthの申請方法をまとめました
http://blog.elearning.co.jp/?p=8909
Twitter-OAuth-iPhoneを使ってcocos2dプロジェクトからゲーム情報をpostする - 〜けものみちを目指して〜Only the Paranoid Survive
http://d.hatena.ne.jp/jarinosuke0808/20101019/1287496640
TwitPicのOAuthEcho対応 | iphoneアプリで稼げるのか
http://iphone.longearth.net/2010/08/05/twitpic%E3%81%AEoauthecho%E5%AF%BE%E5%BF%9C/
Twitter API を OAuth で認証するスクリプトを 0 から書いてみた - trial and error
http://techno-st.net/2009/11/26/twitter-api-oauth-0.html