本页介绍 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文档中启用自定义用户数据
读取自定义用户数据
您可以使用User.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 Functions 是内置于后端应用中的服务器端 JavaScript 函数。 您可以直接从 Realm Kotlin SDK调用 Realm 函数 。
目前无法直接从 Realm Kotlin SDK 写入自定义用户数据。
从 Atlas Function 添加自定义用户数据没有单一的模式。 您应该编写一个或多个函数以适合应用程序的使用案例。
在此示例中,Realm 函数获取客户端传递的对象,并将其添加到 Atlas 的collection中。如果自定义用户数据尚不存在,则该函数将创建该数据;如果该数据存在,则该函数将替换其中的所有数据。
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 中删除自定义用户数据。
在此示例中,Realm 函数不需要任何参数。该函数使用函数上下文来确定调用者的用户 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")