fbDidLogin未被调用 – iOS

我试图实施脸书到我的iOS应用程序的学校项目,但我遇到了一些障碍,即fbDidLogin方法不会被调用。

我创build了一个名为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]; } 

我有一个单独的视图控制器与绑定到UIButton的n行动:

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

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

该方法永远不会被调用,因为当你授权时,你正在做的Safari。 为了解决这个问题,我认为这是来自Facebook SDK的一个bug,打开facebook.m文件并find以下行:

 [self authorizeWithFBAppAuth:YES safariAuth:YES]; 

并将其更改为

 [self authorizeWithFBAppAuth:NO safariAuth:NO]; 

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

只要testing一下,你就会看到fbDidLogin方法会被调用。

希望它会有所帮助

关于什么

 - (void)fbDidNotLogin:(BOOL)cancelled 

这是否被称为?

在Facebook.m中查找这个函数。 这是Facebook调用你的fbDidLogin函数的地方。 首先确保这个被调用,然后debugging。 确保你在会话委托(无参数)中拼写/定义了fbDidLogin。 如果不是,那么respondsToSelector将会失败,永远不会调用你的委托函数。

 - (void)fbDialogLogin:(NSString *)token expirationDate:(NSDate *)expirationDate { self.accessToken = token; self.expirationDate = expirationDate; if ([self.sessionDelegate respondsToSelector:@selector(fbDidLogin)]) { [_sessionDelegate fbDidLogin]; } }