iOS 6 Facebook Логин не обновляет токен доступа

Ничто из того, что я читаю (много статей для разработчиков FB и ТАК вопрос), не помогает, поэтому я решил опубликовать здесь. Я пытаюсь заставить все это работать с iOS 6 и Facebook SDK 3.1.1.

У меня довольно простые настройки: мое приложение для iOS проходит проверку подлинности через Facebook, я передаю access_token на свой сервер, и теперь пользователь входит в мое приложение. Единственное, что они могут сделать, связанные с Facebook, это опубликовать что-то на своей стене. Я использую устаревшее диалоговое окно, чтобы пользователь мог добавлять свои собственные комментарии.

Все отлично работает на новой установке в течение первого часа или около того. Если пользователь вошел в систему через приложение «Настройки iOS», ему будет предложено быстрое окно подтверждения iOS, я получу его токен, отправлю его на свой сервер, и у нас все хорошо.

Если я вставлю полученный токен в отладчик доступа Facebook, он показывает, что срок его действия истечет через час.

Если я подожду этот час и вернусь к приложению после этого, все, что я пытаюсь сделать, дает мне эту ошибку:

{"error_code":190,"
  error_msg":"Error validating access token: 
              Session has expired at unix time 1351497600. 
              The current unix time is 1351525180. }
Что мне нужно сделать, чтобы все работало?я прочел что в SDK 3.1.1 FBSession позаботится об этом, но это не так. Срок действия моего маркера доступа истекает, и как только он появится, iOS / FB SDK не вернет мне обновленный токен.Даже выход из системы (который вызывает[FBSession.activeSession closeAndClearTokenInformation]) не исправить это. Единственное, что мне удалось сделать, - это «Сбросить содержимое и настройки» в настройках симулятора iOS, повторно ввести свои учетные данные FB в Settings.app и пересобрать мое приложение. Только тогда я могу получить еще один токен, срок действия которого истекает через час.

Случайные заметки:

Когда мое приложение возобновляет работу, я звоню[FBSession.activeSession handleDidBecomeActive] а также[self.facebook extendAccessTokenIfNeeded]Согласно вопросу SO, связанному с вышеупомянутым, SDK должен автоматически вызыватьFBSession#renewSystemAuthorization, Я поместил туда NSLog, и я никогда не видел, чтобы этот метод вызывался.

ОБНОВЛЕНИЕ № 1:

Я упоминал, что прочитал, что SDK будет обрабатывать недействительные / просроченные токены. Кажется, что это должно происходить в FBRequestConnection # completeWithResults: orError :. Смотрите встроенные комментарии для заметок о пути к коду.

- (void)completeWithResults:(NSArray *)results
                orError:(NSError *)error
{
    int count = [self.requests count];
    for (int i = 0; i < count; i++) {
        FBRequestMetadata *metadata = [self.requests objectAtIndex:i];
        id result = error ? nil : [results objectAtIndex:i];
        NSError *itemError = error ? error : [self errorFromResult:result];

        id body = nil;
        if (!itemError && [result isKindOfClass:[NSDictionary class]]) {
            NSDictionary *resultDictionary = (NSDictionary *)result;
            body = [FBGraphObject graphObjectWrappingDictionary:[resultDictionary objectForKey:@"body"]];
        }

        ...

        // *******************************************
        // My code actually falls into this block, proving that I do in fact have an invalid session
        // *******************************************
        if ([self isInvalidSessionError:itemError
                        resultIndex:error == itemError ? i : 0]) {
            [metadata.request.session closeAndClearTokenInformation:itemError];

            // *******************************************
            // Unfortunately metadata.request.session is nil, so this condition is never
            // run, so renewySystemAuthorization is never called
            // *******************************************
            if (metadata.request.session.loginType == FBSessionLoginTypeSystemAccount){
                [FBSession renewSystemAuthorization];
        }
    }

    ...
}

Ответы на вопрос(1)

Ваш ответ на вопрос