カスタムユーザーデータ - Java SDK
Java アプリケーション内でカスタム ユーザー データと呼ばれるアプリケーション ユーザーに関する任意のデータを直接読み取ることができます。 たとえば、ユーザーの希望言語、誕生日、ローカル タイムゾーン を保存できます。 カスタム ユーザー データの詳細については、「 カスタム ユーザー データの有効化 」を参照してください。
重要
カスタム ユーザー データを使用するには、まずカスタム ユーザー データを有効にする 必要があります。
ユーザーのカスタム データの読み取り
現在ログインしているユーザーのカスタム ユーザー データは、そのユーザーの User
オブジェクトを通じて読み取ることができます。 User
オブジェクトを使用してカスタムユーザー データを編集することはできません。 カスタム ユーザー データを編集するには、「カスタム ユーザー データの更新」を参照してください。 データにアクセスするには、 Use.customData() メソッドを ログイン ユーザーのUser
オブジェクトのメソッドを使用します。
Credentials anonymousCredentials = Credentials.anonymous(); app.loginAsync(anonymousCredentials, it -> { if (it.isSuccess()) { Log.v("EXAMPLE", "Successfully authenticated anonymously."); User user = app.currentUser(); Document customUserData = user.getCustomData(); Log.v("EXAMPLE", "Fetched custom user data: " + customUserData); } else { Log.e("EXAMPLE", it.getError().toString()); } });
val anonymousCredentials: Credentials = Credentials.anonymous() app.loginAsync(anonymousCredentials) { if (it.isSuccess) { Log.v("EXAMPLE", "Successfully authenticated anonymously.") val user = app.currentUser() val customUserData : Document? = user?.customData Log.v("EXAMPLE", "Fetched custom user data: $customUserData") } else { Log.e("EXAMPLE", it.error.toString()) } }
警告
カスタム データは古い可能性があります
Atlas App Services は、基礎となるデータが変更されたときにすぐにUser.customData()の値を動的に更新しません。 代わりに、ユーザーがアクセス トークンを更新するたびに、App Services は最新バージョンのカスタム ユーザー データを取得します。これは、App Services バックエンドにアクセスするほとんどの SDK 操作中に発生します。 Realm は30分ごとにアクセス トークンを更新するため、カスタム ユーザー データは30分以上古くなることはありません。
最新バージョンのカスタム ユーザー データが必要な場合は、 User.refreshCustomData() メソッドを使用して、ユーザーのカスタム データの最新バージョンをリクエストします。
ユーザーのカスタム データ ドキュメントの作成
Tip
カスタム ユーザー データを作成、更新、または削除するには、カスタム ユーザー データ構成の次の情報が必要です。
カスタムユーザーデータクラスター
カスタムユーザーデータベース
カスタムユーザーデータドキュメントが保存される カスタムユーザーデータコレクション
カスタムユーザーデータドキュメントをユーザーにマッピングするために使用されるID ID )
この情報は、App Services UI の App Usersページの [ Custom User Data ] タブで確認できます。
ユーザーのカスタム ユーザー データを作成するには、カスタム ユーザー データ コレクションに MongoDB ドキュメントを作成します。 ドキュメントの ユーザー ID フィールドには、ユーザーのユーザー ID が含まれている必要があります。 次の例では、 MongoDB Data Accessを使用して、現在ログインしているユーザーのユーザー ID とfavoriteColor
値を含むドキュメントをカスタム ユーザー データ コレクションに挿入します。
Credentials credentials = Credentials.anonymous(); app.loginAsync(credentials, it -> { if (it.isSuccess()) { User user = app.currentUser(); MongoClient mongoClient = user.getMongoClient("mongodb-atlas"); // service for MongoDB Atlas cluster containing custom user data MongoDatabase mongoDatabase = mongoClient.getDatabase("custom-user-data-database"); MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("custom-user-data-collection"); mongoCollection.insertOne( new Document("user-id-field", user.getId()).append("favoriteColor", "pink").append("_partition", "partition")) .getAsync(result -> { if (result.isSuccess()) { Log.v("EXAMPLE", "Inserted custom user data document. _id of inserted document: " + result.get().getInsertedId()); } else { Log.e("EXAMPLE", "Unable to insert custom user data. Error: " + result.getError()); } }); } else { Log.e("EXAMPLE", "Failed to log in anonymously:" + it.getError().toString()); } });
val anonymousCredentials: Credentials = Credentials.anonymous() app.loginAsync(anonymousCredentials) { if (it.isSuccess) { val user = app.currentUser() val mongoClient : MongoClient = user?.getMongoClient("mongodb-atlas")!! // service for MongoDB Atlas cluster containing custom user data val mongoDatabase : MongoDatabase = mongoClient.getDatabase("custom-user-data-database")!! val mongoCollection : MongoCollection<Document> = mongoDatabase.getCollection("custom-user-data-collection")!! mongoCollection.insertOne(Document("user-id-field", user.id).append("favoriteColor", "pink").append("_partition", "partition")) .getAsync { result -> if (result.isSuccess) { Log.v("EXAMPLE", "Inserted custom user data document. _id of inserted document: ${result.get().insertedId}") } else { Log.e("EXAMPLE", "Unable to insert custom user data. Error: ${result.error}") } } } else { Log.e("EXAMPLE", "Failed to log in anonymously: ${it.error}") } }
カスタム ユーザー データ ドキュメントの作成時に、任意の数のフィールドと値を追加できます。 ユーザー ID フィールドは、ドキュメントがカスタム ユーザー データとしてUser
オブジェクトで使用可能になるための 唯一 の要件です。
ユーザーのカスタム データの更新
MongoDB Data Access 、 Realm Sync 、 MongoDB Compass 、またはMongoDB Atlas Data Explorer を使用してカスタム ユーザー データをアップデートできます。
MongoDB Data Access を使用してユーザーのカスタム ユーザー データを更新するには、ユーザーのユーザー ID がユーザーのユーザー ID フィールドに含まれる MongoDB ドキュメントを編集します。
Tip
ユーザーの ID を確認するには、 App Users User.id
プロパティにアクセスするか、App Services UI で [] ページの [ Users ] タブでユーザーを見つけます。
次の例ではMongoDB Data Accessを使用して、カスタム ユーザー データ コレクション内の現在ログインしているユーザーのユーザー ID を含むドキュメントのfavoriteColor
フィールドを更新します。
Credentials credentials = Credentials.anonymous(); app.loginAsync(credentials, it -> { if (it.isSuccess()) { User user = app.currentUser(); MongoClient mongoClient = user.getMongoClient("mongodb-atlas"); // service for MongoDB Atlas cluster containing custom user data MongoDatabase mongoDatabase = mongoClient.getDatabase("custom-user-data-database"); MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("custom-user-data-collection"); mongoCollection.updateOne( new Document("user-id-field", user.getId()), new Document("favoriteColor", "cerulean")) .getAsync(result -> { if (result.isSuccess()) { if (result.get().getModifiedCount() == 1L) { Log.v("EXAMPLE", "Updated custom user data document."); } else { Log.v("EXAMPLE", "Could not find custom user data document to update."); } } else { Log.e("EXAMPLE", "Unable to insert custom user data. Error: " + result.getError()); } }); } else { Log.e("EXAMPLE", "Failed to log in anonymously:" + it.getError().toString()); } });
val anonymousCredentials: Credentials = Credentials.anonymous() app.loginAsync(anonymousCredentials) { if (it.isSuccess) { val user = app.currentUser() val mongoClient : MongoClient = user?.getMongoClient("mongodb-atlas")!! // service for MongoDB Atlas cluster containing custom user data val mongoDatabase : MongoDatabase = mongoClient.getDatabase("custom-user-data-database")!! val mongoCollection : MongoCollection<Document> = mongoDatabase.getCollection("custom-user-data-collection")!! mongoCollection.updateOne(Document("user-id-field", user.id), Document("favoriteColor", "cerulean")) .getAsync { result -> if (result.isSuccess) { if (result.get().modifiedCount == 1L) { Log.v("EXAMPLE", "Updated custom user data document.") } else { Log.v("EXAMPLE", "Could not find custom user data document to update.") } } else { Log.e("EXAMPLE", "Unable to update custom user data. Error: ${result.error}") } } } else { Log.e("EXAMPLE", "Failed to log in anonymously: ${it.error}") } }