Facebook oauth / access_token отсутствует - PullRequest
7 голосов
/ 05 октября 2010

Не знаю, если я что-то упустил, но здесь идет.Я пытаюсь получить 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 следующим образом:самостоятельно];

Ответы [ 6 ]

5 голосов
/ 27 апреля 2012

Это BUG : https://developers.facebook.com/bugs/325262010847554

Реализация OAuth 2.0 в Facebook явно нарушает спецификации: http://tools.ietf.org/html/draft-ietf-oauth-v2-25#section-5.1

Я использую Server-на стороне веб-приложения и имеют ту же проблему, которую вы описали для iOS SDK.

2 голосов
/ 07 августа 2015

Это исправлено с v2.3 графика API.Укажите версию с помощью конечной точки https://graph.facebook.com/v2.4/oauth/access_token.
Легко случайно попасть на неправильную версию документации API Facebook.

1 голос
/ 09 июля 2011

Вот фрагмент для извлечения вашего токена доступа и замены символа канала на правильный escape ...

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])];
}
0 голосов
/ 06 октября 2010

Продолжение.

Я понимаю, что 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 перестанет работать и потребуется обновление.Не круто.

0 голосов
/ 05 октября 2010

Если вы используете Facebook SDK, я считаю, что они возвращают NSArray и NSDictionnary

Возможно, я ошибаюсь, но попробуйте с objectForKey:@"access_token"

0 голосов
/ 05 октября 2010

Есть ли какие-либо сведения о том, почему возвращаемая строка не закодирована в формате json?

Да, маркер доступа не должен кодироваться в формате JSON.И все же, возможно, ценность JSON-кодирования одной строки в любом случае невелика.

Почему вы ожидаете, что это так?

Кажется, меня об этом не знали.В спецификации говорится, что application / json должен использоваться для тела ответа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...