試行錯誤した後のコードをもとに書いているので無駄なコードがあるかもしれません。ご了承ください。。。
iOS5からはOSベースでのTwitter連携のサポートがありますが、2012年1月現在だとまだiOS4にも対応させたいですよね。
そんな時の便利なライブラリとしてこちらがあります。
https://github.com/bengottlieb/Twitter-OAuth-iPhone
サンプルコードもついていて、サンプルをビルドするとすぐに挙動が確認できて、テスト投稿なんかも簡単にできてしまいます。
この取っ付きやすさはライブラリを使う際に「簡単なんだ」と思う事ができてやる気をあげてくれます。
ただ、このライブラリはログアウトの事はあまり考えていないようで、ログアウトしてアカウントを切り替えるなどしたい場合は結構大変です。
僕は下記の方法をとりました。あくまで一例ですのでご容赦ください。
SA_OAuthTwitterEngine.m
- (BOOL) logout { BOOL res = NO; NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults]; [defaults removeObjectForKey:@"authData"]; res = [defaults synchronize]; [self clearAccessToken]; [_accessToken release]; _accessToken = [[OAToken alloc] initWithKey: nil secret: nil]; return res; }
アクセストークンもクリアしてるしこれで問題ないはずなのですが、これだけだとキャッシュデータが残ってしまっているようで、ログアウトして再度認証画面を呼んでもテキストの入力ができません。
なのでSA_OAuthTwitterEngineを保持しているクラスで認証画面を呼ぶ処理でこの用に書きました。
if (_engine){ return;} _engine = [[SA_OAuthTwitterEngine alloc] initOAuthWithDelegate: self]; _engine.consumerKey = kOAuthConsumerKey; _engine.consumerSecret = kOAuthConsumerSecret; [_engine setClearsCookies:YES]; _authorizeViewController = [[SA_OAuthTwitterController controllerToEnterCredentialsWithTwitterEngine: _engine delegate: self] retain]; [_engine setClearsCookies:NO];
_authorizeViewControllerを初期化する前に
[_engine setClearsCookies:YES];
を呼んでキャッシュをクリアできるようにしておき、初期化後に
[_engine setClearsCookies:NO];
としてデフォルトのNOに値を戻します。
これでログアウト後に再度ログイン用の認証ダイアログを呼んでも新たにアカウントを入力する画面が表示されたはずです。
ちなみに、iOS5以降は送信先URLがhttpではなく、httpsでないとうまく認証できないのでご注意を。ちなみにhttpsにするとiOS4でも問題ないので修正しておくと良いと思います。
ちなみに「強火で進め」様のサイトが詳しいです。
http://d.hatena.ne.jp/nakamura001/20100519/1274287901
ちゃんと精査して書ききれていない記事ですみませんが、同じようにはまる方の助けになればと思います。
何かありましたらコメント欄でも twitterの @mmlemon でもお気軽に突っ込んでください。