自定义用户数据 - 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 Sync 、 MongoDB Compass或MongoDB 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}") } }