Facebook-SDK für iOS – FAQ und Problembehebung

Du kannst eine Facebook-App-ID für mehrere iOS-Apps verwenden (z. B. für die kostenlose und die zahlungspflichtige Version deiner App).

Definiere einen Suffixparameter für das URL-Schema (FacebookUrlSchemeSuffix) in der .plist-Datei deiner App.

 Hinweis: Das Suffix funktioniert nur mit Buchstaben.

Das SDK-Zip-Paket enthält ein „FacebookSDKStrings.bundle“ mit lokalisierten Strings für SDK-Ressourcen. Füge das Bundle deiner App hinzu und aktiviere die Basis-Internationalisierung wie in der Apple-Dokumentation beschrieben.

Alte Versionen des SDK kannst du im iOS-Downloadbereich herunterladen.

Da der native „Teilen“-Dialog Teil der iOS-App von Facebook ist, kann er nicht in einem Simulator ausgeführt werden. Verwende ein physisches Gerät, um den nativen „Teilen“-Dialog zu testen. Wir suchen derzeit nach Möglichkeiten, den nativen „Teilen“-Dialog im Simulator zu testen.

Stelle sicher, dass die Datei, in der du die Facebook-SDK-Klassen verwenden möchtest, oben die richtigen Importanweisungen enthält. Beispiel:

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

Bei der Verwendung von Frameworks in Objective-C werden Klassen, die Kategorien verwenden, um vorhandene Klassen zu erweitern, nicht automatisch geladen.

Wenn du versuchst, eine Methode aufzurufen, die in diesen Klassen erweitert wurde, wird der Fehler „unrecognized selector sent to instance“ angezeigt. Auch aus dem XCode Interface Builder verwendete Klassen werden nicht automatisch geladen. Beispiel: Du fügst einen „FBSDKLoginButton“ zu deiner Oberfläche hinzu, indem du eine Ansicht in deine .xib-Datei zeichnest und sie dann über die Interface Builder-UI als „FBSDKLoginButton“ festlegst. Auch hier gilt: Wenn du versuchst, entsprechende Methoden aufzurufen, wird der Fehler „unrecognized selector sent to instance“ angezeigt. Es gibt zwei Optionen, um dieses Problem zu beheben.

Du kannst die Klassen manuell in „application:didFinishLaunchingWithOptions:“ deines App Delegate laden, indem du Folgendes aufrufst:

[FBSDKLoginButton class];

Alternativ kannst du das „-ObjC“-Linker-Flag hinzufügen. Durch dieses Flag lädt der Linker jede Objektdatei im SDK, die eine Objective-C-Klasse oder -Kategorie definiert. Mithilfe dieses Ansatzes sind alle Klassen sofort funktionsbereit, jedoch erhöht sich hierdurch die Größe der ausführbaren Datei (aufgrund des zusätzlichen Objektcodes, der in die App geladen wird).

Um das „-ObjC“-Flag hinzuzufügen, klicke auf das Zielprojekt und wähle den Tab „Build Settings“ (Build-Einstellungen) aus. Klicke dort unter „Linking“ (Verlinken) doppelt auf „Other Linker Flags“ (Andere Linker-Flags), um „-ObjC“ hinzuzufügen.

FBSDKRequestConnection verwendet NSURLConnection, wofür ein aktiver RunLoop erforderlich ist. Wenn du dies außerhalb des Haupt-Threads verwendest, musst du dies selbst verwalten.

Alternativ kannst du die Eigenschaft delegateQueue für die FBSDKRequestConnection festlegen.

In der .plist treten häufig Konfigurationsfehler auf. Stelle sicher, dass die .plist Zeilen für FacebookAppID und FacebookDisplayName sowie einen URL-Typ-Eintrag für fb{app-id} enthält.

Wenn du beim Senden von Graph API-Anfragen unerwartete Ergebnisse erhältst, aktiviere den Debug-Modus. Füge dazu den folgenden Code vor allen Anfragen hinzu:

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

Verwende FBSDKLoggingBehaviorGraphAPIDebugWarning, wenn du Nachrichten auf Informationsebene unterdrücken und nur Warnungen anzeigen möchtest.

Durch Aktivierung dieses Protokollierungsverhaltens wird der debug-Parameter zu allen Graph API-Anfragen hinzugefügt und alle auftretenden Probleme werden in der Konsole ausgegeben.

Weitere Informationen zum Graph API-Debug-Modus findest du hier.

Das SDK meldet einen Abbruch, wenn der Nutzer auf einen „Abbrechen“-Button in den Login-Dialogen tippt oder manuell zu deiner App zurückwechselt (als impliziter Abbruch bezeichnet). Du solltest sicherstellen, dass du keinen Anmeldevorgang als Teil des Lebenszyklus deines App Delegate initiierst (wie z. B. das Starten einer Anmeldung innerhalb von application:openURL:sourceApplication:annotation:), da dies einen impliziten Abbruch imitiert. Ist dies jedoch erforderlich, sende die Anmeldeinitiierung später an die Hauptwarteschlange, sodass der Lebenszyklus des App Delegate zuvor abgeschlossen wird.

  • Das Facebook-SDK enthält Code für den Zugriff auf die Advertising Identifier von Apple (IDFA), dieser Code wird aber nur in ganz bestimmten Situationen ausgeführt.
  • Das Facebook-SDK für iOS greift nur in folgenden Szenarien auf IDFAs zu: 1) Wenn deine App innerhalb der App Werbeanzeigen über das Facebook Audience Network anzeigt oder 2) wenn deine App App-Installationen oder andere mobile App Events protokolliert, um diese Events deinen Werbekampagnen zuzuordnen.
  • Wenn du keine App Events (über die FBSDKAppEvents-Klasse) protokollierst, greift das Facebook-SDK nicht auf die IDFAs zu. Darüber hinaus muss für das Facebook-SDK AdSupport.framework nicht enthalten sein.
  • Wenn du App Events ohne Erfassung der IDFA protokollieren möchtest, kannst du die IDFA-Erfassung in den erweiterten Einstellungen deines App-Dashboards deaktivieren.

Der Dialog „Teilen“ benachrichtigt die Methoden „sharer:didCompleteWithResults:“ und „sharerDidCancel:“ seines Delegate bei einer Nutzerhandlung.

– „sharer:didCompleteWithResults:“, wenn der Nutzer erfolgreich Inhalte teilt. Des Weiteren gibt es auch einen „postId“-Schlüssel im „results“-Wörterbuch, wenn der Nutzer der App publish_actions-Berechtigungen erteilt hat. Wenn dieser Nutzer sich nicht mit Facebook Login angemeldet hat, wird diese Methode auch aufgerufen, wenn er auf „Abbrechen“ klickt. – „sharerDidCancel:“, wenn jemand auf den X-Button eines „Teilen“-Dialogs klickt oder wenn ein über Facebook Login angemeldeter Nutzer auf „Abbrechen“ klickt.

Wenn du beim Senden von Anfragen unerwartete Ergebnisse erhältst, aktiviere das Debugging für „FBSDKGraphRequests“. Füge diesen Code vor jeglichen Anfragen hinzu:

[FBSDKSettings enableLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests];

So kannst du Probleme debuggen, indem du Anfragen und Antworten von den Servern direkt überwachst.

Ziehe auch in Betracht, andere „FBSDKLoggingBehavior*“-Konstanten zu überprüfen, die in „FBSDKSettings.h“ für andere protokollierbare Elemente definiert sind.