Чтобы использовать состояния аутентификации для нескольких приложений или расширений на платформах Apple, сохраните состояние аутентификации в общей связке ключей с помощью службы «Связка ключей» и настройте свои приложения на использование общей цепочки ключей.
Это позволяет пользователям:
- Войдите в систему один раз и выполните вход во всех приложениях, принадлежащих к одной группе доступа.
- Выйдите из системы один раз и выполните выход из всех приложений, принадлежащих к одной группе доступа.
Делитесь состоянием аутентификации между приложениями
Чтобы поделиться состоянием аутентификации между приложениями:
Настройте группу доступа для своих приложений.
Вы можете использовать либо группу доступа к связке ключей, либо группу приложений. Подробности см. в разделе «Общий доступ к элементам связки ключей среди коллекции приложений» .
Чтобы настроить группу доступа к связке ключей, выполните следующие действия для каждого приложения:
- В Xcode перейдите в «Настройки проекта» > «Возможности» .
- Включите общий доступ к связке ключей.
- Добавьте идентификатор группы связки ключей. Используйте один и тот же идентификатор для всех приложений, состояние которых вы хотите разделить.
В каждом приложении настройте группу доступа на группу доступа к связке ключей или группу приложений, созданную на предыдущем шаге.
Быстрый
do { try Auth.auth().useUserAccessGroup("TEAMID.com.example.group1") } catch let error as NSError { print("Error changing user access group: %@", error) }
Цель-C
[FIRAuth.auth useUserAccessGroup:@"TEAMID.com.example.group1" error:nil];
Хотя бы в одном приложении войдите в систему с помощью любого метода входа.
Быстрый
Auth.auth().signInAnonymously { result, error in // User signed in }
Цель-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
Один и тот же текущий пользователь доступен во всех приложениях в группе доступа.
Быстрый
var user = Auth.auth().currentUser
Цель-C
FIRUser *user = FIRAuth.auth.currentUser;
Вернуться к общей связке ключей
Установите для группы доступа значение
nil
, чтобы прекратить совместное использование состояния аутентификации.Быстрый
do { try Auth.auth().useUserAccessGroup(nil) } catch let error as NSError { print("Error changing user access group: %@", error) }
Цель-C
[FIRAuth.auth useUserAccessGroup:nil error:nil];
Войдите в систему с помощью любого метода входа. Состояние пользователя не будет доступно другим приложениям.
Быстрый
Auth.auth().signInAnonymously { result, error in // User signed in }
Цель-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
Перенос вошедшего пользователя в общую связку ключей
Чтобы перенести пользователя, который уже вошел в систему, в общее состояние:
Создайте ссылку на текущего пользователя для использования в будущем.
Быстрый
var user = Auth.auth().currentUser
Цель-C
FIRUser *user = FIRAuth.auth.currentUser;
(Необязательно) Проверьте состояние аутентификации группы доступа, которой вы хотите поделиться.
Быстрый
let accessGroup = "TEAMID.com.example.group1" var tempUser: User? do { try tempUser = Auth.auth().getStoredUser(forAccessGroup: accessGroup) } catch let error as NSError { print("Error getting stored user: %@", error) } if tempUser != nil { // A user exists in the access group } else { // No user exists in the access group }
Цель-C
NSString *accessGroup = @"TEAMID.com.example.group1"; FIRUser *tempUser = [FIRAuth getStoredUserForAccessGroup:accessGroup error:nil]; if (tempUser) { // A user exists in the access group } else { // No user exists in the access group }
Используйте группу доступа, которую вы ранее установили в настройках проекта.
Быстрый
do { try Auth.auth().useUserAccessGroup(accessGroup) } catch let error as NSError { print("Error changing user access group: %@", error) }
Цель-C
[FIRAuth.auth useUserAccessGroup:accessGroup error:nil];
Обновите текущего пользователя.
Быстрый
Auth.auth().updateCurrentUser(user!) { error in // Error handling }
Цель-C
[FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) { // Error handling }];
Теперь к пользователю могут получить доступ другие приложения, имеющие доступ к той же группе доступа.