我正在尝试将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方法永远不会被调用。有什么建议?
答案 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];
}
}