在设备上切换FB帐户时,iOS6上的Facebook授权失败 [英] Facebook authorization fails on iOS6 when switching FB account on device
问题描述
我正在使用Facebook SDK 3.1.1在我的iOS应用程序中实现FB Connect。这在新的FB集成(在iOS上登录)或通过Web视图回退到正常授权的简单情况下工作正常(我在两种情况下都没有安装本机Facebook应用程序)。
当我在iOS级别切换帐户时出现问题。注销并使用其他FB用户帐户登录。
I'm using die Facebook SDK 3.1.1 to implement FB Connect in my iOS application. This works fine in the simple case with either the new FB integration (logged in on iOS) or falling back to the normal authorization via web view (I do not have the native Facebook application installed in both cases). The problem occurs when I switch the account on iOS level. Logging out and logging in with a different FB user account.
要登录/授权我执行:
[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
如果然后每次获得FBSessionStateClosedLoginFailed,即使我执行 closeAndClearTokenInformation
达到该状态时:
If then get a FBSessionStateClosedLoginFailed every time even though I perform a closeAndClearTokenInformation
when that state is reached:
- (void)sessionStateChanged:(FBSession *)session
state:(FBSessionState) state
error:(NSError *)error
{
NSLog(@"Session State Changed: %u", [[FBSession activeSession] state]);
switch (state) {
case FBSessionStateOpen:
break;
case FBSessionStateClosed:
case FBSessionStateClosedLoginFailed:
NSLog(@"FBSessionStateClosedLoginFailed ERROR: %@", [error description]);
[[FBSession activeSession] closeAndClearTokenInformation];
break;
default:
break;
}
但是,每次重试都会收到相同的状态。我的日志说明如下:
However, I receive the same state on every retry. My log says the following:
FBSDKLog: FBSession **INVALID** transition from FBSessionStateCreated to FBSessionStateClosed
FBSDKLog: FBSession transition from FBSessionStateCreated to FBSessionStateCreatedOpening
FBSDKLog: FBSession transition from FBSessionStateCreatedOpening to FBSessionStateClosedLoginFailed Session State Changed: 257
FBSessionStateClosedLoginFailed TOKEN: (null)
FBSessionStateClosedLoginFailed ERROR: Error Domain=com.facebook.sdk Code=2 "The operation couldn’t be completed. (com.facebook.sdk error 2.)" UserInfo=0xb24cc20 {com.facebook.sdk:ErrorLoginFailedReason=com.facebook.sdk:ErrorLoginFailedReason}
任何人都可以复制这个或者知道问题可能在哪里吗?
Can anyone reproduce this or has any idea where the problem might lie?
推荐答案
另一个答案给出了手动重新同步设备的方法服务器。我定义了一个名为 fbRsync
的方法来调用此代码。确保在您的实现文件中 #import< Accounts / Accounts.h>
然后定义此方法:
Another answer gives a way to manually resync the device with the server. I defined a method called fbRsync
to call this code. Make sure to #import <Accounts/Accounts.h>
in your implementation file and then define this method:
-(void)fbResync
{
ACAccountStore *accountStore;
ACAccountType *accountTypeFB;
if ((accountStore = [[ACAccountStore alloc] init]) && (accountTypeFB = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook] ) ){
NSArray *fbAccounts = [accountStore accountsWithAccountType:accountTypeFB];
id account;
if (fbAccounts && [fbAccounts count] > 0 && (account = [fbAccounts objectAtIndex:0])){
[accountStore renewCredentialsForAccount:account completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) {
//we don't actually need to inspect renewResult or error.
if (error){
}
}];
}
}
然后我调用 fbResync
如果 openActiveSessionWithReadPermissions
产生错误:
I then call fbResync
if openActiveSessionWithReadPermissions
yields an error:
[FBSession openActiveSessionWithReadPermissions:permissions
allowLoginUI:YES
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
if(error)
{
NSLog(@"Session error");
[self fbResync];
[NSThread sleepForTimeInterval:0.5]; //half a second
[FBSession openActiveSessionWithReadPermissions:permissions
allowLoginUI:YES
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];
}
else
[self sessionStateChanged:session state:state error:error];
}];
半秒延迟可能是不必要的,但它目前让我心神不定。
The half a second delay is likely unnecessary, but it currently gives me piece of mind.
这似乎解决了我的问题。我现在可以在Facebook帐户之间切换,并且能够登录.Yay!
This seems to solve the problem for me. I can now switch between Facebook accounts and am able to log in. Yay!
这篇关于在设备上切换FB帐户时,iOS6上的Facebook授权失败的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!