Facebook iOS SDK 常見問題和疑難排解

您可以在數個 iOS 版應用程式間(例如,您的免費版和付費版應用程式),共用單一 Facebook 應用程式編號。

定義網址配置尾碼參數「FacebookUrlSchemeSuffix」(在應用程式的「.plist」檔案中)。

注意:尾碼只能包含字母字元。

SDK zip 檔案含有一組「FacebookSDKStrings.bundle」,內有 SDK 資源的本地化字串,將此套件組合納入您的應用程式,並依照 Apple 文件的說明(https://developer.apple.com/library/ios/documentation/MacOSX/Conceptual/BPInternational/InternationalizingYourUserInterface/InternationalizingYourUserInterface.html#//apple_ref/doc/uid/10000171i-CH3-SW4),[啟用 Base Internationalization]。

您可以前往 [iOS 下載區域](/docs/android/downloads)下載舊版 SDK。

由於原生「分享」對話方塊屬於 Facebook iOS 應用程式的一部分,因此無法在模擬器上執行。請使用實體裝置測試原生「分享」對話方塊。我們正嘗試讓您在模擬器測試原生「分享」對話方塊。

請務必在每個檔案的上方(即您嘗試使用 Facebook SDK 類別之處),新增適當的 import 陳述式。例如:

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

在 Objective-C 中使用架構時,使用類型延伸現有類別的類別無法自動載入。

嘗試呼叫延伸到這些類別的方法時,您會遇到「unrecognized selector sent to instance」錯誤。從 Xcode 介面產生器使用的類別亦無法自動載入,例如,當您要新增「FBSDKLoginButton」到介面時,是利用在 .xib 檔案中繪製檢視效果,然後再從介面產生器 UI 設定為「FBSDKLoginButton」的方式,便會遇到此情況。再次提醒,當您嘗試在這些類別呼叫方法時,將會遇到「unrecognized selector sent to instance」錯誤。您有兩個方法可以解決此問題。

在應用程式委派的「application:didFinishLaunchingWithOptions」中手動載入類別,方法是呼叫:

[FBSDKLoginButton class];

或者,新增「-ObjC」連結器旗幟。此旗幟會指示連結器載入 SDK 中的每個物件檔案,此處的 SDK 是用於定義 Objective-C 類別或類型。此方式將讓所有類別立即可用,但也會增加執行檔的大小(因為應用程式會載入額外的物件程式碼)。

若要新增「-ObjC」旗幟,請點擊專案目標,然後選擇「建立設定」頁籤。在「連結」下方,雙擊「其他連結器旗幟」新增「-ObjC」。

「FBSDKRequestConnection」使用「NSURLConnection」,這需要有效的 [RunLoop](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSRunLoop_Class/Reference/Reference.html)。如果您是在主執行緒之外使用,則必須自行管理。

您也可以在「FBSDKRequestConnection」中設定「delegateQueue」屬性。

「.plist」檔案經常發生配置錯誤。請確定「.plist」含有「FacebookAppID」和「FacebookDisplayName」資料列,以及「fb{app-id}」的網址類型項目。

如果您提出 Graph API 要求時得到未預期的結果,請在所有要求之前加入以下程式碼,以啟用偵錯模式:

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

如果您要抑制資訊層級的訊息,並僅保留警告訊息,請使用「FBSDKLoggingBehaviorGraphAPIDebugWarning」。

若啟用此記錄行為,會將「debug」參數新增到所有 Graph API 要求,並在主控台中輸出所有問題。

您可以在 [這裡](/docs/graph-api/using-graph-api/v2.3#debugging)閱讀關於 Graph API 偵錯模式的更多資訊。

如果用戶明確點按「登入」對話方塊中的「取消」按鈕,或是手動將應用程式切換回您的應用程式(稱為隱式取消),SDK 將回報為一次取消。您應避免在應用程式委派的生命週期中(例如在「application:openURL:sourceApplication:annotation:」中啟動登入)初始化登入流程,此動作與隱式取消行為相像。如果一定要執行,請稍後再將登入初始化分派到主要佇列,以便先完成應用程式委派的生命週期。

  • Facebook SDK 內含可存取 Apple 廣告識別碼(IDFA)的程式碼,但該程式碼只會在特定情況中執行。
  • Facebook iOS SDK 僅會在下列情況中存取 IDFA:1)您的應用程式是透過 Facebook 的 [Audience Network(/products/audience-network/)在應用程式中投放廣告;或者 2)您的應用程式會記錄應用程式安裝次數或其他行動應用程式事件,並將這些事件歸因至您的廣告行銷活動。
  • 如果您並未使用 FBSDKAppEvents 類別記錄應用程式事件,則 Facebook SDK 將不會存取 IDFA。此外,Facebook SDK 也不會要求您將 AdSupport.framework 納入。
  • 如果您想要在不收集 IDFA 的情況下追蹤應用程式事件,可以在進階設定區塊的應用程式主控板中停用 IDFA 收集功能。

「分享」對話方塊會在用戶動作後,通知委派「sharer:didCompleteWithResults:」和「sharerDidCancel:」方法。

  • 用戶成功分享時會回呼「sharer:didCompleteWithResults:」。此外,如果用戶授與應用程式「publish_actions」權限,「results」字典中會有一個「postId」密鑰。如果該用戶未透過「Facebook 登入」來登入,則用戶點擊「Cancel」時,也會呼叫此方法。
  • 當用戶點擊「分享」對話方塊的「X」按鈕,或用戶已透過「Facebook 登入」登入並點擊「Cancel」,都會回呼「sharerDidCancel:」。

如果您提出要求時得到未預期的結果,請啟用「FBSDKGraphRequests」偵錯。在任何要求前面新增此程式碼:

[FBSDKSettings enableLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests];

您可以直接從伺服器查看要求和回應,並偵錯任何問題。

請考慮檢查在「FBSDKSettings.h」中定義的其他「FBSDKLoggingBehavior*」常數,以查看其他您可以記錄的項目。