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. 版本中,输入最新 iOS 版 Facebook SDK 的版本号。
  4. 完成提示,选择要在项目中使用的库。

3. 在 Facebook 注册和配置您的应用

注册和配置您的应用,以便添加捆绑包标识符,使用 Facebook 登录。

你需要登录来完成这一步。

4. 配置项目

使用包含应用数据的 XML 代码片段配置 Info.plist 文件。

在您集成 Facebook 登录之后,如果未禁用自动应用事件记录功能,系统将为事件管理工具自动记录和收集特定的应用事件。如要详细了解系统会收集哪些信息以及如何禁用自动应用事件记录功能,请参阅自动应用事件记录

  1. 右键点击 Info.plist,然后选择 Open As(打开方式)▸ Source Code(源代码)
  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 时,也会将其写入 Keychain 存储。
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 数据而定,在发布应用前,您可能需要先提交审核。
如要构建您自己的登录流程,请参阅手动构建登录流程