facebook SDKを使用してOAuth認証時の方法を Dialog 固定にする

By | 2011年8月8日

facebook SDKを使用するとOSのバージョン、マルチタスクの有無、Facebookアプリの有無によって認証方法がかわります。
詳細はREADME.mdownを見てもらえれば分かるかと思います。

大雑把にいうと3つの認証方法があります。
(1)Facebookのアプリを起動し認証後に URL Scheme を使用しアプリに戻る
(2)Safari を起動し認証後に URL Scheme を使用しアプリに戻る
(3)アプリ内の Dialog 内で webView を開き認証する

今回はとある事情があり URL Scheme を使用したくなかったため全て(3)の方法で認証を使用したかったわけです。

結論から言うと Facebook.m のコードを書き換えたら可能というかんじでした。
ここを参考にして対応しました。

--- a/facebook-ios-sdk/src/Facebook.m
+++ b/facebook-ios-sdk/src/Facebook.m
@@ -129,6 +129,7 @@ static NSString* kSDKVersion = @"2";
  */
 - (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth
                     safariAuth:(BOOL)trySafariAuth {
+  tryFBAppAuth = NO;
+  trySafariAuth = NO;
   NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                  _appId, @"client_id",
                                  @"user_agent", @"type",

以下のやり方でも Dialog を開いて認証ができるものの FBDialogDelegate, FBSessionDelegate の各種メソッドが呼ばれなくて今回の用途だと少し厳しくてパスした。

NSString *appId = @"[APPID]"
NSMutableDictionary *params = [[NSMutableDictionary alloc] initWithObjectsAndKeys:
                                       appId,@"client_id",
                                       @"touch", @"display",
                                       @"publish_stream,read_stream,offline_access", @"scope",
                                       nil];
[facebook dialog:@"oauth" andParams:params andDelegate:self];

dialog の指定が “feed” だと delegate メソッドは呼ばれてたのだけど、なぜか “oauth” だと呼ばれない。
分かる人いれば教えてください。

個人的にはFacebookアプリ認証の方がアイパスを入力しなくて楽なんですけどね。

参考資料

自分のiphoneアプリに Facebook ios sdk を導入する
Facebook Graph API活用 iPhoneアプリ開発入門