fbDidLogin未调用 - iOS

Joh*_*ens 10 iphone facebook ios

我正在尝试将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
Run Code Online (Sandbox Code Playgroud)

在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
Run Code Online (Sandbox Code Playgroud)

在我的应用代表中:

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

    return [[[controller facebookFetcher] facebook] handleOpenURL:url];
}
Run Code Online (Sandbox Code Playgroud)

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

facebookFetcher = [[FBFetcher alloc] init];
[facebookFetcher login]; 
Run Code Online (Sandbox Code Playgroud)

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

Met*_*kin 33

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

[self authorizeWithFBAppAuth:YES safariAuth:YES];
Run Code Online (Sandbox Code Playgroud)

并将其更改为

[self authorizeWithFBAppAuth:NO safariAuth:NO];
Run Code Online (Sandbox Code Playgroud)

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

只需测试它,你就会看到该fbDidLogin方法将被调用.

希望它会有所帮助

  • 非常感谢,对于那些在ARC中并使用静态库的人来说,这是一个(明显的?)注释.您需要删除从项目中创建的原始库,在Facebook的src目录中编辑此文件,然后重新创建并包含静态库. (4认同)

Pet*_*ter 1

关于什么

- (void)fbDidNotLogin:(BOOL)cancelled
Run Code Online (Sandbox Code Playgroud)

这会被调用吗?