Если приложение запрашивает не только разрешения public_profile
и email
, специалисты Facebook должны проверить его перед переводом в рабочий режим. Ознакомьтесь с процедурой проверки и узнайте, как успешно ее пройти.
Вместо того чтобы использовать брендированную кнопку входа Facebook (подробнее об этом см. в статье "Вход через Facebook" для iOS — быстрое начало работы), вы можете создать собственный макет и логику. В примере кода ниже мы запускаем диалог входа, используя класс диспетчера входа (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") } } } }
Эти действия необходимы для Facebook SDK для iOS версии 12.0.0 и более поздних. Если не выполнить это действие, в приложениях, использующих Interface Builder
, может произойти сбой.
Чтобы добавить изображение кнопки "Вход" в графическом инструменте Interface Builder
, выполните следующие действия:
UIButton
. Установите ограничения, чтобы его разместить.Identity inspector
измените значение свойства Class
на FBSDKLoginButton
.Макет будет выглядеть следующим образом:
Примечание. Не задавайте модуль для класса FBSDKLoginButton
. Для него должно отображаться значение Нет:
Примечание. Вы можете увидеть следующую ошибку в журналах Xcode из-за известной проблемы с XCFrameworks:
[Storyboard] Unknown class FBSDKLoginButton in Interface Builder file.
Чтобы исправить ее, загрузите класс FBSDKLoginButton до того, как загрузится раскадровка, добавив в метод application:didFinishLaunchingWithOptions:
следующий код:
// For Swift _ = FBLoginButton.self // For Objective-C [FBSDKLoginButton class];
Вы можете отслеживать изменения AccessToken.current
с помощью уведомления .AccessTokenDidChange
в NotificationCenter
. Это позволяет реагировать на изменения в статусе входа пользователя.
NotificationCenter.default.addObserver( forName: .AccessTokenDidChange, object: nil, queue: .main ) { notification in if notification.userInfo?[AccessTokenDidChangeUserIDKey] != nil { // Handle user change } }
SDK для iOS может со временем менять AccessToken.current
, например, когда нужно продлить срок действия маркера доступа. По этой причине необходимо проверять словарь 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)
По умолчанию для кнопок входа через Facebook в Facebook SDK для iOS используется auth_type
со значением rerequest. Если вы не хотите повторно запрашивать разрешения, в которых ранее было отказано, задайте для auth_type
значение nil
. Также можно установить значение reauthorize для отображения диалога повторной авторизации данных, если срок доступа к данным пользователя истек.
В этом примере показано, как задать auth_type
на языке Swift:
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 }