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

您可以在多個 iOS 應用程式中使用同一個 Facebook 應用程式編號;舉例來說,應用程式的免費及付費版本。

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

注意:尾碼僅適用英文字母。

SDK 壓縮檔案中包含「FacebookSDKStrings.bundle」,其內容含有 SDK 資源所需的本地化字串。將套件加入您的應用程式,並按照 Apple 文件內容的描述啟用基礎國際化

您可以在 iOS下載區 中下載舊版的 SDK。

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

請務必在每個檔案的最上方(即您嘗試使用 Facebook SDK 類別之處)設有正確的匯入陳述式:例如:

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

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

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

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

[FBSDKLoginButton class];

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

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

「FBSDKRequestConnection」使用的「NSURLConnection」必須有活躍的 RunLoop。如果您是在主執行緒之外使用,則必須自行管理。

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

「.plist」檔案經常發生配置錯誤。請確保「.plist」中包含「FacebookAppID」及「FacebookDisplayName」這兩列,以及「fb{app-id}」網址類型項目。

如果您提出 Graph API 要求時得到未預期的結果,請在提出任何要求前加入此程式碼以啟用除錯模式:

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

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

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

您可以在這裡 閱讀關於 Graph API 除錯模式的更多資訊。

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

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

「分享」對話框會在用戶動作發生時通知委派的「sharer:didCompleteWithResults:」和「sharerDidCancel:」方法。

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

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

[FBSDKSettings enableLoggingBehavior:FBSDKLoggingBehaviorNetworkRequests];

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

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