ИСПРАВЛЕННАЯ документация Facebook по протоколу OAuth

Текущая документация Facebook устарела ...

Проблема: если вы будете точно следовать инструкциям в соответствии с документацией, ваше приложение может работать в вашем симуляторе, но может не работать на вашем реальном устройстве (я использую iPhone 11, поэтому я не Точно не знаю про другие модели).

Решение. Проверьте шаг 6, если все, что вам нужно, - это решение.

С использованием:

  • XCode 11.2.1
  • iOS 13.3.1
  • Коко-моллюски (FBSDKLoginKit)
  • Swift 5

1. Создайте новое приложение для единого просмотра.

Сначала базовые вещи.

Назовите это как-нибудь.

Сохраните его где хотите.

Зайдите в свой терминал и перейдите в папку своего проекта. Запустите pod init и pod install, чтобы настроить проект с помощью cocoapods.

Теперь откройте файл рабочей области проекта с помощью XCode.

Найдите свой Podfile и добавьте свои зависимости: FBSDKLoginKit & FBSDKLoginCore

Вернитесь в свой терминал и запустите еще pod install, чтобы добавить свои зависимости в проект.

2. Создайте кнопку, которая запустит процесс входа в систему.

Перейдите к контроллеру корневого представления и добавьте новую настраиваемую кнопку.

Убедитесь, что вы видите, что он записывает ваш распечатанный отчет, когда вы его нажимаете.

2. Создайте приложение на панели управления Facebook.

Перейдите по следующему URL-адресу, чтобы создать свое приложение с Facebook:

Https://developers.facebook.com/docs/facebook-login/ios

Я прохожу с вами каждый шаг ...

  1. Либо создайте новое приложение, либо выберите существующее. Я собираюсь создать новую. Нажмите «Создать новое приложение», как только вы закончите, оно должно выглядеть следующим образом.

2. Измените менеджер пакетов на Cocoapods.

3. Для шага 3 нам понадобится идентификатор нашего пакета, чтобы после завершения потока oauth приложение facebook знало, в какое приложение перенаправить обратно.

Здесь вы можете найти свой идентификатор пакета.

Вставьте это в шаг 3 и нажмите "Сохранить".

Кроме того, включите единый вход для своего приложения.

4. Добавьте конфиг в ваш info.plist файл.

По сути, вам просто нужно скопировать оба этих фрагмента кода и поместить их в свой info.plist, вот как это должно выглядеть в итоге ...

5. Подключите делегата вашего приложения (вот где они облажались)

На этом этапе они дают вам 2 блока кода, нам понадобится только код Swift.

Чтобы сделать это предельно ясным, я скопирую код в редактор, чтобы указать на ошибку.

Не обращайте внимания на ошибку, это просто демонстрация кода, который вам дают.

Они предоставляют вам 2 функции в вашем классе AppDelegate.

Функция, которую я выделил, содержит некоторые настройки, которые вам понадобятся в вашем приложении. Просто возьмите выделенный раздел и вставьте его в свой реальный AppDelegate.

Теперь вернитесь к инъекционному коду, который они вам дают. Вы видите там вторую функцию? На самом деле вам это не нужно. Вот что вам на самом деле нужно сделать ...

Скопируйте эту функцию:

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
      guard let url = URLContexts.first?.url else {
          return
      }
      let _ = ApplicationDelegate.shared.application(
          UIApplication.shared,
          open: url,
          sourceApplication: nil,
          annotation: [UIApplication.OpenURLOptionsKey.annotation])
}

Вам нужно добавить эту функцию в ваш SceneDelegate файл. Так что давай сделаем это.

6. Сделайте так, чтобы наша кнопка Facebook действительно работала.

Вернитесь к своему ViewController и добавьте обратный вызов к кнопке facebook.

Все, что мы здесь делаем, это ...

  1. Проверяем, есть ли у нашего класса AccessToken (предоставляемого FBSDKLoginKit) токен доступа (то есть мы вошли в систему раньше).
  2. Если он у нас есть, то выходим из системы (удаляем токен доступа из приложения).
  3. Если у нас его нет, мы проводим пользователя через поток входа в систему и обрабатываем обратный вызов, когда этот поток входа завершается.

Теперь все должно работать правильно! 🎉

Если вы узнали что-то сегодня, поздравляю вас :)

Удачного кодирования 📈