fbDidLogin未调用 - iOS

时间:2011-04-25 22:05:08

标签: iphone ios facebook

我正在尝试将facebook应用到我的iOS应用程序中用于学校项目但是我遇到了一些障碍,即没有调用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

在我的app delegate中:

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

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

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

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

我可以访问登录和授权页面,但fbDidLogin方法永远不会被调用。有什么建议?

3 个答案:

答案 0 :(得分:33)

永远不会调用该方法,因为在授权时,您正在Safari中执行此操作。为了解决这个问题,我认为这是Facebook SDK中的一个错误,打开facebook.m文件并找到以下行:

[self authorizeWithFBAppAuth:YES safariAuth:YES];

并将其更改为

[self authorizeWithFBAppAuth:NO safariAuth:NO];

这样你永远不会被发送到Safari,但一切都将在一个对话框中完成。

只需测试它,您就会看到fbDidLogin方法将被调用。

希望它会有所帮助

答案 1 :(得分:1)

怎么样?
- (void)fbDidNotLogin:(BOOL)cancelled

这会被调用吗?

答案 2 :(得分: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];
  }
}