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

自定义用户数据 - Java SDK

在此页面上

  • 读取用户的自定义数据
  • 创建用户的自定义数据文档
  • 更新用户的自定义数据

您可以直接在 Java应用程序中读取有关应用程序用户的任意数据(称为自定义用户数据)。 示例,您可以存储用户的首选语言、出生日期或当地时区。 要学习;了解有关自定义用户数据的详情,请参阅启用自定义用户数据。

重要

要使用自定义用户数据,必须首先启用自定义用户数据。

您可以通过当前登录用户的 User对象读取该用户的自定义用户数据。 您无法通过User对象编辑自定义用户数据。 要编辑自定义用户数据,请参阅更新自定义用户数据。 要访问权限数据,请调用User.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()的值。 相反,每当用户刷新其 访问令牌 时,Atlas App Services 都会获取最新版本的自定义用户数据,这发生在大多数联系Atlas App Services 后端的 SDK 操作期间。Realm 每30分钟刷新一次访问令牌,因此自定义用户数据的过期时间不会超过30分钟。

如果需要最新版本的自定义用户数据,请使用User.refreshCustomData() 方法请求最新版本的用户自定义数据。

提示

要创建、更新或删除自定义用户数据,您需要从自定义用户数据配置中获取以下信息:

  • 自定义用户数据集群

  • 自定义用户数据数据库

  • 存储自定义用户数据文档的自定义用户数据集合

  • 用于将自定义用户数据文档映射到用户的用户 ID 字段(通过用户 ID)

您可以在 App Services 用户界面的Custom User Data标签页下的 App Users页面上找到此信息。

要为用户创建自定义用户数据,请在自定义用户数据集合中创建 MongoDB 文档。 文档的用户 ID 字段应包含用户的用户 ID。 以下示例使用MongoDB 数据访问将包含当前登录用户的用户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 SyncMongoDB CompassMongoDB Atlas Data Explorer 更新自定义用户数据。

要使用 MongoDB 数据访问更新用户的自定义用户数据,请编辑其用户 ID 字段包含该用户的用户 ID 的 MongoDB 文档。

提示

要确定用户的 ID,请访问User.id属性或在Users标签页下App Users页面上的 App Services 用户界面中查找该用户。

以下示例使用MongoDB 数据访问来更新包含collection中当前登录用户的用户 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}")
}
}

后退

验证用户身份