无法通过OAuth 2.0从Facebook获取用户信息

时间:2010-09-09 09:22:54

标签: ios facebook facebook-graph-api oauth-2.0 facebook-ios-sdk

用户登录后,我会使用以下代码检索用户信息:

[_facebook requestWithGraphPath:@"me" andDelegate:self];

它最初几次工作,但最终返回错误。我认为这是一个会话的事情因为我对我的权限有“offline_access”。我从Facebook退出并从干净的构建中再次编译,它仍然返回此错误:

  

错误域= facebookErrDomain代码= 10000 UserInfo = 0x54a2930“操作无法完成。(facebookErrDomain错误10000。)”

我假设我的访问令牌有效,因为我可以发帖。我是正确的吗?

我还注意到,每当我登录时,如果我允许我的应用访问我的用户信息,Facebook就不会重定向请求权限。

谁能告诉我什么是错的?

5 个答案:

答案 0 :(得分:2)

关于授权命令的答案似乎有所不同。现在,没有像以前那样的失效日期。我尝试强制isSessionValid返回TRUE,它的工作原理。

isSessionValid检查accessToken和expirationDate。由于没有到期日期,函数返回FALSE。

不知道这是Facebook的临时修改,还是权威的修改。在这种情况下,我必须修复SDK。一个新的调用必须检索expirationDate。

答案 1 :(得分:1)

这是我用过的临时修复。您可以在FBLoginDialog.m

中找到此方法行46
- (void) dialogDidSucceed:(NSURL*)url {
  NSString *q = [url absoluteString];
  NSString *token = [self getStringFromUrl:q needle:@"access_token="];
  NSDate *expirationDate = [NSDate distantFuture];

  if ((token == (NSString *) [NSNull null]) || (token.length ==0)) {
    [self dialogDidCancel:url];
    [self dismissWithSuccess:NO animated:YES];
  } else {
    if ([_loginDelegate respondsToSelector:@selector(fbDialogLogin:expirationDate:)]) {
      [_loginDelegate fbDialogLogin:token expirationDate:expirationDate];
    }
    [self dismissWithSuccess:YES animated:YES];
  }
}

有此问题的每个人都请求offline_access权限吗?这是我可以看到没有发送过期日期的唯一原因。也许不要请求offline_access权限。

答案 2 :(得分:1)

我遇到了同样的问题。我检查了我的隐私设置,权限,其他方法等...,但我无法解决它。 许多网站都说“检查访问offline_access / read_stream / publish_stream的权限”,我认为这些也很重要,但我无法修复它。

然后我终于找到了以下解决方案,它运行正常。

您应该在“Facebook.m”文件中将“safariAuth:YES”更改为“safariAuth:NO”。

- (void)authorize:(NSArray *)permissions
         delegate:(id<FBSessionDelegate>)delegate {
            [_permissions release];
            _permissions = [permissions retain];
            _sessionDelegate = delegate;

            //[self authorizeWithFBAppAuth:YES safariAuth:YES];
            //You can get auth_token in iOS App!
           [self authorizeWithFBAppAuth:YES safariAuth:NO];      
}

如果您已登录,则可以使用以下方法获取您自己的信息。

[facebook requestWithGraphPath:@"me" andDelegate:self];

如果您尚未登录,则应首先通过以下方法登录。

permissions =  [[NSArray arrayWithObjects:
             @"email", @"read_stream", @"user_birthday", 
             @"user_about_me", @"publish_stream", @"offline_access", nil] retain];
if (![facebook isSessionValid]) {
    [facebook authorize:permissions delegate:self];
}

以下帖子救了我。非常感谢你! How to retrieve Facebook response using Facebook iOS SDK

祝你好运快乐编码! 谢谢。

答案 3 :(得分:0)

我遇到了这个问题,主要是因为我的Facebook帐户隐私最多。

最有可能是您在登录期间传入的权限。默认情况下,它只会提供对公共信息的访问权限。请记住,Facebook上公开的信息越来越少。

尝试将您的权限更改为“read_stream”,nil

然后代替[_facebook requestWithGraphPath:@“me”andDelegate:self];

尝试使用[_facebook requestWithGraphPath:@“me / home”andDelegate:self];

这应该会返回您的新闻Feed。 5分钟前为我工作过。

答案 4 :(得分:0)

这里添加的不多,在这里也不起作用。我使用iOS SDK发布到流,它一直工作到昨天。今天我的客户打电话给我并抱怨。啊。

我已经请求了离线访问权限,当然还有“publish_stream”权限......