Начало работы с Firebase Authentication на платформах Apple

Вы можете использовать Firebase Authentication, чтобы разрешить пользователям входить в ваше приложение одним или несколькими способами, в том числе с помощью адреса электронной почты и пароля, а также через поставщиков интегрированных решений для входа, таких как "Войти с аккаунтом Google" и Facebook Login. В этом руководстве Firebase Authenticationрассказывается, как добавить в приложение возможность входа с помощью адреса электронной почты и пароля.

Как подключить приложение к Firebase

  1. Установите Firebase SDK.
  2. Добавьте приложение в проект Firebase в консоли Firebase.

Как добавить Firebase Authentication в приложение

Для установки зависимостей Firebase и управления ими используйте Swift Package Manager.

  1. Откройте проект приложения в Xcode и перейдите в меню File (Файл) > Add Packages (Добавить пакеты).
  2. Когда появится запрос, добавьте хранилище Firebase SDK для платформ Apple:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Выберите библиотеку Firebase Authentication.
  5. Добавьте флаг -ObjC в раздел Other Linker Flags (Другие флаги компоновщика) в настройках сборки целевого объекта.
  6. После этого Xcode автоматически начнет распознавать и скачивать зависимости в фоновом режиме.

Создание прототипа и тестирование с помощью Firebase Local Emulator Suite (необязательно)

Прежде чем говорить о том, как ваше приложение аутентифицирует пользователей, давайте рассмотрим набор инструментов, которые можно использовать для создания прототипов и тестирования функций Authentication: Firebase Local Emulator Suite. Если вы выбираете методы аутентификации и поставщиков, тестируете разные модели данных с общедоступными и частными данными с помощью Authentication и Firebase Security Rules или создаете прототипы интерфейса входа, возможность работать локально без развертывания действующих сервисов может быть очень полезной.

Эмулятор Authentication входит в состав Local Emulator Suite, который позволяет приложению взаимодействовать с эмулируемым контентом и конфигурацией базы данных, а также, при необходимости, с эмулируемыми ресурсами проекта (функциями, другими базами данных и правилами безопасности).

Чтобы использовать эмулятор Authentication, выполните следующие действия:

  1. Добавление строки кода в конфигурацию тестирования приложения для подключения к эмулятору.
  2. Выполните команду firebase emulators:start в корневом каталоге локального проекта.
  3. Используйте интерфейс Local Emulator Suite для интерактивного создания прототипов или REST API эмулятора Authentication для неинтерактивного тестирования.

Подробную информацию можно найти в руководстве по подключению приложения к эмулятору Authentication. Подробнее о Local Emulator Suite…

Теперь давайте поговорим о том, как аутентифицировать пользователей.

Инициализация Firebase SDK

В делегате приложения сначала импортируйте Firebase SDK:

Swift

import FirebaseCore

Objective-C

@import FirebaseCore;

Затем в методе application:didFinishLaunchingWithOptions: инициализируйте объект FirebaseApp:

Swift

// Use Firebase library to configure APIs
FirebaseApp.configure()

Objective-C

// Use Firebase library to configure APIs
[FIRApp configure];

Как отслеживать статус аутентификации

Для каждого представления приложения, которому нужна информация о вошедшем в аккаунт пользователе, прикрепите прослушиватель к объекту FIRAuth. Этот прослушиватель вызывается при каждом изменении статуса входа пользователя.

Прикрепите прослушиватель к методу viewWillAppear контроллера представления:

Swift

handle = Auth.auth().addStateDidChangeListener { auth, user in
  // ...
}

Objective-C

self.handle = [[FIRAuth auth]
    addAuthStateDidChangeListener:^(FIRAuth *_Nonnull auth, FIRUser *_Nullable user) {
      // ...
    }];

Отсоедините слушателя в методе viewWillDisappear контроллера представления:

Swift

Auth.auth().removeStateDidChangeListener(handle!)

Objective-C

[[FIRAuth auth] removeAuthStateDidChangeListener:_handle];

Как зарегистрировать новых пользователей

Создайте форму, с помощью которой новые пользователи смогут зарегистрироваться в приложении, указав адрес электронной почты и пароль. Когда пользователь заполняет форму, проверьте указанный им адрес электронной почты и пароль, а затем передайте их в метод createUser:

Swift

Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
  // ...
}

Objective-C

[[FIRAuth auth] createUserWithEmail:email
                           password:password
                         completion:^(FIRAuthDataResult * _Nullable authResult,
                                      NSError * _Nullable error) {
  // ...
}];

Как войти в аккаунт существующему пользователю

Создайте форму, в которой существующие пользователи смогут входить в аккаунт, используя адрес электронной почты и пароль. Когда пользователь заполняет форму, вызовите метод signIn:

Swift

Auth.auth().signIn(withEmail: email, password: password) { [weak self] authResult, error in
  guard let strongSelf = self else { return }
  // ...
}

Objective-C

[[FIRAuth auth] signInWithEmail:self->_emailField.text
                       password:self->_passwordField.text
                     completion:^(FIRAuthDataResult * _Nullable authResult,
                                  NSError * _Nullable error) {
  // ...
}];

Как получить информацию о пользователе

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

Swift

if let user = user {
  // The user's ID, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server,
  // if you have one. Use getTokenWithCompletion:completion: instead.
  let uid = user.uid
  let email = user.email
  let photoURL = user.photoURL
  var multiFactorString = "MultiFactor: "
  for info in user.multiFactor.enrolledFactors {
    multiFactorString += info.displayName ?? "[DispayName]"
    multiFactorString += " "
  }
  // ...
}

Objective-C

if (user) {
  // The user's ID, unique to the Firebase project.
  // Do NOT use this value to authenticate with your backend server,
  // if you have one. Use getTokenWithCompletion:completion: instead.
  NSString *email = user.email;
  NSString *uid = user.uid;
  NSMutableString *multiFactorString = [NSMutableString stringWithFormat:@"MultiFactor: "];
  for (FIRMultiFactorInfo *info in user.multiFactor.enrolledFactors) {
    [multiFactorString appendString:info.displayName];
    [multiFactorString appendString:@" "];
  }
  NSURL *photoURL = user.photoURL;
  // ...
}

Дальнейшие действия

Узнайте, как добавить поддержку других поставщиков идентификационной информации и анонимных гостевых аккаунтов: