Facebook oauth / access_token失踪

时间:2010-10-05 08:47:42

标签: iphone facebook sdk

如果我错过了一些东西,但是在这里,我不知道。我试图为我的应用程序获取access_token,以便它可以在Facebook上查找某些公共组的事件,而无需用户登录。

我试图从中获取access_token https://graph.facebook.com/oauth/access_token?client_secret=foobar&client_id=foobar&grant_type=client_credentials&format=json&sdk=ios

返回一个字符串:access_token = xxxx | ugtqdoWfvvo5_S-Fo2D7_I4rdbc

这很好,所有,但它没有json。有关为什么返回的字符串不是json编码的任何见解?

注意: 我正在使用Facebook ios SDK功能 [_facebook requestWithGraphPath:@“oauth / access_token”andParams:params andHttpMethod:@“POST”andDelegate:self];

6 个答案:

答案 0 :(得分:5)

这是 BUG https://developers.facebook.com/bugs/325262010847554

Facebook的OAuth 2.0实施显然违反了规范:http://tools.ietf.org/html/draft-ietf-oauth-v2-25#section-5.1

我正在使用服务器端Web应用程序流,并且您遇到了与iOS SDK相同的问题。

答案 1 :(得分:2)

从图api的v2.3开始修复。使用端点https://graph.facebook.com/v2.4/oauth/access_token指定版本 很容易意外地登陆错误版本的facebook API文档。

答案 2 :(得分:1)

这是一个片段,用于提取您的访问令牌并使用正确的转义符替换管道符...

NSURL *accessTokenURL = [NSURL URLWithString:@"https://graph.facebook.com/oauth/access_token?client_id=XXXXXXXXXXXXX&client_secret=XXXXXXXXXXXXXXXXXXX&grant_type=client_credentials"];
NSString *accessTokenResponse = [NSString stringWithContentsOfURL:accessTokenURL encoding:NSUTF8StringEncoding error:NULL];
if(accessTokenResponse != nil) {
    NSMutableString *accessToken = [NSMutableString stringWithString:[accessTokenResponse substringFromIndex:13]];
    [accessToken replaceOccurrencesOfString:@"|" withString:@"%7C" options:NSLiteralSearch range:NSMakeRange(0, [accessToken length])];
}

答案 3 :(得分:0)

跟进。

我理解FB ios SDK的方式是你的委托函数将接收一个对象,如NSArray或NSDictionnary来使用。查看FB SDK类的内部结构似乎使用SBJSON解析器解析所有响应。如果响应不是json那么将失败。

[_ facebook requestWithGraphPath:@“261247595170”andDelegate:self]; 返回好json。没有问题。

[_ facebook requestWithGraphPath:@“oauth / access_token”andParams:params andHttpMethod:@“POST”andDelegate:self]; 返回字符串。 SBJSON解析器失败。

这似乎是FB图形服务中的不一致。

可以编写一个特殊函数来处理这个问题,但如果FB决定更改字符串的格式,那么所有的iPhone应用程序都将停止工作,并需要更新。不酷。

答案 4 :(得分:-1)

  

任何有关返回原因的见解   string不是json编码的?

是的,访问令牌不应该是JSON编码的。无论如何,JSON编码单个字符串的价值可能很小。

你为什么期待它呢?

似乎我对此误导了。规范声明application / json将用于响应主体。

答案 5 :(得分:-1)

如果您使用的是Facebook SDK,我相信它们会返回NSArray和NSDictionary

我可能错了,但请尝试使用objectForKey:@"access_token"