Подтвердить что ты не робот

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;
}

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

4b9b3361

Ответ 1

Эта ошибка отразила ошибку на сервере, которая была исправлена ​​вскоре после публикации версии 3.1. На этом этапе от этого запроса больше не будет сбоев. Надеюсь, это поможет!

Ответ 2

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

[FBSession setActiveSession:session];

Ответ 3

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

Ответ 4

После многого устранения неполадок и рассмотрения всех предложений по Stackoverflow, я получил эту ошибку 400 (error.code = 5). Решение в моем случае состояло в том, чтобы убедиться, что параметры (aka 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)

Моя активная сессия (и все другие возможные виновники) проверена ОК.

Ответ 5

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

Но это может помочь людям по-прежнему получать ошибку 400.

Оригинальная проблема была решена Facebook сразу после выхода 3.1 SDK.

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

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

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

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

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

Ответ 6

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

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