Docs Menu
Docs Home
/ /
Atlas Device SDK
/ /

マルチユーザー アプリケーションの管理 - Kotlin SDK

項目一覧

  • ユーザー アカウント
  • ユーザー状態
  • デバイスへの新しいユーザーの追加
  • アクティブ ユーザーの取得
  • デバイス上のすべてのユーザーを一覧表示
  • ユーザーのログアウト
  • デバイスからユーザーを削除

このページでは、 Kotlin SDK を使用して 1 つのデバイス内で複数の Atlas App Services ユーザーを管理する方法について説明します。 ユーザーを認証してクライアント アプリにログインする方法については、「ユーザーの作成と認証 - Kotlin SDK 」を参照してください。

Realm を使用すると、複数のユーザーが特定のデバイスで同時にアプリにログインできます。 Realm クライアント アプリケーションは、複数のユーザーが同時にログインしている場合でも、単一のアクティブ ユーザーのコンテキストで実行されます。 一度に アクティブなユーザーは 1 人だけであり、アクティブなユーザーはすべての送信リクエストに関連付けられます。

ユーザー・アカウントは、アプリケーションの単一のユーザーを表します。 Atlas App Services は、ユーザーが初めて認証を行い、デバイス上のアプリにログインすると、関連付けられた一意の Userオブジェクトを作成します。 ログイン後、SDK はユーザーの情報を保存し、デバイス上のユーザーの状態を追跡します。 このデータは、ユーザーがログアウトした場合でも、デバイスからユーザーをアクティブに削除しない限り、デバイス上に残ります。 App Services ユーザーとユーザー アカウントの詳細については、App Services ドキュメントの「 ユーザー アカウント」を参照してください。

特定のデバイスにおけるユーザーの可能な状態は、 Kotlin SDK ではuser.rate列挙型によって表されます。 ユーザー アカウントは、 LOGGED_OUTLOGGED_IN 、またはREMOVEDです。 次では、これらの状態が常にオンデバイス ユーザーにどのように対応するかを示します。

  • ログイン: デバイスにログインし、ログアウトしたり、セッションを取り消したりしていない認証済みユーザー。 user.stateLOGGED_INです。 ログイン ユーザーは、次のいずれかになります。

    • アクティブ: 特定のデバイスで現在アプリを使用している単一の認証済みユーザー。 SDK はこのユーザーを送信リクエストに関連付け、Atlas App Services はデータアクセス権限を評価し、このユーザーのコンテキストで関数を実行します。

    • 非アクティブ: 現在アクティブなユーザーではない、すべての認証済みユーザー。

  • ログアウト: デバイスで認証されたが、ログアウトされたか、セッションが取り消されたユーザー。 user.stateLOGGED_OUTです。

  • 削除: デバイスからアクティブに削除されたユーザー。 SDK はユーザーをアプリからログアウトさせ、ユーザーに関するすべての情報をデバイスから削除します。 アプリを再度使用するには、ユーザーは再認証を行う必要があります。 user.stateREMOVEDです。

以下の図では、ログアウト、ログインしてアクティブ、ログインして非アクティブのさまざまな状態について説明しています。

Realm SDK は、ユーザーがそのデバイスに初めてログインするときに、そのデバイスにユーザーを自動的に追加します。 ユーザーは正常にログインすると、すぐにアプリケーションのアクティブ ユーザーになります。

次の例では、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_INまたはLOGGED_OUTであるかどうかに関係なく、特定のデバイス上のクライアント アプリにログインしたすべてのユーザーを返します。

次の例では、SDK は Enma と 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 をアプリからログアウトした後も、ジョブがユーザーとしてデバイスに保存され、エマが現在のユーザーになったことを確認します。

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オブジェクトを削除しません

次の例では、Ema は、デバイス上の現在(のみ)のログインユーザーです。 ユーザーがデバイスから削除されていること、および 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 キーの作成と管理