Docs Menu
Docs Home
/ /
Administrar usuarios

Vincular identidades de usuario - Swift SDK

Atlas App Services ofrece Muchos proveedores de autenticación permiten a los usuarios iniciar sesión en tu aplicación. Cada proveedor crea una identidad de usuario única. App Services y el SDK de Swift de Realm te permiten combinar varias credenciales en una sola identidad de usuario.

Considere una aplicación que ofrece inicio de sesión anónimo. Esto permite a los usuarios explorar la aplicación sin registrarse. Si les gusta la aplicación, crean cuentas permanentes. Se registran con SSO o autenticación por correo electrónico y contraseña. De forma predeterminada, esto crea una nueva cuenta. User objeto. La aplicación debe vincular la nueva identidad con el usuario original.

Puedes vincular identidades usando linkUser(credentials:Credentials). Esto vincula proveedores de autenticación a un objeto de User con sesión iniciada.

@interface LinkIdentitiesExample : NSObject
@end
@implementation LinkIdentitiesExample {
RLMApp *app;
RLMUser *anonymousUser;
}
// Entry-point for example.
- (void)runExample {
app = [RLMApp appWithId:YOUR_APP_ID];
[self logInAnonymously];
}
- (void)logInAnonymously {
[app loginWithCredential:[RLMCredentials anonymousCredentials] completion:^(RLMUser *user, NSError *error) {
if (error != nil) {
NSLog(@"Failed to log in: %@", [error localizedDescription]);
return;
}
// User uses app, then later registers an account
[self registerNewAccountAsAnonymousUser: user];
}];
}
- (void)registerNewAccountAsAnonymousUser:(RLMUser *)user {
NSString *email = @"link2@example.com";
NSString *password = @"ganondorf";
[[app emailPasswordAuth] registerUserWithEmail:email password:password completion:^(NSError *error) {
if (error != nil) {
NSLog(@"Failed to register new account: %@", [error localizedDescription]);
return;
}
// Successfully created account, now link it
// with the existing anon user
[self linkUser:self->anonymousUser withCredentials:[RLMCredentials credentialsWithEmail:email password:password]];
}];
}
- (void)linkUser:(RLMUser *)user withCredentials:(RLMCredentials *)credentials {
[[app currentUser] linkUserWithCredentials:credentials completion:^(RLMUser *user, NSError *error) {
if (error != nil) {
NSLog(@"Failed to link user: %@", [error localizedDescription]);
return;
}
NSLog(@"Successfully linked user: %@", user);
}];
}
@end
let app = App(id: YOUR_APP_SERVICES_APP_ID)
func logInAnonymously() {
app.login(credentials: Credentials.anonymous) { (result) in
switch result {
case .failure(let error):
print("Failed to log in: \(error.localizedDescription)")
case .success(let user):
// User uses app, then later registers an account
registerNewAccount(anonymousUser: user)
}
}
}
func registerNewAccount(anonymousUser: User) {
let email = "swift-link@example.com"
let password = "ganondorf"
app.emailPasswordAuth.registerUser(email: email, password: password) { (error) in
guard error == nil else {
print("Failed to register new account: \(error!.localizedDescription)")
return
}
// Successfully created account, now link it
// with the existing anon user
link(user: anonymousUser, with: Credentials.emailPassword(email: email, password: password))
}
}
func link(user: User, with credentials: Credentials) {
user.linkUser(credentials: credentials) { (result) in
switch result {
case .failure(let error):
print("Failed to link user: \(error.localizedDescription)")
case .success(let user):
print("Successfully linked user: \(user)")
}
}
}
logInAnonymously()

Nuevo en la versión 10.16.0.

El SDK Realm Swift proporciona una versión asíncrona/en espera de User.linkUser.

let app = App(id: YOUR_APP_SERVICES_APP_ID)
func logInAnonymously() async throws -> User {
let anonymousUser = try await app.login(credentials: Credentials.anonymous)
// User uses app, then later registers an account
let newAccountLinkedUser = try await registerNewAccount(anonymousUser: anonymousUser)
return newAccountLinkedUser
}
func registerNewAccount(anonymousUser: User) async throws -> User {
let email = "swift-async-link@example.com"
let password = "ganondorf"
try await app.emailPasswordAuth.registerUser(email: email, password: password)
// Successfully created account, now link it
// with the existing anon user
let linkedUser = try await link(user: anonymousUser, with: Credentials.emailPassword(email: email, password: password))
return linkedUser
}
func link(user: User, with credentials: Credentials) async throws -> User {
try await user.linkUser(credentials: credentials)
}
do {
let linkedUser = try await logInAnonymously()
print("Successfully linked user async: \(linkedUser)")
} catch {
print("Failed to link user: \(error.localizedDescription)")
}

A partir de las versiones 10.15.0 y 10.16.0 del SDK de Realm Swift, muchas de las API de Realm admiten la sintaxis async/await de Swift. Los proyectos deben cumplir estos requisitos:

Versión del SDK de Swift
Requisito de versión Swift
Sistema operativo compatible

10.25.0

Swift 5.6

iOS 13.x

10.15.0 o 10.16.0

Swift 5.5

iOS 15.x

Si su aplicación accede a Realm en un contexto async/await, marque el código con @MainActor para evitar fallas relacionadas con subprocesos.

Volver

Aplicaciones multiusuario

En esta página