Overview
Puedes almacenar datos de usuario personalizados arbitrarios sobre tus usuarios en realm. Por ejemplo, puedes almacenar el idioma preferido, la fecha de nacimiento o la zona horaria local de un usuario. Antes de escribir y leer estos datos, debes habilitar los datos de usuario personalizados en el backend. Para obtener más información, consulta Enable Custom User Data.
Importante
Para utilizar datos de usuario personalizados, primero debe habilitar datos de usuario personalizados.
To create, update, or delete custom user data, you will need the following information from your custom user data configuration:
El clúster de datos de usuario personalizado
The custom user data database
La colección en la que se almacenan los documentos de datos de usuario personalizados
The user ID field used to map custom user data documents to users (via user ID)
Puede encontrar esta información en la interfaz de usuario de App Services. En la barra lateral izquierda, haga clic en App Usersy luego seleccione la pestaña Custom User Data.
Leer los datos de usuario personalizados
Puede recuperar datos de usuario personalizados llamando al método GetCustomData() en el User objeto de un usuario conectado:
await user.RefreshCustomDataAsync(); // Tip: define a class that represents the custom data // and use the gerneic overload of GetCustomData<>() var customUserData = user.GetCustomData<CustomUserData>(); Console.WriteLine($"User has pets: {customUserData.HasPets}"); Console.WriteLine($"User's favorite color is {customUserData.FavoriteColor}"); Console.WriteLine($"User's timezone is {customUserData.LocalTimeZone}");
Advertencia
Custom Data May Be Stale
aplicación Services no actualiza, de manera dinámica, el valor de CustomData inmediatamente cuando los datos subyacentes cambian. En lugar de esto, App Services obtiene la versión más reciente de los datos de usuario personalizados cada vez que un usuario actualiza su access token o bien si llamas explícitamente al método RefreshCustomDataAsync(), que asegura que tu aplicación cuente con la información más actualizada de usuario personalizada.
Create a User's Custom User Data Document
To create custom user data for a user, create a MongoDB document in the custom user data collection. The user ID field of the document must contain the the user's user ID. The following example uses MongoDB Data Access to insert a document containing the user ID of the currently logged in user and several custom properties into the custom user data collection:
app = App.Create(myRealmAppId); user = await app.LogInAsync(Credentials.Anonymous()); mongoClient = user.GetMongoClient("mongodb-atlas"); dbTracker = mongoClient.GetDatabase("tracker"); userDataCollection = dbTracker.GetCollection<CustomUserData>("user_data"); var cud = new CustomUserData(user.Id) { FavoriteColor = "pink", LocalTimeZone = "+8", HasPets = true }; var insertResult = await userDataCollection.InsertOneAsync(cud);
You may find it helpful to create a C# class (POCO) that represents the custom user data object. The SDK will serialize/deserialize this class to and from BSON when writing, reading, and updating properties. The example above uses the following class to map the properties:
public class CustomUserData { public string _id { get; private set; } public string _partition { get; private set; } public string FavoriteColor { get; set; } public string LocalTimeZone { get; set; } public bool HasPets { get; set; } public CustomUserData(string id, string partition = "myPart") { this._id = id; this._partition = partition; } }
Update a User's Custom Data
Updating custom user data uses the same code as writing. The following example finds and updates the data by using the UpdateOneAsync() method, and then refreshes the data to ensure the latest changes are available:
var updateResult = await userDataCollection.UpdateOneAsync( new BsonDocument("_id", user.Id), new BsonDocument("$set", new BsonDocument("HasPets", false))); await user.RefreshCustomDataAsync(); var customUserData = user.GetCustomData<CustomUserData>(); Console.WriteLine($"User has pets: {customUserData.HasPets}"); Console.WriteLine($"User's favorite color is {customUserData.FavoriteColor}"); Console.WriteLine($"User's timezone is {customUserData.LocalTimeZone}");
Eliminar los datos personalizados de un usuario
La eliminación de datos de usuario personalizados se realiza de la misma manera que la escritura y actualización. El siguiente ejemplo busca y elimina los datos mediante el método DeleteOneAsync():
var deleteResult = await userDataCollection.DeleteOneAsync( new BsonDocument("_id", user.Id)); // The `DeletedCount` should be 1 Console.WriteLine(deleteResult.DeletedCount); // There should no longer be a custom user document for the user var customData = await userDataCollection.FindOneAsync( new BsonDocument("_id", user.Id)); Console.WriteLine(customData == null);