it-swarm.com.ru

Facebook iOS SDK 3.1: «Ошибка: код состояния HTTP: 400»

Я использую Facebook SDK 3.1 на Xcode 4.5GM с симулятором iOS6. Я подключаюсь к FB в настройках iOS и успешно подключаю FB в своем приложении, используя новый интерфейс iOS6 FBConnect. У меня есть токен доступа, я могу видеть своих друзей, отправлять запросы приложений, публиковать сообщения на моей стене и т.д. Однако, каждый раз, когда я инициирую какой-либо вид FBURLConnection, я вижу это напечатанным на моей консоли:

Error: HTTP status code: 400

Я вошел в код FB и напечатал ответ, когда эта ошибка напечатана, и я получаю:

{
    body =     {
        error =         {
            code = 100;
            message = "(#100) The parameter 'attribution' is required for the 'mobile_app_install' activity";
            type = OAuthException;
        };
    };
    code = 400;
}

Кто-нибудь знает, как решить эту проблему? Кажется, все функции работают, но я продолжаю видеть этот спам на своей консоли.

17
stipe108

Сразу после создания сессии сделайте это:

[FBSession setActiveSession:session];
18
Anthony Dmitriyev

Насколько я могу судить, это ошибка, представленная в 3.1 SDK. Глядя на сетевой трафик с Чарльзом, они пытаются POST набрать graph.facebook.com/[user id]/activities, но это не удается.

3
cbowns

После долгих поисков и устранения неисправностей и просмотра всех предложений по Stackoverflow я получил решение об ошибке 400 (error.code = 5). Решение в моем случае состояло в том, чтобы убедиться, что параметры (также называемые postParams), включенные в мой вызов startWithGraphPath, имеют точно параметры, поддерживаемые типом публикуемого содержимого.

Точнее говоря, я публиковал ссылку для меня/канала с помощью клавиши @ "ref" (обычно используется для отслеживания с помощью FB Insights).

После удаления клавиши "ref" startWithGraphPath завершился успешно.

NSMutableDictionary *postParams = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                   @"Test NAME field (from ios app)", @"name",
                                   @"Test caption", @"caption",
                                   @"Test description", @"description",
                                   @"http://example.com/test1.html", @"link",
                                   @"http://example.com/water.jpg", @"picture",
                                   // @"foo", @"ref",  // WRONG!
                                   nil];

[FBRequestConnection startWithGraphPath:@"me/feed"
                             parameters:postParams
                             HTTPMethod:@"POST"
                      completionHandler:^(FBRequestConnection *connection,
                                          id result,
                                          NSError *error)

Моя ActiveSession (и все другие возможные виновники) извлечены ОК.

2
Donn Lee

Это то же самое, что мой ответ отсюда: Facebook SDK 3.1 - Ошибка: код состояния HTTP: 4

Но это может помочь людям, которые все еще получают ошибку 400.

Первоначальная проблема была решена Facebook сразу после выпуска SDK 3.1.

Но у некоторых все еще есть проблемы, если у вас есть эта проблема, вы должны проверить поток входа в систему и посмотреть примеры Facebook, если у вас все еще есть проблемы, это может быть подсказкой для решения.

Я получил ошибку 400, когда у меня нет прав доступа к моей информации. Странно то, что я получаю accessToken и даже действительный логин (это потому, что я структурировал свой код с помощью примера Scrumptible и выполнил действительный логин, когда открыто состояние Session).

FBSessionState открывается только на секунду, а затем изменяется на закрытый с ошибкой 400.

При встроенном входе в iOS6 вы получаете уведомление о разрешении, когда запрашиваете его, а затем телефон запоминает этот выбор на 24 часа. Но если пользователь войдет на домашнюю страницу Facebook и затем удалит разрешение для приложения, телефон запомнит этот параметр на 24 часа, независимо от того, переустановили ли вы приложение или нет.

Об этом я узнал после нескольких часов отладки, так как я разрешил приложение из настроек в iOS, но я не смог опубликовать, и так как я удалил разрешение из конфиденциальности Facebook, и предупреждение больше не показывалось, я ничего не мог сделать, но вручную дать мне разрешения через инструмент отладки или подождать 24 часа, чтобы я мог снова принять предупреждение о разрешении facebook.

0
Joakim Engstrom

Я обнаружил, что код состояния 400 также генерируется с FBErrorHTTPError, когда что-то не так с Optional Properties в наборе полей "Определить тип действия" на панели определения Facebook => Open Graph.

В моем случае я публиковал объект действия без свойства, помеченного как isRequired. Также обратите внимание на опцию isArray и в целом, для правильного соответствия с тем, что вы отправляете.

0
brainondev