Erro ao usar o [FBSession openActiveSessionWithPublishPermissions: ..]

Estou atualizando um aplicativo para usar o SDK mais recente do Facebook para obter acesso ao suporte nativo do iOS6 no Facebook. Atualmente, ele usa uma versão bastante antiga do Facebook SDK.

O aplicativo requer a permissão "publish_actions" do Facebook para a única coisa que faz com o Facebook.

Eu inicialmente pensei que eu poderia usar[FBSession openActiveSessionWithPublishPermissions: ...] mas isso falha no iOS6 quando o usuário tem o Facebook configurado nas configurações do iOS6. Ele falha por causa desse requisitodos documentos do Facebook:

Observe que, para usar a autenticação nativa do iOS 6, os aplicativos precisam mudar a maneira como solicitam as permissões dos usuários. Os aplicativos precisam separar as solicitações de permissão de leitura e gravação. O SDK do Facebook para iOS oferece suporte a esses recursos e ajuda os desenvolvedores a usá-los para criar aplicativos que funcionem em várias versões do iOS e configurações de dispositivos.

Este é um grande PITA, IMO. Nossa preferência seria solicitar uma permissão ao usuário e acabar com ele, mas o "novo" ideal por Apple / Facebook é solicitar permissões específicas no contexto quando elas forem necessárias, mas ainda não concedidas.

O plano no momento é manter nosso antigo comportamento para usuários do iOS5 e iOS6 que não tenham o Facebook configurado em Configurações. E conforme o novo prompt duplo para usuários do iOS6 que estão usando acesso nativo.

A questão é: qual é a melhor maneira de fazer isso? Como devo saber se o SDK do Facebook selecionará o login nativo do iOS6 versus os mecanismos de fallback? Eu estou negligenciando algo óbvio?

EDITAR:

gerraldWilliam me colocou no caminho certo. Sua solução quase funcionaria, exceto que o ACAccountTypeIdentifierFacebook não está disponível no iOS5. Além disso, se o usuário bloquear o acesso FB em Configurações ao aplicativo, a chamada accountsWithAccountType retornará uma matriz vazia.

É possível contornar o primeiro problema pedindo o identificador de correspondência do tipo de conta "com.apple.facebook" - isso retornará nil no iOS5 e um objeto de tipo de conta real no iOS6.

Mas o segundo problema é insolúvel. Meu novo plano é sempre abrir a sessão inicial no iOS6 com permissões somente leitura e solicitar mais tarde, no contexto, a permissão de publicação, se necessário. No iOS5, ainda abro a sessão inicial, especificando a permissão publish_actions desejada. Aqui está o código:

ACAccountStore* as = [[ACAccountStore new] autorelease]; 
ACAccountType* at = [as accountTypeWithAccountTypeIdentifier: @"com.apple.facebook"]; 
if ( at != nil ) {
    // iOS6+, call  [FBSession openActiveSessionWithReadPermissions: ...]

} else  {
    // iOS5, call [FBSession openActiveSessionWithPublishPermissions: ...] 
}

questionAnswers(4)

yourAnswerToTheQuestion