iOS 版 Facebook 登入 - 快速入門

我們已對「限制登入」端點進行變更,現在可以前往 limited.facebook.com 使用

當用戶使用 Facebook 登入您的應用程式,用戶可以將權限授予您的應用程式,讓您能代表用戶擷取資訊或者在 Facebook 執行操作。

下列步驟是將「Facebook 登入」加入 iOS 專案的步驟。

1. 登入

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

2. 設定開發環境

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

使用 Swift 套件管理工具(SPM)
  1. 在 Xcode 中,點擊 File(檔案)> Swift Packages(Swift 套件)> Add Package Dependency(新增套件相依性)
  2. 在顯示的對話方塊中,輸入儲存庫網址:https://github.com/facebook/facebook-ios-sdk
  3. Version(版本)中,輸入最新版 Facebook iOS 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.plist 中新增 FacebookAutoLogAppEventsEnabled 作為鍵值,直接將應用程式事件的自動蒐集功能設為「true」或「false」。

您的專案必須包含 Keychain Sharing(鑰匙圈分享)功能,才能讓登入在 Mac Catalyst 應用程式中運作。
  1. 設定應用程式目標時,請在「Signing & Capabilities(簽署和功能)」頁籤中選擇「+ Capability(+ 功能)」按鈕。
  2. 找到並選擇 Keychain Sharing 功能。
  3. 確認系統針對目標列出 Keychain Sharing 功能。

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. 後續步驟

恭喜,您已經將「Facebook 登入」新增至 iOS 應用程式!請務必查看其他說明文件頁面,以取得更多進階指南。
實作資料刪除回呼,以回應用戶從 Facebook 刪除其資料的要求。
在應用程式中加入事件,即可檢視分析資料、衡量廣告成效,以及建立廣告受眾進行廣告目標設定。
查看 iOS 應用程式的「Facebook 登入」進階設定。
管理您的應用程式可透過「Facebook 登入」存取的資料。
查看如何回應 Facebook SDK 傳回的錯誤。
測試與驗證「Facebook 登入」流程是否正確運作。
視您要求使用「Facebook 登入」的用戶所提供的 Facebook 資料而定,您可能需要在應用程式上線前,將應用程式提交審查。
若要建置您專屬的登入流程,請參閱手動建置登入流程