fbDidLogin从未调用过(facebook-ios-sdk)

我正在使用popup的Facebook对话框进行用户login,并在他/她的stream上发布post

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: apiKey, @"api_key", nil]; [facebook dialog:@"stream.publish" andParams:params andDelegate:self]; 

它的工作原理,但是当用户loginfbDidLogin方法永远不会被调用。 为什么? 这样我就不能请求用户名,访问令牌总是为空。

编辑

随着十月Facebook API,我已经部分解决了我的问题。

我只是有同样的问题,并解决了它。 你需要执行

 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url 

在你的应用程序委托类,而不是你的自定义UIViewController或任何其他类。 然后将来自应用程序委托的调用指向任何负责您Facebook的控制器。

你注册你的应用程序来处理你的Facebook应用程序ID的URL? 如果没有,在Facebook iOS SDK网站上有说明如何做。 您还需要告诉您的应用程序委托来处理对此URL的调用。 为此,请将以下代码添加到您的应用程序委托实现中:

 - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [[controller facebook] handleOpenURL:url]; } 

在哪里[controller facebook]是你的Facebook类的实例。

你需要在调用任何对话方法之前设置facebook句柄的sessionDelegate成员variables。

  self.facebook.sessionDelegate = self; 

你也需要在你的对象中实现FBSessionDelegatecallback。

我没有检查此stream.publish,但这是什么

 [facebook dialog:@"oauth" andParams:params andDelegate:self]; 

是必要的。

迈克Bretz方法为我工作。

我有一个类(视图控制器)有一个button,执行以下操作:

 NSMutableDictionary * params = [NSMutableDictionary dictionary]; [params setObject:FACEBOOK_APP_ID forKey:@"client_id"]; [[SHARED_APP facebook] setSessionDelegate:self]; [[SHARED_APP facebook] dialog:@"oauth" andParams:params andDelegate:self]; 

我的控制器也符合协议FBSessionDelegate
SHARED_APP是我的[[UIApplication sharedApplication]委托]

我实施了这个方法

 -(void)fbDidLogin { NSLog(@"fbDidLogin"); } 

它的工作!

然后我可以随后调用类似的方法

 [[SHARED_APP facebook] requestWithGraphPath:@"me/friends" andDelegate:self]; 

检索JSON数据(使用FBRequestDelegate)对于每个请求,请小心testing返回值,如http://developers.facebook.com/blog/post/500中所解释的,以继续查看您是否仍然通过身份validation

希望能帮助到你

我只是有这个问题,相信我可能find你的解决scheme。 当您在Facebook上创build应用程序时,您必须编辑您的应用程序设置以允许使用本机ios应用程序。 所选的ios捆绑包ID必须与您正在创build的应用中的捆绑ID完全匹配。 Facebook表示,他们在授权你的应用程序之前检查这一点。 有趣的是,如果你从设备中删除Facebook应用程序,然后尝试使用networking浏览器进行身份validation,看起来完全是“安全”。 Facebook不会发送错误消息,所以跟踪起来非常有趣。 我想我会把这个答案放在那里,希望能挽救一些未来的开发者一些麻烦。 我希望这有帮助。

在我的情况下,由于info.plist中的错误,fbDidLogin没有被调用。 应该将URL计划添加到URLtypes中。 在这里,fbMyAppIdstring被添加为项目0.(错误地我添加了URL标识符而不是URL Schemes)

你只需要在你的App Delegate中实现这个方法

  - (void)fbDidLogin { NSLog(@"DID LOGIN!"); NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:[[self facebook] accessToken] forKey:@"FBAccessTokenKey"]; [defaults setObject:[[self facebook] expirationDate] forKey:@"FBExpirationDateKey"]; [defaults synchronize]; } 

你正在犯的错误是你正在你的自定义视图中实现这个方法。

编辑:

上面的代码是完美的,但是如果你想获得对你的自定义viewcontroller的控制,你可以在你的appDelegate上维护这个代码,并将这些代码添加到你的CustomViewController中:

  delegate= (YourAppDelegate *)[[UIApplication sharedApplication] delegate]; [delegate facebook].sessionDelegate=self; 

所以,你可以在你的CustomViewController中重写fbDidLogin,不要忘记在你的CustomViewController.h(Header)中添加FBSessionDelegate。

亲切的问候。

当您按照示例应用程序中的步骤进入您的自定义应用程序时,将控制器类设置为单例,然后运行!

大多数开发人员分配和init 2实例,因为委托fbDidlogin永远不会被调用。

希望这可以帮助。

fbDidLogin在login成功后被Facebook对象调用,所以请记得分配seesionDelegate:

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

地图确定它是在应用程序委托类,即:MYAPPAppDelegate.m意思是应用程序:(UIApplication *)应用程序openURL:方法