使用 Facebook Graph API 提取用户信息时出现身份验证错误

Posted

技术标签:

【中文标题】使用 Facebook Graph API 提取用户信息时出现身份验证错误【英文标题】:Authentication Error while extracting user information with Facebook Graph API 【发布时间】:2011-03-05 21:53:19 【问题描述】:

我正在尝试通过 FBConnect 最新的 SDK 提取用户的基本信息。我的代码很简单:

- (void)viewDidLoad 
    [super viewDidLoad];

    facebook = [[Facebook alloc] initWithAppId:fbAppId];
    NSArray* permissions = [[NSArray arrayWithObjects:@"user_about_me",@"read_stream",nil]retain];
    [facebook authorize:permissions delegate:self];     

    [facebook requestWithGraphpath:@"me" andDelegate:self];     
    NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   fbAppId, @"app_id",
                                   [NSString stringWithFormat: @"Some Text"], @"description",
                                   @"My Test App", @"name",
                                   @"Test Facebook Graph API",@"message", 
                                   nil];

    [facebook dialog:@"feed" andParams:params andDelegate:self];

- (BOOL) application: (UIApplication*) application handleOpenURL:(NSURL *)url 
    return [facebook handleOpenURL:url];

- (void) fbDidLogin 
NSLog(@"FB didLogin");

- (void) fbDidNotLogin:(BOOL)cancelled 
NSLog(@"FB didNotLogin");

- (void) request:(FBRequest *)request didLoad:(id)result 
    NSLog(@"request-didLoad-result");
  
- (void)request:(FBRequest *)request didReceiveResponse:(NSURLResponse *)response 
    NSLog(@"received response");

到目前为止,一切都很顺利。通过用户墙上的对话框发布提要可以正常工作。当我尝试使用以下名称获取用户信息时会出现问题:

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

但是 fbDidLogin 和 requestDidLoad 都没有被调用。对于 requestDidLoad,我检查了 didLoadRawResponse,因为它在请求 didLoad 之前被调用:

- (void)request:(FBRequest *)request didLoadRawResponse:(NSData*)data 

    NSString *response = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
    NSLog(@"Response is = %@",response);
    [response release];

我得到的回应是以下身份验证错误:

"error":"type":"OAuthException","message":"An active access token must be used to query information about the current user."

什么原因和解决方法?

【问题讨论】:

如果 fbDidLogin 没有被调用,你能检查一下这是否被调用 fbDidNotLogin,我希望你有正确的“fbAppId”值 @Yogesh:不,甚至 fbDidNotLogin 也没有被调用。我猜这是因为新的 SDK 暂时将控制权转移到 Facebook 应用程序或 Safari,无论哪个可用。它检测用户是否已经登录或以其他方式要求登录。我已经检查了这两种情况。是的,fbAppId 也是正确的。正如我所说,我可以在墙上发帖。剩下的唯一问题是在提取用户信息时进行授权。 很有趣,所以当您可以发布到墙上时,没有授权问题,而是当您尝试提取用户信息时。抱歉,除非我查看整个代码,否则我无能为力。另一个建议可能是您可以删除模拟器中的应用程序并尝试再次进行身份验证,看看是否可以解决问题 @Yogesh:是的,我确实刷新了模拟器,没有有用的结果:)。我已经上传了更多代码。这就是我所做的一切。大部分内容都在 viewDidLoad 中,因为大多数其他方法都没有被调用。我没有使用常规的 LoginDialog 和登录和注销,因为我想尝试自动登录最新的 Graph API。但我认为获得 access_token 仍然很重要。当您使用它时,您是否手动创建了登录和注销?您是否通过请求 URL 获得了 access_token?使用 Graph API 的更好方法是什么? 【参考方案1】:

我已在以下 wiki 中添加了我的整个代码 How to retrieve Facebook response using Facebook ios SDK

希望这会对您有所帮助,这是一个有效的代码,如果您有任何问题,请告诉我。

【讨论】:

非常感谢 Yogesh。当然有帮助。还有什么比整个代码更清楚的。因此,总而言之,新的单点登录功能无法做到这一点。必须实现手动登录才能获得访问权限。再次感谢:)

以上是关于使用 Facebook Graph API 提取用户信息时出现身份验证错误的主要内容,如果未能解决你的问题,请参考以下文章

Facebook Graph API页面/对话/消息端点错误(突然似乎已弃用)

使用 Meteor 从 FB-graph 中提取照片

如何邀请朋友参加活动? iPhone中的Facebook Graph API

发布到 Facebook Graph API 时指定隐私

使用 Facebook Graph API 搜索用户

使用 graph Api 获取 Facebook 页面事件