2

我知道这看起来像是一个重复的问题,但我已经查看了与此相关的堆栈溢出的每一个问题,但我仍然收到以下错误:

Error Domain=com.facebook.sdk Code=2 "The operation couldn’t be completed. 
(com.facebook.sdk error 2.)" UserInfo=0x1ecbf8e0       
{com.facebook.sdk:ErrorLoginFailedReason=com.facebook.sdk:ErrorLoginFailedReason}

这就是 NSError 的整个 NSLog ..

我已按照教程对信件进行身份验证;

  • 在developers.facebook.com 上,我已将我的应用程序设为原生iOS 应用程序,并放入我的捆绑包ID
  • 在我的 info.plist 中,我包含了 URL 类型 > 项目 0 > URL 方案 > 项目 0 > fb123456 和 FacebookAppID = 123456,密钥。

我正在尝试使用以下代码进行身份验证;

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

权限设置为零。

我的应用程序委托中也有以下设置

- (void)applicationDidBecomeActive:(UIApplication *)application
{
[FBSession.activeSession handleDidBecomeActive];
}

- (void)applicationWillTerminate:(UIApplication *)application
{
[FBSession.activeSession close];
}

- (BOOL)application:(UIApplication *)application
        openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
     annotation:(id)annotation {
return [FBSession.activeSession handleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
return [FBSession.activeSession handleOpenURL:url];
}

我注意到的一件事是,在我松开按钮后,错误消息几乎立即出现在我的屏幕上,我将手机置于飞行模式并且速度相同,我认为该命令甚至没有离开手机并要去首先是 facebook 服务器。我肯定有网络连接,因为我在 facebook 调用之前访问了一个 google api。

编辑:

如果我使用下面不推荐使用的方法

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

我可以通过 facebook 进行身份验证。

返回的会话是

<FBSession: 0x20038450, state: FBSessionStateOpen, loginHandler: 0x2006ba90, appID: 3895930xxxxxxxx, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x1ed4ce30>, expirationDate: 2013-04-08 16:25:19 +0000, refreshDate: 2013-02-07 16:25:19 +0000, attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(
)>

与使用更新的 3.1.1 方法的失败尝试相比此会话

<FBSession: 0x1e8970b0, state: FBSessionStateClosedLoginFailed, loginHandler: 0x0, appID: 3895930xxxxxxxx, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x1d5853b0>, expirationDate: (null), refreshDate: (null), attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(
)>

我假设成功登录后会创建丢失的 loginHandler 对象。

虽然这允许我使用我的登录令牌继续开发我的应用程序的其余部分,但我不能接受将我的应用程序实时发送。有谁知道为什么会发生这种情况/可能是什么原因造成的?

4

2 回答 2

14

我在 2 个实例上遇到了同样的错误。

  1. 当您的 iPhone 在 Settings -> Facebook -> YourAppName 下未打开开关时,以允许您的应用程序使用 facebook 帐户。在这种情况下,我会显示一条警报,要求用户打开应用程序的开关。

  2. 当您的应用程序包标识符与您在 Facebook 应用程序设置页面上为您的应用程序指定的包标识符不匹配时。

由于即使没有互联网连接也会发生错误,我认为应该是第一种情况。

于 2013-02-10T15:48:16.933 回答
0

我有一个类似的问题。当我从设置切换 fb 用户时出现错误。在设备上切换 FB 帐户时,iOS6 上的 Facebook 授权失败这解决了我的问题

于 2013-04-05T17:23:19.760 回答