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

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

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

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

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

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

  1. В Xcode, открыв проект приложения, выберите «Файл» > «Добавить пакеты» .
  2. При появлении запроса добавьте репозиторий SDK Firebase Apple для платформ:
  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 .

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

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

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

import FirebaseCore
@import FirebaseCore;

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

// Use Firebase library to configure APIs
FirebaseApp.configure()
// Use Firebase library to configure APIs
[FIRApp configure];

Слушайте состояние аутентификации

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

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

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

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

Auth.auth().removeStateDidChangeListener(handle!)
[[FIRAuth auth] removeAuthStateDidChangeListener:_handle];

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

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

Auth.auth().createUser(withEmail: email, password: password) { authResult, error in
 
// ...
}
[[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 }
 
// ...
}
[[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
+= " "
 
}
 
// ...
}
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;
 
// ...
}

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

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