iOS 版 Facebook 登入:快速入門

我們已對受限登入的端點作出變更;現可透過 limited.facebook.com 存取有關變更。

當用戶使用 Facebook 帳戶登入您的應用程式時,用戶可向您的應用程式授予權限,以便您代表用戶在 Facebook 上檢索資訊或執行動作。

您可按照下列步驟在 iOS 專案中加入 Facebook 登入功能。

1. 登入

若要建立應用程式或註冊成為開發人員,請登入 Facebook。

2.設定開發環境

在使用 iOS 版 Facebook 登入前,請先設定您的開發環境。

使用 Swift 套件管理工具 (SPM)
  1. 在 Xcode 中,點擊 File > Swift Packages > Add Package Dependency
  2. 在畫面出現的對話框中輸入資料庫網址:https://github.com/facebook/facebook-ios-sdk
  3. 版本中,輸入最新版 iOS 版 Facebook SDK 的版本編號。
  4. 跟從提示操作,選擇想在專案中使用的資料庫。

3.利用 Facebook 註冊與配置應用程式

新增程式套裝識別資料,註冊與配置您的應用程式,以便使用「Facebook 登入」。

你必須登入才能完成此步驟。

4.配置您的專案

使用包含您應用程式資料的 XML 程式碼片段,配置 Info.plist 檔案。

在您整合 Facebook 登入後,除非您停用事件自動記錄功能,否則系統會為事件管理工具自動記錄並蒐集特定應用程式事件。若要進一步了解系統會蒐集哪些資料,以及如何停用事件自動記錄功能,請參閱應用程式事件自動記錄一文。

  1. Info.plist 點擊右鍵,然後選擇開啟格式 ▸ 原始碼
  2. 複製下列 XML 程式碼片段,並將之貼至檔案內文(<dict>...</dict>)。
    <key>CFBundleURLTypes</key>
    <array>
      <dict>
      <key>CFBundleURLSchemes</key>
      <array>
        <string>fbAPP-ID</string>
      </array>
      </dict>
    </array>
    <key>FacebookAppID</key>
    <string>APP-ID</string>
    <key>FacebookClientToken</key>
    <string>CLIENT-TOKEN</string>
    <key>FacebookDisplayName</key>
    <string>APP-NAME</string>
  3. [CFBundleURLSchemes] 鍵值的 <array><string> 中,將 [APP-ID] 替換為您的應用程式編號。
  4. FacebookAppID 鍵值的 <string> 中,將 [APP-ID] 替換為您的應用程式編號。
  5. FacebookClientToken 鍵值的 <string> 中,將 [CLIENT-TOKEN] 替換為您在應用程式管理中心的設定 > 進階 > 用戶端憑證中找到的值。
  6. FacebookDisplayName 鍵值的 <string> 中,將 [APP-NAME] 替換為您的應用程式名稱。
  7. 如要使用任何會使應用程式切換至 Facebook 應用程式的 Facebook 對話框,如登入對話框、分享對話框、應用程式邀請對話框等,您應用程式的 Info.plist 也必須包含以下項目:
    <key>LSApplicationQueriesSchemes</key>
    <array>
      <string>fbapi</string>
      <string>fb-messenger-share-api</string>
    </array>

您可以在 Info.plistFacebookAutoLogAppEventsEnabled 加為鍵,以直接將自動蒐集應用程式事件的功能設為「true」或「false」。

您的專案需要包含「鑰匙圈共享」功能,才能登入並在 Mac Catalyst 應用程式運作。
  1. 配置應用程式目標時,選擇登入和功能分頁中的 + 功能按鈕。
  2. 找出並選擇鑰匙圈共享功能。
  3. 確保目標已列出鑰匙圈共享功能。

5.連接應用程式委派

AppDelegate.swift 方法中的程式碼替換為以下程式碼。此程式碼會在應用程式啟動時初始化 SDK,並在您執行登入或分享操作時,允許 SDK 處理原生 Facebook 應用程式所產生的登入和分享事件。否則,用戶必須登入 Facebook 以使用應用程式內瀏覽器登入。
    
