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

问题描述:

我想通过FBConnect最新的SDK提取用户的基本信息。我的代码很简单:用Facebook Graph API提取用户信息时出现身份验证错误

- (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"); 
} 

到目前为止,一切都很顺利。在用户的墙上发布feed feed对话框可以正常工作。

[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."}} 

是什么原因和解决办法吗?

+0

如果fbDidLogin没有被调用,你可以请检查这是否被称为fbDidNotLogin,我希望你有正确的值“fbAppId” – Yogesh 2011-03-06 01:43:23

+0

@Yogesh:不,即使fbDidNotLogin没有被调用。我想这是因为新SDK将控制权暂时转移到Facebook应用程序或Safari,无论哪一个都可用。它检测用户是否已经登录或以其他方式要求登录。我已经检查了两种情况。是的,fbAppId也是正确的。正如我所说我可以在墙上张贴。剩下的唯一问题是在提取用户信息时进行授权。 – WaJiyaz 2011-03-06 10:26:15

+0

有趣,所以当你可以张贴到墙上没有授权问题,但当你试图提取用户信息。对不起,我无法帮助,除非我查阅整个代码。还有一个建议可能是你可以删除你的模拟器中的应用程序,并尝试再次验证,看看是否可以解决问题 – Yogesh 2011-03-07 02:36:00

我增加了我的整个代码在以下维基 How to retrieve Facebook response using Facebook iOS SDK

希望这会帮助你,这是一个工作代码,如果你有任何问题,请让我知道。

+0

非常感谢Yogesh。当然它有帮助。还有什么比整个代码更清晰。因此,总结一下,新的单点登录功能无法完成。必须实现手动登录才能访问。再次感谢:) – WaJiyaz 2011-03-08 14:25:53

+0

你是最受欢迎的。 – Yogesh 2011-03-08 14:55:50