gpt4 book ai didi

ios6 - 在设备上切换 FB 帐户时,iOS 6 上的 Facebook 授权失败

转载 作者:行者123 更新时间:2023-12-03 10:49:53 24 4
gpt4 key购买 nike

我正在使用 Facebook SDK 3.1.1 在我的 iOS 应用程序中实现 FB Connect。在使用新的 FB 集成(在 iOS 上登录)或通过 Web View 回退到正常授权(在这两种情况下我都没有安装 native Facebook 应用程序)的简单情况下,这可以正常工作。
当我在 iOS 级别切换帐户时出现问题。注销并使用不同的 FB 用户帐户登录。

要登录/授权我执行:

[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:allowLoginUI
completionHandler:^(FBSession *session, FBSessionState state, NSError *error) {
[self sessionStateChanged:session state:state error:error];
}];

如果每次都得到 FBSessionStateClosedLoginFailed,即使我执行了 closeAndClearTokenInformation当达到该状态时:
- (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;
}

但是,每次重试时我都会收到相同的状态。我的日志如下:
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}

任何人都可以重现这个或知道问题可能出在哪里吗?

最佳答案

Another answer提供了一种手动将设备与服务器重新同步的方法。我定义了一个名为 fbRsync 的方法调用此代码。确保#import <Accounts/Accounts.h>在您的实现文件中,然后定义此方法:

-(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产生错误:
[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];
}];

半秒的延迟可能是不必要的,但它目前让我放心。

这似乎为我解决了问题。我现在可以在 Facebook 帐户之间切换并能够登录。耶!

关于ios6 - 在设备上切换 FB 帐户时,iOS 6 上的 Facebook 授权失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12838118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com