我的应用程序支持使用facebook登录,但是当我退出并再次登录时,我没有被要求提供任何凭据 - 它会立即使用iOS6中的本地用户名登录。我想要在本机facebook应用程序中的东西:
点击"不是你" facebook提供新的登录屏幕。
我遵循了tutorial
问题似乎在某处:
- (void)openSession
{
NSArray *permissions=[NSArray arrayWithObjects: @"publish_stream", @"publish_actions",@"create_event", nil];
// [FBSession open]
[FBSession openActiveSessionWithPublishPermissions:permissions
defaultAudience:FBSessionDefaultAudienceEveryone
allowLoginUI:YES
completionHandler:
^(FBSession *session,
FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
}
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
switch (state) {
case FBSessionStateOpen: {
NSLog(@"Sesstion opened");
UIViewController *topViewController =
[self.navController topViewController];
NSLog(@"Class: %@", [[topViewController presentedViewController] class]);
if ([[topViewController presentedViewController]
isKindOfClass:[LoginViewController class]])
{
[topViewController dismissViewControllerAnimated:YES completion:nil];
}
ViewController *basic=(ViewController*)topViewController;
NSLog(@"Populating details");
[basic populateUserDetails];
}
break;
case FBSessionStateClosed:
{
NSLog(@"Session closed");
[FBSession.activeSession closeAndClearTokenInformation];
}
case FBSessionStateClosedLoginFailed:
NSLog(@"Login failed");
[self.navController popToRootViewControllerAnimated:NO];
[FBSession.activeSession closeAndClearTokenInformation];
[self showLoginView];
break;
default:
break;
}
if (error) {
UIAlertView *alertView = [[UIAlertView alloc]
initWithTitle:@"Error"
message:error.localizedDescription
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[alertView show];
}
}
答案 0 :(得分:2)
我不确定Facebook SDK是否支持 - 尽管我可能错了。这个想法(据我所知)是Facebook登录允许当前登录的Facebook用户登录您的应用程序。如果没有人登录Facebook,将显示凭据页面。提供有效凭据后,用户将登录到Facebook并将auth_token发送到您的应用程序。
关键是您无法对当前登录Facebook的用户进行身份验证。这首先需要退出当前用户,我认为Facebook希望保持这个"更改用户" Facebook应用程序的功能。
另请注意,从您的应用退出时,用户会保持登录Facebook状态。这与适用于使用Facebook身份验证的网站的策略不同。在这种情况下,用户应该从站点和Facebook注销。