我正在将facebook登录集成到我的应用程序中。我希望用户能够登录并获得他的生日和位置。
我获得了最新的Facebook SDK并成功将其添加到我的应用程序中。我还在facebook上创建了一个新的应用程序,并添加了提供给我的应用程序的密钥。
我创建了一个“登录facebook”按钮并完成以下操作
当用户点击按钮
时// handler for button click
- (IBAction)facebookLoginTouched:(id)sender {
[self openSessionWithAllowLoginUI:YES];
}
此方法将向用户显示Facebook登录页面以获得他的许可
-(BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
NSArray *permissions = [[NSArray alloc] initWithObjects:
@"user_location",
@"user_birthday",
nil];
return [FBSession openActiveSessionWithReadPermissions:permissions
allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session,
FBSessionState state,
NSError *error) {
[self HandleLogin];
}];
}
然后如果登录和许可成功
- (void)HandleLogin {
if (FBSession.activeSession.isOpen) {
//THIS IS NEVER REACHED
[FBRequestConnection
startForMeWithCompletionHandler:^(FBRequestConnection *connection,
id<FBGraphUser> user,
NSError *error) {
//DO SOMETHING WITH THE USER INFO
}];
}
}
我的问题:
当我点击按钮时,Facebook页面输入正确,我输入了用户名/密码。它正确地记录了我,并且我允许应用程序访问我的信息。当我完成后,我成功返回应用程序。
但是当代码到达FBSession.activeSession.isOpen
时,它返回false。
为什么在我正确登录并获得权限后会话仍然关闭?
非常感谢任何帮助。
由于
答案 0 :(得分:2)
您可能缺少处理Facebook应用返回的代码。在您的app delegate实现文件中添加以下内容:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {
// attempt to extract a token from the url
return [FBSession.activeSession handleOpenURL:url];
}