マルチユーザー アプリケーションの管理 - 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_OUT
、 LOGGED_IN
、またはREMOVED
です。 次では、これらの状態が常にオンデバイス ユーザーにどのように対応するかを示します。
ログイン: デバイスにログインし、ログアウトしたり、セッションを取り消したりしていない認証済みユーザー。
user.state
はLOGGED_IN
です。 ログイン ユーザーは、次のいずれかになります。アクティブ: 特定のデバイスで現在アプリを使用している単一の認証済みユーザー。 SDK はこのユーザーを送信リクエストに関連付け、Atlas App Services はデータアクセス権限を評価し、このユーザーのコンテキストで関数を実行します。
非アクティブ: 現在アクティブなユーザーではない、すべての認証済みユーザー。
ログアウト: デバイスで認証されたが、ログアウトされたか、セッションが取り消されたユーザー。
user.state
はLOGGED_OUT
です。削除: デバイスからアクティブに削除されたユーザー。 SDK はユーザーをアプリからログアウトさせ、ユーザーに関するすべての情報をデバイスから削除します。 アプリを再度使用するには、ユーザーは再認証を行う必要があります。
user.state
はREMOVED
です。
デバイスへの新しいユーザーの追加
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.state
がLOGGED_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
ユーザーの削除と削除の詳細については、「 ユーザーの削除 」を参照してください。