Аутентификация Firebase с помощью Google Sign-In в iOS

Введение

Аутентификация Firebase с использованием учетных записей Google предоставляет простой способ входа пользователей в приложение iOS с использованием их учетных записей Google. В этом посте я расскажу, как я реализовал аутентификацию Firebase с помощью Google Sign-In в своем iOS-приложении. Я представлю примеры кода, чтобы показать процесс реализации из моего опыта.

Настройка проекта в Firebase

Вот краткая инструкция для настройки проекта в Firebase и использования его в своем iOS-приложении:

Создать проект в консоли Firebase

Перейдите на веб-сайт консоли Firebase и создайте новый проект. Введите имя проекта и выберите вашу страну или регион. Затем нажмите кнопку "Создать проект".

Добавить iOS-приложение в проект Firebase

После создания проекта вам будет предложено добавить платформу для вашего приложения. Выберите iOS и введите название вашего приложения (например, "MyApp"). Затем введите идентификатор пакета приложения (Bundle Identifier), который вы используете в своем проекте Xcode. После этого нажмите кнопку "Регистрация приложения".

Загрузить файл конфигурации

После регистрации приложения вам будет предложено загрузить файл конфигурации GoogleService-Info.plist. Нажмите кнопку "Загрузить GoogleService-Info.plist" и сохраните файл на вашем компьютере.

Добавить файл конфигурации в свой проект Xcode

Откройте свой проект Xcode и перетащите файл GoogleService-Info.plist в корневую папку вашего проекта. Убедитесь, что файл добавлен в целевую папку вашего приложения.

Установка SDK Firebase и Google Sign-In

Я установил необходимые SDK Firebase и Google Sign-In в свой проект. Для этого я использовал Swift Package Manager и импортировал соответствующие фреймворки в мои файлы.

import Firebase
import GoogleSignIn

Включение Google Sign-In в консоли Firebase

В консоли Firebase я включил провайдер Google на вкладке "Sign-in method" в разделе "Authentication". Это позволило пользователям входить в приложение, используя свои учетные записи Google.

Импорт необходимых заголовочных файлов

Я импортировал необходимые заголовочные файлы Firebase и Google Sign-In в свой код для использования их функциональности.

import UIKit
import Firebase
import GoogleSignIn

Добавление обратного идентификатора в Info.plist

Я добавил обратный идентификатор (REVERSED_CLIENT_ID) из моего GoogleService-Info.plist в файл Info.plist моего проекта. Это было необходимо для обработки перенаправления аутентификации от Google.

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>com.googleusercontent.apps.REVERSED_CLIENT_ID</string>
        </array>
    </dict>
</array>

Добавление GoogleService-Info.plist в проект

Я добавил файл GoogleService-Info.plist, который я получил при настройке проекта в консоли Firebase, в мой проект. Убедитесь, что файл был добавлен в правильную директорию внутри вашего проекта.

Конфигурация FirebaseApp

В методе application(_:didFinishLaunchingWithOptions:) класса AppDelegate я выполнил конфигурацию FirebaseApp для правильной инициализации сервисов Firebase в моем приложении.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    FirebaseApp.configure()
    return true
}

Обработка URL-схем

Для обработки URL, полученного во время процесса аутентификации, я реализовал метод application(_:open:url:options:) класса AppDelegate. В этом методе я использовал GIDSignIn.sharedInstance.handle(url) для обработки URL и завершения процесса аутентификации.

func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey: Any] = [:]) -> Bool {
    return GIDSignIn.sharedInstance.handle(url)
}

Инициализация и настройка Google Sign-In

В классе SignInViewController я произвел инициализацию и настройку Google Sign-In. В методе viewDidLoad() я инициализировал Google Sign-In, установил делегата и создал кнопку для входа через Google.

override func viewDidLoad() {
    super.viewDidLoad()
    GIDSignIn.sharedInstance().delegate = self
// Создание кнопки для входа через Google

let googleSignInButton = GIDSignInButton()
googleSignInButton.addTarget(self, action: #selector(googleSignIn), for: .touchUpInside)
googleSignInButton.center = view.center
view.addSubview(googleSignInButton)
}

Обработка входа через Google

Я реализовал метод googleSignIn(), который вызывается при нажатии кнопки входа через Google. Внутри этого метода я использовал GIDSignIn.sharedInstance().signIn() для начала процесса входа пользователя через Google. Я также обработал результат входа пользователя и получил необходимые данные для создания учетных данных Firebase.

@objc func googleSignIn() {
    GIDSignIn.sharedInstance().signIn()
}

Обработка успешной аутентификации Google

В данном шаге реализуется обработка успешной аутентификации пользователя через Google. После того, как пользователь успешно войдет в систему с использованием учетных данных Google, выполняется следующий код:

@objc func googleSignIn() {
    GIDSignIn.sharedInstance.signIn(withPresenting: self) { user, error in
        if let error = error {
            // Обработка ошибки входа через Google
            print("Ошибка аутентификации через Google: \\(error.localizedDescription)")
            // Можно выполнить дополнительные действия в случае ошибки, например, вывод сообщения об ошибке пользователю
            return
        }
    // Если вход успешен, перейти на главный экран
    self.navigateToDashboard()
  }
}

Если вход через Google прошел успешно и ошибок не возникло, вызывается функция navigateToDashboard(), которая осуществляет переход на главный экран приложения.

Навигация на главный экран

Я реализовал метод navigateToDashboard(), который вызывается после успешной аутентификации пользователя. Внутри этого метода я выполнил переход на главный экран приложения или выполнил другие необходимые действия после аутентификации.

private func navigateToDashboard() {
    // Реализуйте переход на главный экран приложения
    // Например, используйте навигационный контроллер или презентуйте другой экран
}

Заключение

После завершения всех этих шагов я успешно реализовал аутентификацию Firebase с помощью Google Sign-In в моем iOS-приложении. Обратите внимание, что приведенные кодовые фрагменты являются основой для реализации и могут быть дополнены или изменены в соответствии с требованиями вашего проекта.

Комментарии (0)