自定义用户数据 - React Native SDK
Atlas Device SDK 已弃用。 有关详细信息,请参阅弃用页面。
您可以直接在 React Native 应用程序中读取有关应用程序用户的任意数据(称为自定义用户数据)。 例如,您可以存储用户的首选语言、出生日期或当地时区。
先决条件
在使用React Native应用中的自定义用户数据之前,必须在App Services App中启用它。 要学习;了解详情,请参阅启用自定义用户数据。
读取自定义用户数据
警告
自定义数据可能已过时
如果底层文档发生更改,App Services 不会动态更新用户的自定义数据。相反,只要用户刷新其访问令牌(例如登录时),App Services 都会获取新的数据副本。这可能意味着自定义数据不会立即反映更改内容,例如:来自身份验证触发器的更新。如果未刷新令牌,SDK 将等待30分钟,并在下一次调用后端时刷新令牌,这可能导致自定义用户数据滞后 30 分钟加上 SDK 下一次调用后端之前的时间。
如果您最近没有更新自定义用户数据,请使用用户对象的customData字段。 customData
字段为只读。
如果您在过去30分钟内更新了自定义用户数据,请使用User.refreshCustomData()。
import React, {useState, useEffect} from 'react'; import {useApp, useUser} from '@realm/react'; function ReadCustomUserData() { const user = useUser(); const [customUserData, setCustomUserData] = useState(); // Access current custom user data with `user.customData` function readCurrentCustomUserData() { setCustomUserData(user.customData); } // Refresh custom user data with `user.refreshCustomData()` async function refreshCustomUserData() { const data = await user.refreshCustomData(); setCustomUserData(data); } // ... }
写入自定义用户数据
您可以使用MongoDB 数据访问写入用户的自定义用户数据。
您的写入操作必须在 用户 ID 字段 中包含您在应用后端配置自定义用户数据时设置的 User.id。如果您不在“用户 ID 字段”中包含用户 ID,则您写入的数据将不会链接到该用户的自定义用户数据。
import React, {useEffect} from 'react'; import {useApp, useUser} from '@realm/react'; function WriteCustomUserData() { const user = useUser(); async function writeCustomUserData(favoriteColor: string) { const customUserDataCollection = user .mongoClient('mongodb-atlas') .db('custom-user-data-database') .collection('custom-user-data'); const filter = { userId: user.id, // Query for the user object of the logged in user }; const updateDoc = { $set: { // Set User ID if it's not already set userId: user.id, // Set the logged in user's favorite color favoriteColor, }, }; const options = {upsert: true}; await customUserDataCollection.updateOne(filter, updateDoc, options); // Refresh custom user data once it's been updated on the server const customUserData = await user.refreshCustomData(); console.log(customUserData); } // ... }
注意
要通过客户端或用户函数修改自定义数据字段,必须配置对存储自定义数据的集合的写入权限。 如果您希望限制客户端对应用程序中自定义数据的写入权限,您仍然可以通过系统函数修改该对象。