ИСПРАВЛЕННАЯ документация 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
Я прохожу с вами каждый шаг ...
- Либо создайте новое приложение, либо выберите существующее. Я собираюсь создать новую. Нажмите «Создать новое приложение», как только вы закончите, оно должно выглядеть следующим образом.
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.
Все, что мы здесь делаем, это ...
- Проверяем, есть ли у нашего класса AccessToken (предоставляемого FBSDKLoginKit) токен доступа (то есть мы вошли в систему раньше).
- Если он у нас есть, то выходим из системы (удаляем токен доступа из приложения).
- Если у нас его нет, мы проводим пользователя через поток входа в систему и обрабатываем обратный вызов, когда этот поток входа завершается.
Теперь все должно работать правильно! 🎉
Если вы узнали что-то сегодня, поздравляю вас :)
Удачного кодирования 📈