Docs Menu
Docs Home
/ /
Administrar usuarios

Gestionar aplicaciones multiusuario - Kotlin SDK

Esta página describe cómo administrar varios usuarios de Atlas App Services en un solo dispositivo mediante el SDK de Kotlin. Para aprender a autenticar e iniciar sesión en una aplicación cliente, consulte "Crear y autenticar usuarios - SDK de Kotlin".

Realm permite que varios usuarios inicien sesión simultáneamente en una aplicación en un dispositivo determinado. Las aplicaciones cliente de Realm se ejecutan en el contexto de un solo usuario activo, incluso si varios usuarios inician sesión simultáneamente. Solo puede haber un usuario activo a la vez, y este se asocia a todas las solicitudes salientes.

Una cuenta de usuario representa un usuario único y distinto de su aplicación. App Services crea una cuenta única asociada. User objeto cuando un usuario se autentica e inicia sesión correctamente en una aplicación en un dispositivo. Tras el inicio de sesión, el SDK guarda la información del usuario y realiza un seguimiento de su estado en el dispositivo. Estos datos permanecen en el dispositivo, incluso si el usuario cierra sesión, a menos que lo elimine activamente del dispositivo. Para obtener más información sobre los usuarios y las cuentas de usuario de App Services, consulte Cuentas de usuario en la documentación de App Services.

El posible estado de un usuario en un dispositivo determinado se representa en el SDK de Kotlin mediante la enumeración user.state. Una cuenta de usuario puede LOGGED_OUT ser, LOGGED_IN REMOVEDo. A continuación, se describe cómo estos estados corresponden a un usuario en el dispositivo en un momento dado:

  • Con sesión iniciada: cualquier usuario autenticado que haya iniciado sesión en el dispositivo y no la haya cerrado ni se le haya revocado. El user.state LOGGED_INes. Un usuario con sesión iniciada puede ser:

    • Activo: un único usuario autenticado que utiliza la aplicación en un dispositivo determinado. El SDK asocia a este usuario con las solicitudes salientes, y Atlas App Services evalúa los permisos de acceso a los datos y ejecuta funciones en su contexto.

    • Inactivo: todos los usuarios autenticados que no son el usuario activo actual.

  • Desconectado: cualquier usuario que se autenticó en el dispositivo, pero que posteriormente cerró sesión o se le revocó la misma. El user.state LOGGED_OUTes.

  • Eliminado: cualquier usuario que haya sido eliminado activamente del dispositivo. El SDK cierra la sesión del usuario en la aplicación y elimina toda su información del dispositivo. El usuario debe volver a autenticarse para volver a usar la aplicación. El user.state es.REMOVED

Un diagrama que describe los diferentes estados en los que puede estar un usuario: desconectado, conectado y activo, y conectado e inactivo.

El SDK de Realm añade automáticamente usuarios a un dispositivo al iniciar sesión por primera vez. Una vez que un usuario inicia sesión correctamente, se convierte inmediatamente en el usuario activo de la aplicación.

En el siguiente ejemplo, Joe inicia sesión en la aplicación y se convierte en el usuario activo. Luego, Emma inicia sesión y reemplaza a Joe como usuario activo:

val app = App.create(YOUR_APP_ID) // Replace with your App ID
runBlocking {
// Log in as Joe
val joeCredentials = Credentials.emailPassword(joeEmail, joePassword)
try {
val joe = app.login(joeCredentials)
// The active user is now Joe
val user = app.currentUser
Log.v("Successfully logged in. User state: ${joe.state}. Current user is now: ${user?.id}")
assertEquals(joe, user)
} catch (e: Exception) {
Log.e("Failed to log in: ${e.message}")
}
// Log in as Emma
val emmaCredentials = Credentials.emailPassword(emmaEmail, emmaPassword)
try {
val emma = app.login(emmaCredentials)
// The active user is now Emma
val user = app.currentUser
Log.v("Successfully logged in. User state: ${emma.state}. Current user is now: ${user?.id}")
assertEquals(emma, user)
} catch (e: Exception) {
Log.e("Failed to log in: ${e.message}")
}
}
Successfully logged in. User state: LOGGED_IN. Current user is now: 65133e130075a51f12a9e635
Successfully logged in. User state: LOGGED_IN. Current user is now: 65133e1357aaf22529343c1b

Puede recuperar el usuario activo actual mediante App.currentUser. Si varios usuarios han iniciado sesión, se devuelve el último usuario válido que inició sesión en el dispositivo. Este método devuelve null si no hay usuarios conectados.

val user = app.currentUser

Para obtener más información, consulta Recupera el usuario actual.

Puede acceder a un mapa de todas las cuentas de usuario conocidas almacenadas en el dispositivo mediante el método app.allUsers(). Este método devuelve todos los usuarios que han iniciado sesión en la aplicación cliente en un dispositivo determinado, independientemente de si están autenticados (el user.state es LOGGED_IN LOGGED_OUTo).

En el siguiente ejemplo, el SDK devuelve el user.id de Emma y Joe:

// Get all known users on device
val allUsers = app.allUsers()
for ((key) in allUsers) {
Log.v("User on Device $device: $key")
}
User on Device 651330cebe1d42b24b8d510f: 65133e1357aaf22529343c1b
User on Device 651330cebe1d42b24b8d510f: 65133e130075a51f12a9e635

Puedes cerrar la sesión de un usuario conectado en una aplicación mediante el método user.logOut(). Una vez cerrado, el usuario permanece en el dispositivo, pero debe volver a iniciar sesión para usar la aplicación.

En el siguiente ejemplo, Joe tiene la sesión iniciada como usuario actual. Tras cerrar la sesión de Joe en la aplicación, confirmamos que sigue registrado como usuario en el dispositivo y que Emma es ahora la usuaria actual:

try {
joe.logOut()
Log.v("Successfully logged out user. User state: ${joe.state}. Current user is now: ${app.currentUser?.id}")
} catch (e: Exception) {
Log.e("Failed to log out: ${e.message}")
}
val joeIsAUser = app.allUsers().containsKey(joe.id)
assertTrue(joeIsAUser)
Successfully logged out user. User state: LOGGED_OUT. Current user is now: 65133e1357aaf22529343c1b

Para obtener más información sobre cómo iniciar y cerrar sesión con un usuario en una aplicación, consulte Crear y autenticar usuarios - SDK de Kotlin.

Puedes eliminar activamente un usuario y toda su información de un dispositivo mediante user.remove(). Una vez eliminado, el usuario debe volver a autenticarse para volver a usar la aplicación. Esto no elimina el User objeto de la aplicación de Servicios de la aplicación.

En el siguiente ejemplo, Emma es la usuaria que ha iniciado sesión en el dispositivo (y la única). Tras eliminarla, confirmamos que Emma se ha eliminado del dispositivo y que no hay ningún usuario activo, ya que Joe sigue desconectado.

assertEquals(emma, app.currentUser)
try {
emma.remove()
Log.v("Successfully removed user. User state: ${emma.state}. Current user is now: ${app.currentUser?.id}")
} catch (e: Exception) {
Log.e("Failed to remove user: ${e.message}")
}
val emmaIsAUser = app.allUsers().containsKey(emma.id)
assertFalse(emmaIsAUser)
Successfully removed user. User state: REMOVED. Current user is now: null

Para obtener más información sobre cómo eliminar y eliminar usuarios, consulte Eliminar un usuario.

Volver

Crear y gestionar API keys de usuario

En esta página