自定义用户数据 - Flutter SDK
您可以使用Atlas App Services存储有关用户的任意自定义数据。 示例,您可以存储用户的首选语言、出生日期或当地时区。 在写入和读取此数据之前,您必须在后端启用自定义用户数据。 要学习;了解详情,请参阅启用自定义用户数据。
重要
目前,您只能使用 Flutter SDK读取自定义用户数据。 在 SDK 的未来更新中,您也将能够从 SDK 写入自定义用户数据。
您可以使用其他 Realm SDK 结合 Atlas Functions 或直接查询 Atlas 来创建、更新或删除自定义用户数据。
开始之前
要使用自定义用户数据,必须首先在 App Services 中启用自定义用户数据:
读取用户的自定义用户数据
final customUserData = user.customData;
当根本的数据发生变化时, App Services不会立即动态更新 User.customData
的值。 相反,每当用户刷新其 访问权限令牌 或显式调用 User.refreshCustomData() 时, App Services都会获取最新版本的自定义用户数据 ,确保您的应用拥有最新的自定义用户数据。
// refreshCustomData() returns the updated custom data object final updatedCustomData = await user.refreshCustomData(); // Now when you access User.customData it's the value // returned from User.refreshCustomData()
使用 Atlas Function 写入自定义用户数据
您可以使用 Atlas Function 写入自定义用户数据。 Atlas Functions 是内置于后端应用中的服务器端 JavaScript 函数。 您可以直接从 Realm Flutter SDK 调用 Atlas Function。
无法直接从 Realm Flutter SDK 写入自定义用户数据。
要了解有关 Atlas Function 的更多信息,请参阅以下文档:
Atlas 文档中的Atlas Function 。Atlas App Services
从 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; };
调用此函数的 Realm 软件开发工具包(Realm SDK)代码:
final user = app.currentUser!; final updatedTimestamp = DateTime.now().millisecondsSinceEpoch; final updatedCustomUserData = { "userId": user.id, "favoriteFood": "pizza", "lastUpdated": updatedTimestamp }; final functionResponse = await user.functions .call("writeCustomUserData", [updatedCustomUserData]); // Contains the `updatedCustomUserData` object just added // in the above Atlas Function call final customUserData = await user.refreshCustomData();