Xét duyệt đăng nhập

Nếu ứng dụng của bạn yêu cầu nhiều hơn quyền public_profileemail, Facebook sẽ phải xét duyệt ứng dụng thì bạn mới có thể phát hành ứng dụng đó. Tìm hiểu thêm về quá trình xét duyệt và yêu cầu cần đáp ứng để được xét duyệt thành công.

Hướng dẫn về Xét duyệt đăng nhập

Nút đăng nhập tùy chỉnh

Thay vì sử dụng nút đăng nhập có thương hiệu của Facebook (được giải thích trong phần Đăng nhập bằng Facebook dành cho iOS – Bắt đầu nhanh), bạn nên thiết kế bố cục và hành vi tùy chỉnh. Trong ví dụ về mã sau đây, chúng tôi gọi hộp thoại đăng nhập thông qua lớp trình quản lý đăng nhập (LoginManager) và một nút tùy chỉnh (UIButton). Bạn có thể dùng bất kỳ giao diện người dùng tùy chỉnh nào khác hoặc hoạt động xử lý sự kiện để gọi hộp thoại đăng nhập.

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")
            }
        }
    }
}

    

Sử dụng Công cụ tạo giao diện

Dưới đây là những bước bắt buộc đối với Facebook iOS SDK phiên bản 12.0.0 trở lên. Các ứng dụng dùng Interface Builder có thể bị lỗi nếu bạn không hoàn tất bước này.

Cách thêm nút đăng nhập bằng đồ thị trong Interface Builder:

  1. Thêm đối tượng UIButton vào bố cục của bạn. Đặt các giới hạn để xác định vị trí của đối tượng đó.
  2. Trong Identity inspector, hãy thay đổi thuộc tính Class thành FBSDKLoginButton.

Bây giờ, bố cục của bạn có dạng như sau:

Lưu ý: Không đặt mô-đun cho lớp FBSDKLoginButton. Mô-đun nên có giá trị là Không có:

Lưu ý: Bạn có thể thấy lỗi dưới đây trong nhật ký Xcode do XCFrameworks xảy ra sự cố đã biết:

[Storyboard] Unknown class FBSDKLoginButton in Interface Builder file.

Bạn có thể khắc phục sự cố này bằng cách "tải trước" lớp FBSDKLoginButton rồi mới tải bảng phân cảnh khi thêm phần sau vào phương thức application:didFinishLaunchingWithOptions::

// For Swift
_ = FBLoginButton.self

// For Objective-C
[FBSDKLoginButton class];

Mã truy cập

Thông báo

Bạn có thể theo dõi các thay đổi về AccessToken.current qua thông báo .AccessTokenDidChange trong NotificationCenter. Nhờ vậy, bạn có thể phản hồi những thay đổi về trạng thái đăng nhập của người dùng:

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

iOS SDK có thể cập nhật AccessToken.current theo thời gian, chẳng hạn như khi SDK làm mới mã truy cập với ngày hết hạn lâu hơn. Do đó, bạn nên kiểm tra thư mục userInfo trong thông báo cho AccessTokenDidChangeUserIDKey để xác định xem người dùng đã thay đổi hay chưa.

Trang cá nhân

Profile chứa thông tin công khai trên trang cá nhân, cho phép bạn cá nhân hóa ứng dụng bằng tên và ảnh đại diện của người dùng. Bạn có thể tải trang cá nhân của người dùng đã đăng nhập thông qua loadCurrentProfile(completion:).

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

Bạn có thể đặt thuộc tính enableUpdatesOnAccessTokenChange thành true để tự động tải trang cá nhân vào Profile.current. Nhờ vậy, bạn cũng có thể theo dõi thông báo .ProfileDidChange để phản hồi những thay đổi về trang cá nhân:

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

Hiển thị ảnh đại diện

Lớp FBProfilePictureView mang lại một cách dễ dàng để hiển thị ảnh đại diện trên Facebook của ai đó. Chỉ cần đặt thuộc tính profileID trên phiên bản. Bạn có thể đặt thuộc tính này thành một giá trị của AccessToken.current.userID để hiển thị ảnh đại diện của người đăng nhập hiện tại.

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

Thiết lập loại ủy quyền

auth_type mặc định cho nút Đăng nhập bằng Facebook trong Facebook SDK dành cho iOS là yêu cầu lại. Nếu bạn muốn tránh yêu cầu các quyền đã bị từ chối trước đây, hãy đặt auth_type thành nil. Bạn cũng có thể đặt thuộc tính này thành ủy quyền lại để hiển thị hộp thoại ủy quyền lại dữ liệu nếu quyền truy cập dữ liệu của người dùng đã hết hạn.

Ví dụ sau cho thấy cách đặt auth_type trong Swift.

let loginButton = FBLoginButton()

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

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

Ví dụ sau cho thấy cách đặt auth_type bằng cấu hình đăng nhập có trình quản lý đăng nhập.

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
}