登入審查

如果應用程式要求 public_profileemail 以外的權限,就必須先經過 Facebook 的審查才能發行。進一步了解審查程序,以及通過審查的所需條件。

登入審查指南

自訂登入按鈕

我們建議您設計自訂版面配置和行為,以此取代使用 Facebook 品牌登入按鈕(如 iOS 版 Facebook 登入:快速入門所述)。以下代碼範例使用 Login Manager 類別(LoginManager)和自訂按鈕(UIButton)來觸發登入對話框。您可以使用任何其他自訂用戶介面或事件處理代碼來觸發登入對話框。

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        // Add a custom login button to your app
        let loginButton = UIButton(type: .custom)
        loginButton.backgroundColor = .darkGray
        loginButton.frame = CGRect(x: 0, y: 0, width: 180, height: 40)
        loginButton.center = view.center
        loginButton.setTitle("My Login Button", for: .normal)

        // Handle clicks on the button
        loginButton.addTarget(self, action: #selector(loginButtonClicked), for: .touchUpInside)

        view.addSubview(loginButton)
    }
  
  
    // Once the button is clicked, show the login dialog
    func loginButtonClicked() {
        let loginManager = LoginManager()
        loginManager.logIn(permissions: ["public_profile"], from: self) { result, error in
            if let error = error {
                print("Encountered Erorr: \(error)")
            } else if let result = result, result.isCancelled {
                print("Cancelled")
            } else {
                print("Logged In")
            }
        }
    }
}

    

使用介面產生器

若為 12.0.0 及以上版本的 Facebook iOS SDK,則須採取以下步驟。如果未完成此步驟,使用 Interface Builder 的應用程式可能會當機。

以圖像方式在 Interface Builder 中新增登入按鈕:

  1. 在版面中新增 UIButton 物件。設定限制條件以確定有關位置。
  2. Identity inspector 中,將 Class 屬性變更為 FBSDKLoginButton

版面現在會類似以下畫面:

注意:請勿為 FBSDKLoginButton 類別設定模組。模組應顯示為 None

注意:由於 XCFramework 存在某個已知問題,您可能會看到 Xcode 記錄中出現以下錯誤:

[Storyboard] Unknown class FBSDKLoginButton in Interface Builder file.

您可以在 application:didFinishLaunchingWithOptions: 方法中新增以下代碼,使系統在載入故事板之前「預先載入」FBSDKLoginButton 類別,從而修正此錯誤:

// For Swift
_ = FBLoginButton.self

// For Objective-C
[FBSDKLoginButton class];

存取憑證

通知

您可使用 NotificationCenter 中的 .AccessTokenDidChange 通知來追蹤 AccessToken.current 的變更。這樣您就能回應用戶登入狀態的變化:

NotificationCenter.default.addObserver(
    forName: .AccessTokenDidChange,
    object: nil,
    queue: .main
) { notification in
    if notification.userInfo?[AccessTokenDidChangeUserIDKey] != nil {
        // Handle user change
    }
}

iOS SDK 可隨時間更新 AccessToken.current,例如當 SDK 重新整理到期日更長的憑證時便會更新。因此,您應該檢查 AccessTokenDidChangeUserIDKey 通知中的 userInfo 字典,判斷用戶是否已變更。

個人檔案

Profile 內含公開個人檔案資料,可供您根據用戶姓名和個人資料相片個人化應用程式。您可以使用 loadCurrentProfile(completion:) 載入已登入用戶的個人檔案。

Profile.loadCurrentProfile { profile, error in
    if let firstName = profile?.firstName {
        print("Hello, \(firstName)")
    }
}

您可以將 enableUpdatesOnAccessTokenChange 屬性設為 true,以便自動將個人檔案載入至 Profile.current。這樣也可以讓您觀察 .ProfileDidChange 通知來回應個人檔案變化:

Profile.enableUpdatesOnAccessTokenChange(true)
NotificationCenter.default.addObserver(
    forName: .ProfileDidChange,
    object: nil,
    queue: .main
) { notification in
    if let currentProfile = Profile.current {
        // Update for new user profile
    }
}

顯示個人資料相片

FBProfilePictureView 類別提供了輕鬆顯示用戶 Facebook 個人資料相片的方式。只需設定執行個體的 profileID 屬性即可。您可將其設定為 AccessToken.current.userID 值,以便顯示目前已登入用戶的個人資料相片。

let profilePictureView = FBProfilePictureView()
profilePictureView.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
profilePictureView.profileID = AccessToken.current!.userID
view.addSubview(profilePictureView)

設定授權類型

在 iOS 版 Facebook SDK 中,Facebook 登入按鈕的預設 auth_type重新要求。如要避免要求取得先前遭拒的權限,請將 auth_type 設為 nil。您也可以將其設為重新授權,以便在用戶的資料存取權過期時顯示資料重新授權對話框。

以下範例展示了如何在 Swift 中設定 auth_type

let loginButton = FBLoginButton()

// Set to nil for no auth_type
button.authType = nil

// Or set to reauthorize
button.authType = .reauthorize

以下範例展示了如何使用帶有登入管理工具的登入配置設定 auth_type

let config = LoginConfiguration(
    permissions: [],
    tracking: .enabled,
    messengerPageId: nil,
    authType: nil
)

let loginManager = LoginManager()
loginManager.logIn(viewController: self, configuration: config!) { loginResult in
    // Do something with loginResult
}