// AppDelegate.swift
import UIKit
import FacebookCore

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {    
    func application(
        _ application: UIApplication,
        didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
    ) -> Bool {          
        ApplicationDelegate.shared.application(
            application,
            didFinishLaunchingWithOptions: launchOptions
        )

        return true
    }
          
    func application(
        _ app: UIApplication,
        open url: URL,
        options: [UIApplication.OpenURLOptionsKey : Any] = [:]
    ) -> Bool {
        ApplicationDelegate.shared.application(
            app,
            open: url,
            sourceApplication: options[UIApplication.OpenURLOptionsKey.sourceApplication] as? String,
            annotation: options[UIApplication.OpenURLOptionsKey.annotation]
        )
    }  
}

iOS 13 已將開啟網址的功能移至 SceneDelegate。如果您正在使用 iOS 13,請將以下方法加到 SceneDelegate 中,以便登入或分享等操作能如預期執行:
// SceneDelegate.swift
import FacebookCore
  ...
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
    guard let url = URLContexts.first?.url else {
        return
    }

    ApplicationDelegate.shared.application(
        UIApplication.shared,
        open: url,
        sourceApplication: nil,
        annotation: [UIApplication.OpenURLOptionsKey.annotation]
    )
}

6.在程式碼中新增 Facebook 登入

在您的 iOS 應用程式中使用「Facebook 登入」按鈕。

6a.在程式碼中新增 Facebook 登入

如要將 Facebook 品牌的登入按鈕加至應用程式,請將下列程式碼片段加至檢視控制器。
// Add this to the header of your file, e.g. in ViewController.swift 
import FacebookLogin

// Add this to the body
class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
	
        let loginButton = FBLoginButton()
        loginButton.center = view.center
        view.addSubview(loginButton)
    }
}
現在,您應該可以執行應用程式,並使用 Facebook 登入按鈕登入。

6b.檢查目前登入狀態

應用程式每次只能有一位用戶登入。我們使用 AccessToken.current 代表每位已登入應用程式的用戶。
LoginManager 為您設定此憑證,而在設定 AccessToken.current 時,它還會自動將其寫入鑰匙圈儲存區。
AccessToken 包含 userID,可供您識別用戶之用。
您應該更新檢視控制器,以便確認載入之時是否已有憑證。這樣,如果有人已為您的應用程式授權,系統就不會再次顯示登入流程而造成麻煩:
override func viewDidLoad() {
    super.viewDidLoad()

    if let token = AccessToken.current,
        !token.isExpired {
        // User is logged in, do work such as go to next view controller.
    }
}
    

6c.要求獲取權限

使用「Facebook 登入」時,您的應用程式可以要求用戶授予有關其個人資料子集的權限。「Facebook 登入」需要進階 public_profile 權限,以供外部用戶使用。
Facebook 登入按鈕的讀取權限
如需要求獲取其他讀取權限,請在 FBLoginButton 物件上設定 permissions 屬性。
// Extend the code sample from 6a. Add Facebook Login to Your Code
// Add to your viewDidLoad method:
loginButton.permissions = ["public_profile", "email"]
  
系統會提示用戶向您的應用程式授予所要求的權限。請注意,部分權限需要經過登入審查。請參閱管理權限,了解有關權限的更多資訊。

7.後續步驟

恭喜!您已成功在 iOS 應用程式中新增 Facebook 登入功能!請記得查閱我們其他的文件頁面,取得更多進階指南。
執行資料刪除回呼,以回應用戶從 Facebook 刪除資料的要求。
將事件加入應用程式中即可查看分析數據、衡量廣告成效,以及為廣告目標建立廣告受眾。
請參考我們介紹 iOS 應用程式 Facebook 登入功能的進階指南。
透過 Facebook 登入功能管理應用程式可存取的資料。
了解如何處理 Facebook SDK 傳回的錯誤。
測試並驗證 Facebook 登入流程是否能正常運作。
視乎您想透過 Facebook 登入功能向用戶索取哪些 Facebook 資料,您可能需要先提交應用程式以供審查,才可正式發佈該應用程式。
如要了解如何建立自有登入流程,請參閱手動建立登入流程