托管自定义用户数据 - 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文档中启用自定义用户数据
读取自定义用户数据
您可以使用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")