fbDidLogin未被调用 - iOS

10

我正在为我的iOS应用程序实现Facebook功能,但在实现过程中遇到了一些问题,具体来说是fbDidLogin方法未被调用。

我已经创建了一个名为FBFetcher的示例对象:

    @interface FBFetcher : NSObject <FBDialogDelegate,FBSessionDelegate,FBRequestDelegate> {
    Facebook *facebook;
    FBFetcher *facebookFetcher; 
}
-(void)login; 
@property (retain) Facebook  *facebook;
@property (retain) FBFetcher *facebookFetcher; 
@end
在FBFetcher.m文件中:
    @implementation FBFetcher 
@synthesize facebookFetcher,facebook;


-(void)login{
    facebook = [[Facebook alloc] initWithAppId:@"...."]; 
    NSArray *permissions =  [[NSArray arrayWithObjects: @"offline_access",@"user_about_me", nil] retain];
    [facebook authorize:permissions delegate:self];

}

-(void)fbDidLogin {
    NSLog(@"Erfolgreich eingeloggt....");
}

@end

在我的应用程序代理中:

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

    return [[[controller facebookFetcher] facebook] handleOpenURL:url];
}

我有一个单独的视图控制器,其中有n个与UIButton绑定的动作:

facebookFetcher = [[FBFetcher alloc] init];
[facebookFetcher login]; 

我可以访问登录和授权页面,但是方法fbDidLogin从未被调用。有什么建议吗?


当你在Facebook应用上按下“接受”按钮时,你的应用程序会自动返回。 - Daniel Amitay
3个回答

33

这个方法从未被调用,因为当你进行授权时,是在Safari中进行的。为了解决这个问题,我认为这其实是Facebook SDK的一个bug,打开facebook.m文件并找到以下行:

[self authorizeWithFBAppAuth:YES safariAuth:YES];

并将其更改为

[self authorizeWithFBAppAuth:NO safariAuth:NO];

这种方法可以确保你不会被重定向到Safari,而是在对话框中完成所有操作。

只需测试一下,你就会发现fbDidLogin方法将被调用。

希望这能有所帮助。


1
这是一些非常好的信息。绝对需要更多的赞! - Eric Brotto
1
天啊,非常感谢你,你帮我省了很多时间!给这个答案更多的赞,我说的就更多!:P - Tilo Mitra
4
非常感谢。对于那些使用静态库并位于ARC环境中的人,需要注意一点(显而易见?)。您需要从项目中删除您创建的原始库,编辑Facebook的src目录中的此文件,然后重新创建和包含静态库。 - Ryan Crews
我差点要喷血了。谢谢分享! - haifacarina

1
在 Facebook.m 中查找此函数。这是 Facebook 调用您的 fbDidLogin 函数的位置。首先确保它被调用,然后进行调试。确保您在会话委托中正确拼写/定义了 fbDidLogin(没有参数)。如果没有,则 respondsToSelector 将失败并且永远不会调用您的委托函数。
- (void)fbDialogLogin:(NSString *)token expirationDate:(NSDate *)expirationDate
{
  self.accessToken = token;
  self.expirationDate = expirationDate;
  if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogin)])
  {
    [_sessionDelegate fbDidLogin];
  }
}

1

关于什么?

- (void)fbDidNotLogin:(BOOL)cancelled

这个会被调用吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接