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

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

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

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

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

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

{"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 Simulator повторно введите мои учетные данные 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)

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