Проверка входа

Если приложение запрашивает не только разрешения 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")
            }
        }
    }
}

    

Использование Interface Builder

Эти действия необходимы для Facebook SDK для iOS версии 12.0.0 и более поздних. Если не выполнить это действие, в приложениях, использующих Interface Builder, может произойти сбой.

Чтобы добавить изображение кнопки "Вход" в графическом инструменте Interface Builder, выполните следующие действия:

  1. Добавьте в макет объект UIButton. Установите ограничения, чтобы его разместить.
  2. В 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
}