Sto aggiornando un'applicazione per utilizzare l'ultimo SDK di Facebook al fine di ottenere l'accesso al supporto nativo di Facebook iOS6. Attualmente utilizza una versione piuttosto vecchia dell'SDK di Facebook.Errore durante l'utilizzo di [FBSession openActiveSessionWithPublishPermissions: ..]
L'app richiede il permesso "publish_actions" da Facebook per l'unica cosa che fa con Facebook.
Inizialmente ho pensato che potrei usare [FBSession openActiveSessionWithPublishPermissions: ...]
ma questo non funziona su iOS6 quando l'utente ha configurato Facebook nelle impostazioni di iOS6. Si riesce a causa di questo requisito, from the Facebook docs:
nota, utilizzare iOS 6 autenticazione nativa, app Hai bisogno di cambiare il modo in cui essi richiesta permessi da parte degli utenti - applicazioni devono separare le loro richieste di lettura e Scrittura. L'SDK di Facebook per iOS supporta queste funzioni e aiuta gli sviluppatori a utilizzarle per creare app che funzionano su più versioni di iOS e configurazioni di dispositivi.
Questa è una grande PITA, IMO. La nostra preferenza sarebbe quella di richiedere all'utente una volta il permesso e di farlo, ma il "nuovo" ideale per Apple/Facebook è quello di richiedere autorizzazioni specifiche nel contesto quando sono necessarie ma non ancora concesse.
Il piano al momento è di mantenere il nostro vecchio comportamento per gli utenti iOS5 e iOS6 che non hanno configurato Facebook in Impostazioni. E conforme al nuovo doppio prompt per gli utenti iOS6 che utilizzano l'accesso nativo.
La domanda è, qual è il modo migliore per farlo? Come devo sapere se l'SDK di Facebook selezionerà l'accesso nativo iOS6 rispetto ai meccanismi di fallback? Sto trascurando qualcosa di ovvio?
EDIT:
gerraldWilliam mi ha messo sulla strada giusta. La sua soluzione avrebbe quasi funzionato, tranne che ACAccountTypeIdentifierFacebook non è disponibile in iOS5. Inoltre, se l'utente blocca l'accesso FB in Impostazioni all'app, la chiamata accountsWithAccountType restituirà un array vuoto.
È possibile aggirare il primo problema chiedendo l'identificatore di corrispondenza del tipo di account "com.apple.facebook" - questo restituirà nullo su iOS5 e un oggetto di tipo account reale su iOS6.
Ma il secondo problema è irrisolvibile. Il mio nuovo piano è quello di aprire sempre la sessione iniziale su iOS6 con autorizzazioni di sola lettura e prompt più avanti, nel contesto, per il permesso di pubblicazione, se necessario. Su iOS5 aprirò comunque la sessione iniziale specificando l'autorizzazione publish_actions desiderata. Ecco il codice:
ACAccountStore* as = [[ACAccountStore new] autorelease];
ACAccountType* at = [as accountTypeWithAccountTypeIdentifier: @"com.apple.facebook"];
if (at != nil) {
// iOS6+, call [FBSession openActiveSessionWithReadPermissions: ...]
} else {
// iOS5, call [FBSession openActiveSessionWithPublishPermissions: ...]
}
Questo quasi funziona. Due problemi sono 1) ACAccountTypeIdentifierFacebook non è disponibile su iOS5 e 2) accountWithAccountType restituirà un array vuoto se l'utente ha configurato FB in Impostazioni ma ha bloccato l'accesso all'app chiamante. Segnando la risposta corretta in quanto mi ha messo sulla strada della mia ultima soluzione, che inserirò nella domanda. – TomSwift
'accountsWithAccountType' restituisce una matrice vuota per me, anche se sono in iOS 6, l'integrazione di Facebook è stata configurata ed è possibile postare. – jowie
Inoltre è vuoto per me, e ottiene questo errore fastidioso com.facebook.sdk errore 2 ... Qualche consiglio? – D33pN16h7