Questions/réponses et dépannage pour le SDK Facebook pour iOS

Vous pouvez utiliser un ID d’app Facebook sur plusieurs apps iOS, par exemple, entre une version gratuite et une version payante de votre app.

Définissez un paramètre de suffixe du modèle d’URL, « FacebookUrlSchemeSuffix », dans le fichier « .plist » de votre app.

Remarque : le suffixe fonctionne uniquement avec des caractères alphabétiques.

Le fichier zip du SDK inclut un objet « FacebookSDKStrings.bundle » contenant les chaînes traduites pour les ressources SDK. Incluez le paquet dans votre app et [activez Base Internationalization] (https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/InternationalizingYourUserInterface/InternationalizingYourUserInterface.html#//apple_ref/doc/uid/10000171i-CH3-SW4) comme décrit dans la documentation Apple.

Vous pouvez télécharger d’anciennes versions du SDK depuis la zone des téléchargements iOS.

Étant donné que la boîte de dialogue Partager native fait partie de l’app iOS de Facebook, elle ne peut pas être exécutée sur un simulateur. Pour la tester, utilisez un appareil physique. Nous étudions actuellement comment tester la boîte de dialogue Partager native sur le simulateur.

Assurez-vous que les déclarations d’importation appropriées se trouvent en haut de chaque fichier lorsque vous essayez d’utiliser les classes SDK Facebook. Par exemple :

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

Si vous utilisez des structures dans le langage Objective-C, les classes qui utilisent des catégories pour étendre les classes existantes ne sont pas automatiquement chargées.

Si vous essayez d’appeler une méthode qui a été étendue dans ces classes, vous obtiendrez l’erreur « unrecognized selector sent to instance ». Les classes qui sont utilisées à partir de l’outil Interface Builder de Xcode ne sont pas non plus chargées automatiquement, par exemple lorsque vous ajoutez un objet « FBSDKLoginButton » à votre interface en dessinant une vue dans votre fichier .xib, puis en la définissant en tant qu’objet « FBSDKLoginButton » à partir de l’interface utilisateur d’Interface Builder. Donc une fois de plus, si vous essayez d’appeler des méthodes sur ces classes, vous obtiendrez l’erreur « unrecognized selector sent to instance ». Pour résoudre ce problème, vous avez deux options.

Vous pouvez charger la classe manuellement dans la propriété « application:didFinishLaunchingWithOptions: » de votre AppDelegate, en appelant :

[FBSDKLoginButton class];

L’autre option consiste à ajouter l’indicateur de linker « -ObjC ». Celui-ci indique au linker de charger dans le SDK chaque fichier d’objet définissant la classe ou la catégorie Objective-C. Cette approche permet à toutes nos classes de fonctionner dès le début, mais augmente la taille de vos exécutables (compte tenu du code d’objet supplémentaire chargé dans l’application).

Pour ajouter l’indicateur « -ObjC », cliquez sur la cible du projet et sélectionnez l’onglet Build Settings. Sous Linking, double-cliquez sur Other Linker Flags pour ajouter « -ObjC ».

« FBSDKRequestConnection » utilise « NSURLConnection » qui nécessite une boucle d’évènements [RunLoop] active (https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSRunLoop_Class/Reference/Reference.html). Si vous l’utilisez en dehors du fil principal, vous devrez vous-même vous en occuper.

Vous pouvez autrement définir la propriété « delegateQueue » sur « FBSDKRequestConnection ».

Il n’est pas rare d’avoir des erreurs de configuration dans le fichier « .plist ». Assurez-vous que le fichier « .plist » inclut des lignes pour « FacebookAppID » et « FacebookDisplayName », ainsi qu’une entrée de type URL pour « fb{app-id} ».

Si vous obtenez des résultats inattendus lorsque vous effectuez des demandes de l’API Graph, activez le mode de débogage en ajoutant le code suivant avant toute demande :

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

Utilisez « FBSDKLoggingBehaviorGraphAPIDebugWarning » si vous souhaitez supprimer les messages informatifs et ne conserver que les avertissements.

L’activation de ce comportement de journalisation ajoutera le paramètre « debug » à toutes les demandes de l’API Graph et affichera tout problème éventuel dans la console.

Cliquez [ici] pour en savoir plus sur le mode de débogage de l’API Graph (/docs/graph-api/using-graph-api/v2.3#debugging).

Le SDK signalera une annulation si l’utilisateur appuie explicitement sur un bouton d’annulation dans les boîtes de dialogue de connexion ou s’il revient manuellement à votre application par l’application (ce qu’on appelle l’annulation implicite). Vous devez vous assurer de ne pas initier un processus de connexion dans le cadre du cycle de vie de votre AppDelegate (comme de commencer une connexion dans « application:openURL:sourceApplication:annotation: »), car cela simule une annulation implicite. Le cas échéant, reportez l’initiation de la connexion à plus tard dans la file d’attente principale pour que le cycle de vie de l’AppDelegate se termine d’abord.

  • Le SDK Facebook inclut un code d’accès à l’identifiant publicitaire Apple (IDFA), mais ce code n’est exécuté que dans certaines situations.
  • Le SDK Facebook pour iOS n’accède à l’IDFA que dans les cas suivants : 1) si votre app diffuse des publicités au sein de l’app par l’intermédiaire de l’[Audience Network] de Facebook (/products/audience-network/), ou 2) si votre app enregistre les installations de l’app ou d’autres App Events mobiles afin de les attribuer à vos campagnes publicitaires.
  • Si vous n’enregistrez pas les App Events (au moyen de la classe FBSDKAppEvents), alors le SDK Facebook n’accède pas à l’IDFA. En outre, le SDK Facebook ne requiert pas l’inclusion de AdSupport.framework.
  • Si vous souhaitez suivre les App Events sans recueillir l’IDFA, vous pouvez désactiver la collecte dans votre Espace App, dans la section des paramètres avancés.

La boîte de dialogue Partager notifie les méthodes « sharer:didCompleteWithResults: » et « sharerDidCancel: » de son AppDelegate lorsque l’utilisateur effectue une action.

  • « sharer:didCompleteWithResults: » lorsque l’utilisateur réussit un partage. Par ailleurs, il y aura également une clé « postId » dans le dictionnaire « results » si l’utilisateur a donné des autorisations « publish_actions » à l’app. Si cet utilisateur ne s’est pas connecté avec Facebook Login et s’il clique sur « Cancel », cette méthode sera également appelée.
  • « sharerDidCancel: » lorsqu’une personne clique sur le bouton « X » de la boîte de dialogue Partager ou si elle s’est connectée avec Facebook Login et clique sur « Cancel ».

Si vous obtenez des résultats inattendus lorsque vous effectuez des demandes, activez le débogage pour « FBSDKGraphRequests ». Ajoutez le code suivant avant toute demande :

[FBSDKSettings enableLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests];

Vous pourrez déboguer n’importe quel problème en affichant directement les demandes et les réponses sur les serveurs.

Pensez à consulter les autres constantes « FBSDKLoggingBehavior* » définies dans « FBSDKSettings.h » pour connaître les autres éléments que vous pourriez enregistrer dans un journal.