Error al usar [FBSession openActiveSessionWithPublishPermissions: ..]

Estoy actualizando una aplicación para usar el último SDK de Facebook a fin de obtener acceso al soporte nativo de iOS6 en Facebook. Actualmente utiliza una versión bastante antigua del SDK de Facebook.

La aplicación requiere el permiso "publish_actions" de Facebook para lo único que hace con Facebook.

Al principio pensé que podría usar[FBSession openActiveSessionWithPublishPermissions: ...] pero esto falla en iOS6 cuando el usuario tiene Facebook configurado en la configuración de iOS6. Falla debido a este requisito,de los documentos de Facebook:

Tenga en cuenta que, para usar la autenticación nativa de iOS 6, las aplicaciones deben cambiar la forma en que solicitan permisos a los usuarios; las aplicaciones deben separar sus solicitudes de permisos de lectura y escritura. El SDK de Facebook para iOS es compatible con estas características y ayuda a los desarrolladores a usarlas para crear aplicaciones que funcionan en múltiples versiones de iOS y configuraciones de dispositivos.

Este es un gran PITA, IMO. Preferiríamos pedirle permiso al usuario una vez y terminar con él, pero el ideal "nuevo" de Apple / Facebook es solicitar permisos específicos en contexto cuando se necesitan pero aún no se han otorgado.

El plan en este momento es mantener nuestro antiguo comportamiento para los usuarios de iOS5 y los usuarios de iOS6 que no tienen Facebook configurado en Configuración. Y cumpla con el nuevo doble aviso para los usuarios de iOS6 que utilizan el acceso nativo.

La pregunta es, ¿cuál es la mejor manera de hacer esto? ¿Qué debo hacer para detectar si el SDK de Facebook seleccionará el inicio de sesión nativo de iOS6 frente a los mecanismos de respaldo? ¿Estoy pasando por alto algo obvio?

EDITAR:

gerraldWilliam me puso en el camino correcto. Su solución casi funcionaría, excepto que ACAccountTypeIdentifierFacebook no está disponible en iOS5. Además, si el usuario bloquea el acceso de FB en la Configuración a la aplicación, entonces la llamada accountsWithAccountType devolverá una matriz vacía.

Es posible solucionar el primer problema solicitando el identificador de coincidencia de tipo de cuenta "com.apple.facebook"; esto devolverá cero en iOS5 y un objeto de tipo de cuenta real en iOS6.

Pero el segundo problema no tiene solución. Mi nuevo plan es abrir siempre la sesión inicial en iOS6 con permisos de solo lectura y solicitar más tarde, en contexto, el permiso de publicación si es necesario. En iOS5, seguiré abriendo la sesión inicial especificando el permiso de publish_actions deseado. Aquí está el 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: ...] 
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta