Erreur lors de l'utilisation de [FBSession openActiveSessionWithPublishPermissions: ..]

Je suis à jour une application pour utiliser les dernières Facebook SDK afin d'accéder à l'iOS6 native Facebook de soutien. Il utilise actuellement une très ancienne version de Facebook SDK.

L'application nécessite le "publish_actions" la permission de Facebook pour la seule chose qu'il fait avec Facebook.

J'ai d'abord pensé que je pourrais utiliser [FBSession openActiveSessionWithPublishPermissions: ...] mais cela échoue sur iOS6 lorsque l'utilisateur a Facebook configuré dans iOS6 paramètres. Il échoue en raison de cette exigence, de la Facebook docs:

Note, utiliser iOS 6 native auth, des applications ont besoin de changer leur façon de demande
les autorisations des utilisateurs - les applications doivent séparer leurs demandes de lecture
et des autorisations d'écriture. Le Facebook SDK pour iOS prend en charge ces
caractéristiques et permet aux développeurs de les utiliser pour créer des applications qui fonctionnent sur
plusieurs versions iOS et configuration de l'appareil.

C'est un gros pain PITA, de l'OMI. Notre préférence serait de demander à l'utilisateur une fois l'autorisation et être fait avec elle, mais la "nouvelle" idéal par Apple/Facebook est à demander des autorisations spécifiques en contexte quand ils sont nécessaires, mais ne bénéficient pas encore de.

Le plan du moment, c'est de conserver notre ancien comportement pour iOS5 utilisateurs et iOS6 les utilisateurs qui n'ont pas Facebook configuré dans les Paramètres. Et de se conformer à la nouvelle double-invite pour iOS6, les utilisateurs qui sont à l'aide de code d'accès.

La question est de savoir quelle est la meilleure façon de le faire? Comment puis-je détecter si le Facebook SDK sélectionnez l'iOS6 natif de connexion vs les mécanismes de secours? Suis-je surplombant quelque chose d'évident?

EDIT:

gerraldWilliam me mettre sur la bonne voie. Sa solution serait presque, sauf que ACAccountTypeIdentifierFacebook n'est pas disponible dans iOS5. Aussi que si l'utilisateur blocs FB accès dans les Paramètres de l'application puis la accountsWithAccountType appel renvoie un tableau vide.

Il est possible de contourner le problème en demandant le type de compte de contrepartie de l'identificateur de "com.apple.facebook" - ce sera le retour de néant sur iOS5, et un compte réel type d'objet sur iOS6.

Mais le deuxième problème est insoluble. Mon nouveau plan est de toujours ouvrir la session initiale sur iOS6 avec des autorisations en lecture seule et invite plus tard, dans le contexte, pour publier la permission si nécessaire. Sur iOS5, je vais encore ouvert la session initiale spécifier l'publish_actions autorisation. Voici le code:

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

} else  {
    //iOS5, call [FBSession openActiveSessionWithPublishPermissions: ...] 
}
InformationsquelleAutor TomSwift | 2012-10-10