iOS 6 Login do Facebook não está atualizando o token de acesso

Nada que eu esteja lendo (muitos artigos dev de FB e SO pergunta) está ajudando, então eu pensei em postar aqui. Estou tentando fazer tudo isso funcionar com o iOS 6 e o ​​Facebook SDK 3.1.1.

Eu tenho uma configuração bem básica: Meu aplicativo iOS autentica com o Facebook, eu passo o access_token para o meu servidor e o usuário está logado no meu aplicativo. A única outra coisa que eles podem fazer relacionada ao facebook é postar algo em sua parede. Estou usando a janela de diálogo legado para que o usuário possa adicionar seus próprios comentários.

Tudo funciona perfeitamente em uma nova instalação pela primeira hora ou mais. Se o usuário estiver logado através do aplicativo Configurações do iOS, eles receberão uma caixa de confirmação rápida do iOS, eu recebo o token, o envio para o meu servidor e estamos todos bem.

Se eu colar o token que recebo no depurador do Token de Acesso do Facebook, ele mostrará que ele expirará em uma hora.

Se eu esperar essa hora e voltar para o aplicativo depois, qualquer coisa que eu tente fazer me dá esse erro:

{"error_code":190,"
  error_msg":"Error validating access token: 
              Session has expired at unix time 1351497600. 
              The current unix time is 1351525180. }
O que preciso fazer para que as coisas funcionem?Eu li que no SDK 3.1.1 o FBSession apenas cuidará disso, mas isso não parece ser o caso. Meu token de acesso está expirando e, quando isso acontece, o SDK do iOS / FB não me restituirá um novo.Mesmo fazendo logout (que chama[FBSession.activeSession closeAndClearTokenInformation]) não resolve isso. A única coisa que consegui fazer foi "Redefinir conteúdo e configurações" nas Preferências do Simulador do iOS, insira novamente minhas credenciais do FB em Settings.app e reconstrua meu aplicativo. Só então eu posso obter outro token que irá expirar em uma hora.

Notas aleatórias:

Quando meu aplicativo é retomado, estou ligando[FBSession.activeSession handleDidBecomeActive] e[self.facebook extendAccessTokenIfNeeded]De acordo com a pergunta do SO vinculada acima, o SDK deve estar chamando automaticamenteFBSession#renewSystemAuthorization. Eu coloquei um NSLog lá, e nunca vejo esse método sendo chamado.

ATUALIZAÇÃO 1:

Mencionei que li que o SDK lidará com tokens inválidos / expirados. Parece que isso deve acontecer em FBRequestConnection # completeWithResults: orError :. Veja comentários embutidos para notas sobre o caminho do código.

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

    ...
}