Nếu ứng dụng của bạn yêu cầu nhiều hơn quyền public_profile
và email
, 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.
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") } } } }
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
:
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 đó.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];
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.
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 } }
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)
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 }