登录审核

如果应用要求 public_profileemail 以外的权限,Facebook 将在您发布前进行审核。详细了解审核流程以及通过审核的必要条件。

登录审核指南

自定义“登录”按钮

如果不想使用 Facebook 品牌的“登录”按钮,(iOS 版 Facebook 登录 - 快速入门中有详细介绍),您可设计自定义布局和行为。下面的代码示例使用 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")
            }
        }
    }
}

    

使用 Interface Builder

这些步骤的完成需要 12.0.0 或以上版本的 iOS 版 Facebook SDK。如果您还未完成此步骤,则使用 Interface Builder 的应用可能会崩溃。

Interface Builder 中添加“登录”按钮图形:

  1. 在布局中添加 UIButton 对象。设置约束条件进行定位。
  2. Identity inspector 中将 Class 属性改为 FBSDKLoginButton

布局现在看起来是这样:

请注意:请不要为 FBSDKLoginButton 类设置模块。应该显示

请注意:由于 XCFrameworks 的已知问题,您可能在 Xcode 记录中查看到以下错误:

[Storyboard] Unknown class FBSDKLoginButton in Interface Builder file.

您可以通过“预加载”FBSDKLoginButton 类以解决此问题,然后将以下内容添加至您的 application:didFinishLaunchingWithOptions: 方法以加载故事板:

// 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 刷新到期日期较长的口令时。因此,务必在通知中的 userInfo 字典里检查 AccessTokenDidChangeUserIDKey,以确定用户是否有所改变。

个人主页

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_typererequest。如果您不想申请曾被拒绝的权限,请将 auth_type 设置为 nil。您还可以将其设置为 reauthorize,以便在用户的数据访问过期时显示数据重新授权对话框。

下面的例子展示了如何在 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
}