DRY

Web関連の技術の事、食事/お酒の事、旅行の事など

iPhone用のFacebookSDKでfbDidLoginに飛んで来ない

iPhone用のFacebookSDKでfbDidLoginに飛んで来ない現象で頭を悩ませました。。。
stackoverflowでしか引っ掛からないのですが、みんな言ってる事がマチマチで。

とりあえず、fbDidLoginにはコールバックが来たのでその方法をメモしておきます。
SDKは2011年12月28日現在最新のものを使っています。


SDKのバージョン?が古いタイプだと


facebook = [[Facebook alloc] initWithAppId:APP_ID];
facebook.sessionDelegate = self;

[facebook authorize:permissions andDelegate:self];

とかで、delegateの指定位置が上記のような書き方になっているものもあるのですが、私が使用しているSDKではauthorizeを上記の用に書くとエラーが出るタイプです。

私は下記でコンパイルが通りました。


facebook = [[Facebook alloc] initWithAppId:APP_ID andDelegate:self];

[facebook authorize:permissions];

ですが、これで幾らやってもfbDidLoginには飛んできませんでした。
当然、fbDidNotLoginにもfbDidLogout飛んでくる訳がなく。。。

UIApplicationDelegateも継承してなきゃダメなのかなとかで


@interface FaceBookDelegate : NSObject
{
Facebook *facebook;
NSArray *permissions;
}
に変更して

// For 4.2+ support
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
return [facebook handleOpenURL:url];
}
をオーバーライドしたりとかしてみますが、変わらず。。。


で、いろいろ調べていてこのエントリにぶつかって
限りなく私に近いな〜と思い、以下の結論に達しました。

結論的には、SDKFacebook.mの296行目あたりのauthorizeの関数でsafariを使うのを止めました。


- (void) authorize:(NSArray *)permissions {
self.permissions = permissions;

//[self authorizeWithFBAppAuth:YES safariAuth:YES];
[self authorizeWithFBAppAuth:NO safariAuth:NO];
}

う〜ん。。。正しい動きなんだろうか???