FAQ e risoluzione dei problemi per l'SDK di Facebook per iOS

Puoi usare l'ID app Facebook in più app per iOS, ad esempio le versione gratuita e quella a pagamento della tua app.

Definisci un parametro per il suffisso dello schema URL, "FacebookUrlSchemeSuffix" nel file ".plist" della tua app.

Nota: il suffisso funziona solo con caratteri alfabetici.

Lo zip dell'SDK comprende un "FacebookSDKStrings.bundle" contenente le stringhe localizzate per le risorse dell'SDK. Includi il bundle nella tua app e abilita Base Internationalization (Internazionalizzazione di base) come descritto nella documentazione Apple.

Dal momento che la finestra di condivisione nativa fa parte dell'app Facebook per iOS, non può essere eseguita su un simulatore. Usa un dispositivo fisico per testare la finestra di condivisione nativa. Stiamo cercando di rendere possibile il test della finestra di condivisione nativa sul simulatore.

Assicurati che le istruzioni di importazione siano corrette e presenti nella parte superiore di ogni file quando provi a usare le classi dell'SDK di Facebook. Ad esempio:

#import <FBSDKCoreKit/FBSDKCoreKit.h>
#import <FBSDKShareKit/FBSDKShareKit.h>
#import <FBSDKLoginKit/FBSDKLoginKit.h>

Quando usi i framework in Objective-C, le classi che usano le categorie per estendere le classi esistenti non vengono caricate automaticamente.

Quando provi a chiamare un metodo esteso in queste classi, riceverai un errore "unrecognized selector sent to instance". Anche le classi che vengono usate dal configuratore di interfaccia Xcode non vengono caricate automaticamente, ad esempio quando aggiungi "FBSDKLoginButton" all'interfaccia rappresentando una vista nel file .xib e impostandola come "FBSDKLoginButton" dall'interfaccia utente del configuratore di interfaccia. Pertanto, quando provi a chiamare i metodi, riceverai un errore "unrecognized selector sent to instance". Questo problema può essere risolto in due modi.

Puoi caricare la classe manualmente in "application:didFinishLaunchingWithOptions:" dell'app delegate chiamando:

[FBSDKLoginButton class];

In alternativa, puoi aggiungere il flag del linker "-ObjC". Il flag comunica al linker di caricare nell'SDK ogni file di oggetto che definisce una classe o una categoria Objective-C. Questo approccio consentirà il funzionamento immediato di tutte le classi ma aumenterà le dimensioni del file eseguibile (a causa del codice oggetto aggiuntivo caricato nell'app).

Per aggiungere il flag "-ObjC", clicca sul target del progetto e seleziona la tab "Build Settings" (Impostazioni della build). Qui, in "Linking" (Link), clicca due volte su "Other Linker Flags" (Altri flag del linker) per aggiungere "-ObjC".

"FBSDKRequestConnection" usa "NSURLConnection", che richiede un RunLoop attivo. Se lo stai usando al di fuori della conversazione principale, devi gestirlo autonomamente.

In alternativa, puoi impostare la proprietà "delegateQueue" in "FBSDKRequestConnection".

È normale che siano presenti errori di configurazione nel file ".plist". Assicurati che il file ".plist" includa le righe di "FacebookAppID" e "FacebookDisplayName", nonché la voce URL Type per "fb{app-id}".

Se ottieni risultati imprevisti quando esegui richieste API Graph, abilita la modalità debug aggiungendo questo codice prima delle richieste:

[FBSettings setLoggingBehavior:
    [NSSet setWithObject:FBSDKLoggingBehaviorGraphAPIDebugInfo]];

Usa "FBSDKLoggingBehaviorGraphAPIDebugWarning" se desideri eliminare i messaggi informativi e mantenere solo gli avvisi.

L'abilitazione di questo comportamento di registrazione aggiungerà il parametro "debug" a tutte le richieste API Graph e indicherà i problemi che si verificano nella console.

Puoi scoprire di più sulla modalità debug dell'API Graph qui.

L'SDK segnalerà un annullamento se l'utente tocca chiaramente un pulsante Annulla nelle finestre di dialogo Accedi oppure se torna manualmente alla tua app (processo noto come annullamento implicito). Assicurati di non avviare un flusso di accesso nell'ambito del ciclo di vita dell'app delegate (ad esempio, l'avvio di un accesso all'interno di "application:openURL:sourceApplication:annotation:"), dal momento che risulterebbe simile a un annullamento implicito. Se necessario, sposta l'avvio dell'accesso dopo la coda principale: in questo modo il ciclo di vita dell'app delegate verrà completato per primo.

  • L'SDK di Facebook comprende il codice per l'accesso all'ID Apple per gli inserzionisti (IDFA), tuttavia questo codice viene eseguito solo in determinati casi.
  • L'SDK di Facebook per iOS accede agli IDFA solo nelle situazioni seguenti: 1) se l'app presenta inserzioni al suo interno mediante Audience Network di Facebook o 2) se l'app registra le installazioni o altre azioni nelle app mobili per attribuirle alle campagne pubblicitarie.
  • Se non stai registrando le azioni nelle app (tramite la classe FBSDKAppEvents), l'SDK di Facebook non ha l'accesso agli IDFA. Inoltre, l'SDK di Facebook non richiede la presenza di AdSupport.framework.
  • Per monitorare le azioni nelle app senza raccogliere gli IDFA, disattiva tale raccolta dalla Dashboard gestione app nella sezione Avanzate delle impostazioni.

La finestra di condivisione invia una notifica ai metodi "sharer:didCompleteWithResults:" e "sharerDidCancel:" del proprio delegate in caso di azioni degli utenti.

  • "sharer:didCompleteWithResults:" quando l'utente effettua correttamente una condivisione. Inoltre ci sarà una chiave "postId" nel dizionario "results" se l'utente ha fornito le autorizzazioni "publish_actions" all'app. Se l'utente non ha effettuato l'accesso con Facebook Login, questo metodo verrà chiamato anche in caso di clic su "Annulla".
  • "sharerDidCancel": quando qualcuno clicca sul pulsante "X" della finestra di condivisione o se ha effettuato l'accesso con Facebook Login e ha cliccato su "Annulla".

Se ottieni risultati imprevisti quando esegui richieste, disattiva il debug per "FBSDKGraphRequests". Aggiungi questo codice prima di ogni richiesta:

[FBSDKSettings enableLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests];

Potrai eseguire il debug di ogni problema visualizzando direttamente le richieste e le risposte dei server.

Prendi in considerazione l'idea di osservare le altre costanti "FBSDKLoggingBehavior*" definite in "FBSDKSettings.h" per gli altri elementi che puoi registrare.