カスタムユーザーデータの管理 - Kotlin SDK
このページでは、App Services App 内のカスタム ユーザー データと、Realm Kotlin SDK を使用してそれを管理する方法について説明します。
重要
現在、 Kotlin SDK でカスタム ユーザー データのみを読み取ることができます。 SDK への将来のアップデートでは、SDK からカスタム ユーザー データも書き込むことができるようになります。
他の Realm SDK、Atlas Functions、または Atlas を直接クエリすることで、カスタム ユーザー データを作成、アップデート、削除できます。
Atlas App Services を使用すると、ユーザーの希望する言語、誕生日、ローカル タイムゾーンなどの認証済みユーザーにデータを関連付けることができます。 ユーザーに関するこの任意のカスタム ユーザー データを保存し、クライアント アプリケーションから読み取ることができます。
バージョン 1.9.0 の新機能。
EJSON エンコードを使用してカスタム ユーザー データを直列化できます。 例を含む詳細については、 「 Atlas 用の EJSON エンコーディング 」を参照してください。
前提条件
カスタム ユーザー データを使用するには、カスタム ユーザー データが有効になっている App Services App が必要です。
カスタム ユーザー データを使用するApp Services Appを設定するには、次の手順を参照してください。
App Services のドキュメントでの「カスタム ユーザー データの有効化」
カスタムユーザーデータの読み取り
ユーザー.customDataAsBsonDocument() メソッドを使用して、現在ログインしているユーザーのカスタム ユーザー データを検索できます 拡張関数は次のとおりです。
val user = app.currentUser!! val customUserData = user.customDataAsBsonDocument()
Atlas App Services は、基礎となるデータが変更されたときにすぐに、クライアント側のユーザー カスタム データ ドキュメントの値を動的に更新しません。 代わりに、ユーザーがアクセス トークンを更新するたび、またはUser.refreshCustomData() メソッドを明示的に呼び出すと、App Services は最新バージョンのカスタム ユーザー データを取得します。 関数を使用して、ユーザーのカスタム データの最新バージョンをリクエストします。
// Update the custom data object user.refreshCustomData() // Now when you access the custom data, it's the // updated data object val updatedUserData = user.customDataAsBsonDocument()
Atlas Function を使用したカスタムユーザー データの書込み
Atlas Function を使用してカスタムユーザーデータに書込むことができます。 Atlas Function は、バックエンド アプリに構築されるサーバーサイドの JavaScript 関数です。 Atlas Function は Realm Kotlin SDK から直接呼び出せます。
現在、Realm Kotlin SDK からカスタム ユーザー データに直接書き込むことはできません。
Atlas Function からカスタム ユーザー データを追加するための単一パターンはありません。 アプリケーションのユースケースに合わせて関数を記述する必要があります。
この例では、Atlas Function はクライアントによって渡されたオブジェクトを受け取り、Atlas のカスタムユーザーデータコレクションに追加されます。 関数は、カスタム ユーザー データがまだ存在しない場合はそれを作成し、存在する場合はその中のすべてのデータを置き換えます。
exports = async function writeCustomUserData(newCustomUserData) { const userId = context.user.id; const customUserDataCollection = context.services .get("mongodb-atlas") .db("custom-user-data-database") .collection("custom-user-data"); const filter = { userId }; // Replace the existing custom user data document with the new one const update = { $set: newCustomUserData }; // Insert document if it doesn't already exist const options = { upsert: true }; const res = await customUserDataCollection.updateOne(filter, update, options); return res; };
この関数を呼び出すための Kotlin SDK コード:
// Write the custom user data through a call // to the `writeCustomUserData` function val functionResponse = user.functions .call<BsonDocument>("writeCustomUserData", mapOf("userId" to user.id, "favoriteColor" to "blue") ) // Refreshed custom user data contains updated // `favoriteColor` value added in above Atlas Function call user.refreshCustomData() val updatedUserData = user.customDataAsBsonDocument()
注意
Atlas Function の詳細については、次のドキュメントを参照してください。
App Services ドキュメントの「 Atlas Function 」
Atlas Function によるカスタム データの削除
カスタム ユーザー データは、ユーザーオブジェクトにリンクされたドキュメントに保存されます。
重要
ユーザー を削除しても、カスタム ユーザー データは削除されませ ん 。法へのコンプライアンスを確保するために、ユーザー データを完全に削除する必要がある場合があります(例: Apple のアカウント削除要件 )。
カスタム ユーザー データを削除するには、ユーザーのカスタム データ ドキュメントを手動で削除する必要があります。
Atlas Function を使用してカスタムユーザーデータを削除できます。 現在、Realm Kotlin SDK からカスタム ユーザー データを直接削除することはできません。
この例では、Atlas Function は引数を必要としません。 この関数は、 関数コンテキスト を使用して呼び出し元のユーザー ID を判断し、ユーザーの ID と一致するカスタム ユーザー データ ドキュメントを削除します。
exports = async function deleteCustomUserData() { const userId = context.user.id; const customUserDataCollection = context.services .get("mongodb-atlas") .db("custom-user-data-database") .collection("custom-user-data"); const filter = { userId }; const res = await customUserDataCollection.deleteOne(filter); return res; };
この関数を呼び出す Kotlin SDK コードでは、関数を呼び出すためにログイン ユーザーのみが必要です。
val deleteResponse = user.functions .call<BsonDocument>("deleteCustomUserData")