Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ /

托管多用户应用程序 - Kotlin SDK

在此页面上

  • 用户账户
  • 用户状态
  • 向设备添加新用户
  • 检索活动用户
  • 列出设备上的所有用户
  • 注销用户
  • 从设备上删除用户

本页介绍如何使用 Kotlin SDK 在单个设备中托管多个 Atlas App Services 用户。要了解如何对用户进行身份验证并使其登录客户端应用程序,请参阅创建和身份验证用户 - Kotlin SDK。

Realm 允许多个用户在给定设备上同时登录应用。 即使多个用户同时登录,Realm 客户端应用程序也会在单个活动用户的上下文中运行。 一次只能有一个活动用户,并且该活动用户与所有传出请求相关联。

用户帐户代表应用程序的单个不同用户。 当用户首次成功进行身份验证并登录设备上的应用时, App Services会创建关联的唯一 User对象。 登录,SDK 会保存用户信息并追踪用户在设备上的状态。 即使用户注销,此数据仍会保留在设备上,除非您主动从设备删除用户。 有关App Services用户和用户帐户的详细信息,请参阅App Services文档中的用户帐户

用户在给定设备上的可能状态在Kotlin SDK中由user.state枚举表示。 用户帐户可以是LOGGED_OUTLOGGED_INREMOVED 。 下面描述了这些状态在任何给定时间如何与设备上的用户相对应:

  • 登录:已登录设备且未注销或已撤销会话的任何经过身份验证的用户。 user.stateLOGGED_IN 。 登录用户可以是:

    • Active :当前正在给定设备上使用该应用程序的单个经过身份验证的用户。 SDK 会将此用户与传出请求相关联,Atlas App Services 会评估数据访问权限并在此用户的上下文中运行函数。

    • 非活跃:所有经过身份验证但不是当前活跃用户的用户。

  • 注销:在设备上进行身份验证但已注销或会话已撤销的任何用户。 user.stateLOGGED_OUT

  • 删除:已从设备中主动删除的任何用户。 SDK 会将用户从应用程序中注销,并从设备中删除有关用户的所有信息。 用户必须重新进行身份验证才能再次使用该应用。 user.stateREMOVED

该图表概述了用户可能处于的不同状态:已注销、已登录和处于活动状态、已登录和非活动状态。

当用户首次登录设备时,Realm 软件开发工具包(Realm SDK)会自动将用户添加到该设备。用户成功登录后,将立即成为应用程序的活跃用户。

在以下示例中,Joe 登录应用并成为活跃用户。 然后,Emma 登录并取代 Joe 作为活动用户:

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

您可以使用App.currentUser检索当前活跃用户。 如果多个用户登录,则会返回最后登录设备的有效用户。 如果没有登录用户,此方法将返回null

val user = app.currentUser

有关详细信息,请参阅检索当前用户。

您可以使用app.allUsers()方法访问存储在设备上的所有已知用户帐户的映射。 此方法返回在给定设备上登录过客户端应用程序的所有用户,无论他们当前是否经过身份验证( user.stateLOGGED_INLOGGED_OUT )。

在以下示例中,SDK 返回 Emma 和 Joe 的user.id:

// 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

您可以使用user.logOut()将已登录用户从应用程序中注销 方法。 注销后,用户仍会存储在设备上,但必须重新登录才能使用该应用。

在以下示例中,Joe 当前以当前用户身份登录。 从应用程序注销 Joe 后,我们确认他仍以用户身份存储在设备上,并且 Emma 现在是当前用户:

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

有关用户登录和退出应用的更多信息,请参阅创建和验证用户 - Kotlin SDK。

您可以使用user.remove()从设备中主动删除用户以及有关该用户的所有信息。 删除后,用户必须重新进行身份验证才能再次使用该应用。 这不会从 App Services App 中删除User对象。

在以下示例中,Emma 是设备上当前(也是唯一)登录的用户。 删除 Emma 后,我们确认 Emma 已从设备中删除,并且没有当前用户,因为 Joe 仍处于注销状态:

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

有关移除和删除用户的更多信息,请参阅删除用户。

后退

创建和管理用户 API 密钥