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]; } }