在 iOS6 上切换设备上的 FB 帐户时 Facebook 授权失败

2024-04-11

我正在使用 Facebook SDK 3.1.1 在我的 iOS 应用程序中实现 FB Connect。在简单的情况下,无论是使用新的 FB 集成(在 iOS 上登录)还是通过 Web 视图返回到正常授权(在这两种情况下我都没有安装本机 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}

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


另一个答案 https://stackoverflow.com/questions/12601191/facebook-sdk-3-1-error-validating-access-token提供了一种手动将设备与服务器重新同步的方法。我定义了一个名为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 if 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 帐户之间切换并能够登录。耶!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 iOS6 上切换设备上的 FB 帐户时 Facebook 授权失败 的相关文章

随机推荐

  • 存储对特定文件的更改

    我有一个大型 git 项目 我愚蠢地将其导入到 eclipse 并运行自动格式 现在 项目中的每个文件都显示为已修改 我宁愿还原所有仅格式化且未进行其他更改的文件 而不是提交格式化的文件 例如 git status On branch ma
  • Python 多处理和处理工人中的异常

    我使用 python 多处理库来实现一种算法 其中有许多工作人员处理某些数据并将结果返回给父进程 我使用 multiprocessing Queue 将作业传递给工作人员 然后收集结果 一切都运行得很好 直到工作人员无法处理某些数据块 在下
  • Opencv Python打开dng格式

    我不知道如何在 opencv 中打开 dng 文件 该文件是在使用三星 Galaxy S7 的专业选项时创建的 使用这些选项时创建的图像是 dng 文件以及尺寸为 3024 x 4032 的 jpg 我相信这也是 dng 文件的尺寸 我尝试
  • MVC3 和 EF 数据优先:最佳实践是什么?

    似乎 MVC3 和 EF4 1 的大部分焦点都围绕 代码优先 我似乎找不到任何满足以下条件的示例或教程 使用现有的 SQLServer 数据库 有单独的网络和数据访问项目 我们将有多个网络应用程序共享相同的数据访问类 验证建议 是否存在这样
  • javascript中的地理空间查询[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一个 javascript 库 它可以让我进行地理空间查询 我知道 OpenLayers 和
  • codeigniter、result() 与 result_array()

    我都用result and result array 通常我喜欢将结果作为数组 这就是我主要使用 result array 的原因 但我想知道我应该遵循哪种更好的方法 就性能而言 其中哪一个使用起来更有效 这是我在 codeigniter
  • 如何使用VBA保存分号分隔的csv文件?

    我将数据复制到电子表格中 使用 VBA 对其进行格式化 然后将该工作表保存到 CSV 文件中 我使用以下代码 ws SaveAs Filename filestr Fileformat xlCSV ws 是我保存的工作表 这给了我一个以逗号
  • 在 Symfony2 中将多对多关系保存到数据库

    在我的 Symfony2 项目中 我有两个相关的实体 用户和收藏夹 他们之间是多对多的关系 我的应用程序的工作原理如下 在我的 Twig 页面中 我有一些带有 添加到收藏夹 按钮的项目 当您单击该按钮时 我的控制器会将 item id 保存
  • 无法播放 AVAudioPlayer 中文档中的文件

    我在应用程序的文档文件夹中有一个文件 我想播放它 if NSFileManager defaultManager fileExistsAtPath pathString let url NSURL fileURLWithPath pathS
  • Mac OSX 中的 eclipse 中凭证存储失败

    当我使用 mac 中的 eclipse 和我的凭据连接到 tfs 中的服务器项目时 它的连接没有任何问题 但是当我在登录对话框中检查 保存密码 时 它显示错误 凭据存储失败 无法保存您的凭据 有什么办法可以摆脱这个 因为我不想每次打开 ec
  • LibGDX 文本字段输入导致崩溃

    所以我试图制作一个登录屏幕 现在的问题是 当我在文本字段中输入文本时 我的游戏崩溃了 这是我的主菜单类 import com badlogic gdx Gdx import com badlogic gdx Screen import co
  • 无法对非静态方法进行静态引用

    到目前为止我有以下代码 import java util Scanner public class HallLanceMemoryCalculator private double currentValue public static in
  • window.onload 与 $(document).ready()

    JavaScript 之间有什么区别window onload https developer mozilla org en docs Web API GlobalEventHandlers onload和 jQuery 的 documen
  • Vertx JDBC 的底层工作原理

    我已经使用 Vertx 3 个月了 但现在我想知道非阻塞 Vertx JDBC 是如何工作的 例如 private void selectEndedMatches this jdbcClient getConnection conn gt
  • `fs.js` 中的 `process.binding('fs')` 是什么? [复制]

    这个问题在这里已经有答案了 我看到在顶部fs js有一个process binding fs https github com nodejs node blob master lib fs js L10 https github com n
  • Facebook 创建新应用程序错误 - “不应包含协议信息。”

    我正在尝试更新 创建我的应用程序的 应用程序域 但它不断抛出此错误 Error 应用程序域 http www example com http www example com不应包含协议信息 而我 100 确定我的网站没有任何 OpenGr
  • 如何在 alpine 上安装 aws-cli?

    我正在运行 alpine 的 docker swarm 管理器节点上安装 aws cli Linux 0317632a4ad9 4 9 59 moby 1 SMP Thu Mar 1 20 54 00 UTC 2018 x86 64 Lin
  • 如何制作 HTML 脚本来替换网站的 cookie

    我想要制作一个 HTML 脚本 只需单击一下按钮即可替换特定网站的 cookie PS 我不知道这是如何完成的 我之前创建过扩展 但是我想创建一个执行相同工作的网页 HTML 根本无法对 cookie 执行任何操作 Cookie 可以通过以
  • mySQL 当 field=0 时返回所有行

    我正在做一些测试 当我查询一个表时 令人惊讶的是 查询SELECT FROM table WHERE email 0返回表中的所有行 该表没有 0 值 并且填充了常规电子邮件 为什么会出现这种情况 这可能会导致严重的安全问题 有没有办法在不
  • 在 iOS6 上切换设备上的 FB 帐户时 Facebook 授权失败

    我正在使用 Facebook SDK 3 1 1 在我的 iOS 应用程序中实现 FB Connect 在简单的情况下 无论是使用新的 FB 集成 在 iOS 上登录 还是通过 Web 视图返回到正常授权 在这两种情况下我都没有安装本机 F