Чтобы передавать данные аутентификации между несколькими приложениями или расширениями на платформах Apple, сохраните статус аутентификации в общей цепочке ключей с помощью сервисов цепочки ключей и настройте приложения на использование общей цепочки ключей.
Это позволяет пользователям:
- Войдите в аккаунт один раз, и вы будете авторизованы во всех приложениях, которые относятся к одной группе доступа.
- Выйдите из аккаунта один раз, и выход будет выполнен во всех приложениях, которые относятся к одной группе доступа.
Как передавать данные об аутентификации между приложениями
Чтобы передавать данные об аутентификации между приложениями:
Настройте группу доступа для приложений.
Вы можете использовать группу доступа к цепочке ключей или группу приложений. Подробнее о том, как предоставить доступ к объектам связки ключей группе приложений…
Чтобы настроить группу доступа к цепочке ключей, выполните следующие действия для каждого приложения:
- В Xcode перейдите в раздел Настройки проекта > Возможности.
- Включите общий доступ к связке ключей.
- Добавьте идентификатор группы связки ключей. Используйте один и тот же идентификатор для всех приложений, между которыми вы хотите обмениваться данными.
В каждом приложении задайте группу доступа в качестве группы доступа к цепочке ключей или группы приложений, созданной на предыдущем шаге.
Swift
do { try Auth.auth().useUserAccessGroup("TEAMID.com.example.group1") } catch let error as NSError { print("Error changing user access group: %@", error) }Objective-C
[FIRAuth.auth useUserAccessGroup:@"TEAMID.com.example.group1" error:nil];Войдите в любое приложение, используя любой способ входа.
Swift
Auth.auth().signInAnonymously { result, error in // User signed in }Objective-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];Один и тот же текущий пользователь доступен во всех приложениях в группе доступа.
Swift
var user = Auth.auth().currentUserObjective-C
FIRUser *user = FIRAuth.auth.currentUser;
Как вернуться к несовместно используемой цепочке ключей
Чтобы запретить передачу состояния аутентификации, задайте для группы доступа значение
nil.Swift
do { try Auth.auth().useUserAccessGroup(nil) } catch let error as NSError { print("Error changing user access group: %@", error) }Objective-C
[FIRAuth.auth useUserAccessGroup:nil error:nil];Войдите в аккаунт пользователя любым способом. Состояние пользователя будет недоступно для других приложений.
Swift
Auth.auth().signInAnonymously { result, error in // User signed in }Objective-C
[FIRAuth signInAnonymouslyWithCompletion:^(FIRAuthDataResult *_Nullable result, NSError *_Nullable error) { // User signed in }];
Как перенести данные пользователя, выполнившего вход в аккаунт, в общую связку ключей
Чтобы перевести пользователя, который уже вошел в аккаунт, в общее состояние:
Создайте ссылку на текущего пользователя, чтобы использовать ее в будущем.
Swift
var user = Auth.auth().currentUserObjective-C
FIRUser *user = FIRAuth.auth.currentUser;При необходимости проверьте статус аутентификации группы доступа, которой хотите поделиться.
Swift
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 }Objective-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 }Используйте группу доступа, которую вы ранее настроили в настройках проекта.
Swift
do { try Auth.auth().useUserAccessGroup(accessGroup) } catch let error as NSError { print("Error changing user access group: %@", error) }Objective-C
[FIRAuth.auth useUserAccessGroup:accessGroup error:nil];Обновление текущего пользователя.
Swift
Auth.auth().updateCurrentUser(user!) { error in // Error handling }Objective-C
[FIRAuth.auth updateCurrentUser:user completion:^(NSError * _Nullable error) { // Error handling }];Теперь пользователь доступен для других приложений, у которых есть доступ к той же группе доступа.