iOS facebook SDK:登录已通过身份验证
Posted
技术标签:
【中文标题】iOS facebook SDK:登录已通过身份验证【英文标题】:iOS facebook SDK: Login already authenticated 【发布时间】:2012-12-27 18:01:33 【问题描述】:我已经在我已经开发了几个月的应用程序中运行了 Facebook ios SDK。在这一点上,我主要将 SDK 用于 SSO 目的。
自从我开始使用 iOS 6.0 以来,我一直看到“使用 MY_APP 登录以使用您的 FB 帐户”模式阻止我当前视图的问题。 奇怪的是用户已经通过身份验证并且显然被授权使用我的应用程序。我可以得到用户的电子邮件地址等事实证明了这一点。
还需要注意的是,如果我单击“X”,它将关闭并且一切正常(用户已通过身份验证/授权)。如果我按照它告诉我的方式登录,它会显示“MY_APP 已授权”模式,我无法单击“确定”按钮,但我可以单击“X”,这再次让我回到我的视图,用户已通过身份验证和授权。
在这里你可以看到它:
为了进行身份验证,我在appdelegate
中调用了以下方法:
[appDelegate openSessionWithAllowLoginUI:YES];
以下是我的appdelegate中相关的FB方法:
// FACEBOOK STUFF
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI
NSArray *permissions = [NSArray arrayWithObjects: @"email", nil];
return [FBSession openActiveSessionWithReadPermissions:permissions
allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session, FBSessionState status, NSError *error)
[self sessionStateChanged:session state:status error:error];
];
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState)state
error:(NSError *)error
// FBSample logic
// Any time the session is closed, we want to display the login controller (the user
// cannot use the application unless they are logged in to Facebook). When the session
// is opened successfully, hide the login controller and show the main UI.
switch (state)
case FBSessionStateOpen:
FBCacheDescriptor *cacheDescriptor = [FBFriendPickerViewController cacheDescriptor];
[cacheDescriptor prefetchAndCacheForSession:session];
[self sendAuthenticationStatusChangedNotification];
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
// FBSample logic
// Once the user has logged in, we want them to be looking at the root view.
[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];
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation
// FBSample logic
// We need to handle URLs by passing them to FBSession in order for SSO authentication
// to work.
return [FBSession.activeSession handleOpenURL:url];
编辑 1
我注意到这发生在我的一部手机上,而另一部则没有。无法使用的手机安装了旧版本的 FB 应用程序。更新 FB 应用程序阻止了此问题的发生。我仍然对避免其他人遇到相同问题的修复感兴趣。
编辑 2
这个问题暂时消失了,但现在即使安装了新的 facebook 应用程序又回来了。请帮忙!
【问题讨论】:
【参考方案1】:对我来说,这个问题实际上是一个愚蠢的问题。我在打电话
[appDelegate openSessionWithAllowLoginUI:YES];
两次由于连接了两次的按钮单击事件。只要它只被调用一次,问题就消失了!
【讨论】:
以上是关于iOS facebook SDK:登录已通过身份验证的主要内容,如果未能解决你的问题,请参考以下文章
通过 facebook ios SDK 结合 Azure 移动服务获取名字和姓氏
iPhone / iOS Facebook SDK - 您可以在应用内登录并保留登录凭据吗?
Facebook通过iOS中的Facebook SDK通过应用程序登录?
Facebook iOS SDK 和基于 Safari 的身份验证问题