Начало работы с аутентификацией Firebase на платформах Apple

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

Подключите ваше приложение к Firebase.

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

Добавьте Firebase Authentication в ваше приложение.

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

  1. В Xcode, открыв проект приложения, перейдите в меню File > Add Packages .
  2. При появлении запроса добавьте репозиторий Firebase Apple Platforms SDK:
  3.   https://github.com/firebase/firebase-ios-sdk.git
  4. Выберите библиотеку Firebase Authentication .
  5. Добавьте флаг -ObjC в раздел «Другие флаги компоновщика» в настройках сборки вашей целевой системы.
  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 .

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

Инициализируйте SDK Firebase.

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

Быстрый

import FirebaseCore

Objective-C

@import FirebaseCore;

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

Быстрый

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

Objective-C

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

Отслеживание состояния аутентификации

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

Прикрепите обработчик событий в методе viewWillAppear контроллера представления:

Быстрый

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

Objective-C

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

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

Быстрый

Auth.auth().removeStateDidChangeListener(handle!)

Objective-C

[[FIRAuth auth] removeAuthStateDidChangeListener:_handle];

Регистрация новых пользователей

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

Быстрый

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 :

Быстрый

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) {
  // ...
}];

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

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

Быстрый

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;
  // ...
}

Следующие шаги

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