Puede leer datos arbitrarios sobre los usuarios de su aplicación, conocidos como datos de usuario personalizados, directamente en su aplicación Java. Por ejemplo, puede almacenar el idioma preferido, la fecha de nacimiento o la zona horaria local de un usuario. Para obtener más información sobre los datos de usuario personalizados, consulte Habilitar datos de usuario personalizados.
Importante
Para utilizar datos de usuario personalizados, primero debe habilitar datos de usuario personalizados.
Leer los datos personalizados de un usuario
Puede leer los datos de usuario personalizados de un usuario que haya iniciado sesión actualmente a través del perfil de ese usuario. User Objeto. No se pueden editar datos de usuario personalizados mediante un User objeto. Para editar datos de usuario personalizados, consulte Actualizar datos de usuario personalizados. Para acceder a los datos, llame al método User.customData() en el User objeto de un usuario conectado:
Credentials anonymousCredentials = Credentials.anonymous(); app.loginAsync(anonymousCredentials, it -> { if (it.isSuccess()) { Log.v("EXAMPLE", "Successfully authenticated anonymously."); User user = app.currentUser(); Document customUserData = user.getCustomData(); Log.v("EXAMPLE", "Fetched custom user data: " + customUserData); } else { Log.e("EXAMPLE", it.getError().toString()); } });
val anonymousCredentials: Credentials = Credentials.anonymous() app.loginAsync(anonymousCredentials) { if (it.isSuccess) { Log.v("EXAMPLE", "Successfully authenticated anonymously.") val user = app.currentUser() val customUserData : Document? = user?.customData Log.v("EXAMPLE", "Fetched custom user data: $customUserData") } else { Log.e("EXAMPLE", it.error.toString()) } }
Advertencia
Los datos personalizados pueden estar obsoletos
Atlas App Services no actualiza dinámicamente el valor de User.customData() inmediatamente cuando cambian los datos subyacentes. En su lugar, App Services obtiene la versión más reciente de los datos de usuario personalizados cada vez que un usuario actualiza su token de acceso, lo que ocurre durante la mayoría de las operaciones del SDK que contactan con el backend de App Services. Realm actualiza los tokens de acceso cada 30 minutos, por lo que los datos de usuario personalizados pueden estar obsoletos durante un máximo de 30 minutos.
Si necesita la versión más reciente de los datos de usuario personalizados, utilice el método User.refreshCustomData() para solicitar la última versión de los datos personalizados de un usuario.
Crear un documento de datos personalizado de un usuario
Tip
Para crear, actualizar o eliminar datos de usuario personalizados, necesitará la siguiente información de su configuración de datos de usuario personalizados:
el clúster de datos de usuario personalizado
la base de datos de usuario personalizada
La recopilación de datos de usuario personalizados en la que se almacenan los documentos de datos de usuario personalizados
El campo de ID de usuario utilizado para asignar documentos de datos de usuario personalizados a los usuarios (a través de ID de usuario)
Puede encontrar esta información en la interfaz de usuario de App Services en la App Users página bajo la pestaña Custom User Data.
Para crear datos de usuario personalizados, cree un documento de MongoDB en la colección de datos de usuario personalizada. El campo "ID de usuario" del documento debe contener el ID del usuario. El siguiente ejemplo utiliza MongoDB Data Access para insertar un documento que contiene el ID del usuario conectado y un favoriteColor valor en la colección de datos de usuario personalizada:
Credentials credentials = Credentials.anonymous(); app.loginAsync(credentials, it -> { if (it.isSuccess()) { User user = app.currentUser(); MongoClient mongoClient = user.getMongoClient("mongodb-atlas"); // service for MongoDB Atlas cluster containing custom user data MongoDatabase mongoDatabase = mongoClient.getDatabase("custom-user-data-database"); MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("custom-user-data-collection"); mongoCollection.insertOne( new Document("user-id-field", user.getId()).append("favoriteColor", "pink").append("_partition", "partition")) .getAsync(result -> { if (result.isSuccess()) { Log.v("EXAMPLE", "Inserted custom user data document. _id of inserted document: " + result.get().getInsertedId()); } else { Log.e("EXAMPLE", "Unable to insert custom user data. Error: " + result.getError()); } }); } else { Log.e("EXAMPLE", "Failed to log in anonymously:" + it.getError().toString()); } });
val anonymousCredentials: Credentials = Credentials.anonymous() app.loginAsync(anonymousCredentials) { if (it.isSuccess) { val user = app.currentUser() val mongoClient : MongoClient = user?.getMongoClient("mongodb-atlas")!! // service for MongoDB Atlas cluster containing custom user data val mongoDatabase : MongoDatabase = mongoClient.getDatabase("custom-user-data-database")!! val mongoCollection : MongoCollection<Document> = mongoDatabase.getCollection("custom-user-data-collection")!! mongoCollection.insertOne(Document("user-id-field", user.id).append("favoriteColor", "pink").append("_partition", "partition")) .getAsync { result -> if (result.isSuccess) { Log.v("EXAMPLE", "Inserted custom user data document. _id of inserted document: ${result.get().insertedId}") } else { Log.e("EXAMPLE", "Unable to insert custom user data. Error: ${result.error}") } } } else { Log.e("EXAMPLE", "Failed to log in anonymously: ${it.error}") } }
Puede agregar cualquier número de campos y valores arbitrarios al documento de datos de usuario personalizados al crearlo. El campo de ID de usuario es el único requisito para que el documento esté disponible en el objeto User como datos de usuario personalizados.
Actualizar los datos personalizados de un usuario
Puede actualizar datos de usuario personalizados utilizando MongoDB Data Access, Realm Sync, MongoDB Compass o MongoDB Atlas Data Explorer.
Para actualizar los datos de usuario personalizados de un usuario con MongoDB Data Access, edite el documento MongoDB cuyo campo de ID de usuario contiene el ID de usuario del usuario.
Tip
Para determinar el ID de un usuario, acceda a la propiedad User.id o busque al usuario en la interfaz de usuario de App Services en la página App Users bajo la pestaña Users.
El siguiente ejemplo utiliza MongoDB Data Access para actualizar el favoriteColor campo del documento que contiene el ID de usuario del usuario actualmente conectado en la colección de datos de usuario personalizada:
Credentials credentials = Credentials.anonymous(); app.loginAsync(credentials, it -> { if (it.isSuccess()) { User user = app.currentUser(); MongoClient mongoClient = user.getMongoClient("mongodb-atlas"); // service for MongoDB Atlas cluster containing custom user data MongoDatabase mongoDatabase = mongoClient.getDatabase("custom-user-data-database"); MongoCollection<Document> mongoCollection = mongoDatabase.getCollection("custom-user-data-collection"); mongoCollection.updateOne( new Document("user-id-field", user.getId()), new Document("favoriteColor", "cerulean")) .getAsync(result -> { if (result.isSuccess()) { if (result.get().getModifiedCount() == 1L) { Log.v("EXAMPLE", "Updated custom user data document."); } else { Log.v("EXAMPLE", "Could not find custom user data document to update."); } } else { Log.e("EXAMPLE", "Unable to insert custom user data. Error: " + result.getError()); } }); } else { Log.e("EXAMPLE", "Failed to log in anonymously:" + it.getError().toString()); } });
val anonymousCredentials: Credentials = Credentials.anonymous() app.loginAsync(anonymousCredentials) { if (it.isSuccess) { val user = app.currentUser() val mongoClient : MongoClient = user?.getMongoClient("mongodb-atlas")!! // service for MongoDB Atlas cluster containing custom user data val mongoDatabase : MongoDatabase = mongoClient.getDatabase("custom-user-data-database")!! val mongoCollection : MongoCollection<Document> = mongoDatabase.getCollection("custom-user-data-collection")!! mongoCollection.updateOne(Document("user-id-field", user.id), Document("favoriteColor", "cerulean")) .getAsync { result -> if (result.isSuccess) { if (result.get().modifiedCount == 1L) { Log.v("EXAMPLE", "Updated custom user data document.") } else { Log.v("EXAMPLE", "Could not find custom user data document to update.") } } else { Log.e("EXAMPLE", "Unable to update custom user data. Error: ${result.error}") } } } else { Log.e("EXAMPLE", "Failed to log in anonymously: ${it.error}") } }