Gerenciar aplicativos de vários usuários - Kotlin SDK
Nesta página
Esta página descreve como managed vários usuários do Atlas App Services em um único dispositivo usando o Kotlin SDK. Para saber como autenticar e conectar usuários a um aplicativo cliente, consulte Criar e autenticar usuários - Kotlin SDK.
O Realm permite que vários usuários façam login em um aplicativo simultaneamente em um determinado dispositivo. A aplicação do cliente do Realm é executada no contexto de um único usuário ativo , mesmo que vários usuários estejam conectados simultaneamente. Só pode haver um usuário ativo por vez, e o usuário ativo está associado a todas as solicitações de saída.
Contas de Usuário
Uma conta de usuário representa um usuário único e distinto do seu aplicação. O App Services cria um objeto User
exclusivo associado quando um usuário pela primeira vez autentica e faz login em um aplicativo em um dispositivo. Após o login, o SDK salva as informações do usuário e controla o estado do usuário no dispositivo. Esses dados permanecem no dispositivo, mesmo que o usuário faça logout, a menos que você remova ativamente o usuário do dispositivo. Para obter mais informações sobre os usuários e contas de usuário do App Services, consulte Contas de usuário na documentação do App Services.
Estados do usuário
O possível estado de um usuário em um determinado dispositivo é representado no Kotlin SDK pelo enumeração user.state . Uma conta de usuário pode ser LOGGED_OUT
, LOGGED_IN
ou REMOVED
. O texto a seguir descreve como esses estados correspondem a um usuário no dispositivo a qualquer momento:
Conectado: qualquer usuário autenticado que tenha conectado ao dispositivo e não se desconectou nem teve a sessão revogada. O
user.state
éLOGGED_IN
. Um usuário conectado pode ser:Ativo: um único usuário autenticado que está usando o aplicativo atualmente em um determinado dispositivo. O SDK associa este usuário com solicitações de saída, e o Atlas App Services avalia permissões de acesso aos dados e executa funções no contexto deste usuário.
Inativo: todos os usuários autenticados que não são o usuário ativo atual.
Desconectado: qualquer usuário que tenha se autenticado no dispositivo, mas que tenha se desconectado ou tido sua sessão revogada. O
user.state
éLOGGED_OUT
.Removido: qualquer usuário que tenha sido removido ativamente do dispositivo. O SDK desconecta o usuário do aplicativo e remove todas as informações sobre o usuário do dispositivo. O usuário deve se autenticar novamente para usar o aplicativo novamente. O
user.state
éREMOVED
.
Adicionar um novo usuário ao dispositivo
O Realm SDK adiciona automaticamente os usuários a um dispositivo quando eles fazem login pela primeira vez nesse dispositivo. Depois que um usuário faz login com êxito, ele se torna imediatamente o usuário ativo do aplicativo.
No exemplo a seguir, Joe faz login no aplicativo e se torna o usuário ativo. Em seguida, Emma faz login e substitui Joe como o usuário ativo:
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
Recuperar usuário ativo
Você pode recuperar o usuário ativo atual usando App.currentUser. Se vários usuários estiverem conectados, isso retornará o último usuário válido que fez logon no dispositivo. Este método retorna null
se não houver usuários conectados.
val user = app.currentUser
Para obter mais informações, consulte Recuperar usuário atual.
Listar todos os usuários no dispositivo
Você pode acessar um mapa de todas as contas de usuário conhecidas armazenadas no dispositivo usando o método app.allUsers() . Esse método retorna todos os usuários que fizeram logon no aplicativo cliente em um determinado dispositivo, independentemente de estarem autenticados no momento (o user.state
é LOGGED_IN
ou LOGGED_OUT
).
No exemplo a seguir , o SDK retorna o user.id de Ema e 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
Desconectar um usuário
Você pode desconectar um usuário conectado de um aplicativo usando o user.logOut() método. Uma vez desconectado, o usuário ainda está armazenado no dispositivo, mas deve fazer login novamente para usar o aplicativo.
No exemplo a seguir, Joe está atualmente conectado como o usuário atual. Depois de desconectarmos Joe do aplicativo, confirmamos que ele ainda está armazenado no dispositivo como usuário e que Emma agora é a usuário atual:
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 obter mais informações sobre como conectar e desconectar um usuário de um aplicativo, consulte Criar e autenticar usuários - Kotlin SDK.
Remover um usuário do dispositivo
Você pode remover ativamente um usuário e todas as informações sobre esse usuário de um dispositivo usando user.remove(). Depois de removido, o usuário deve se autenticar novamente para usar o aplicativo novamente. Isso não exclui o objeto User
do App Services App.
No exemplo a seguir, Emma é o usuário atual (e único) conectado ao dispositivo. Depois de removê-la, confirmamos que Emma foi removida do dispositivo e que não há nenhum usuário atual, pois Joe ainda está 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 obter mais informações sobre como remover e excluir usuários, consulte Remover um usuário.