Dados personalizados do usuário - SDK Java
Nesta página
Você pode ler dados arbitrários sobre seus usuários de aplicação , conhecidos como dados de usuário personalizados, diretamente dentro do aplicação Java . Por exemplo, você pode armazenar o idioma preferido do usuário, a data de nascimento ou o fuso horário local. Para saber mais sobre dados de usuário personalizado, consulte Habilitar dados de usuário personalizado.
Importante
Para usar dados de usuário personalizados, você deve primeiro Habilitar dados de usuário personalizados.
Ler os dados personalizados de um usuário
Você pode ler os dados de usuário personalizados de um usuário conectado no momento por meio do objeto User
desse usuário. Não é possível editar dados de usuário personalizado por meio de um objeto User
. Para editar dados de usuário personalizados, consulte Atualizar dados de usuário personalizados. Para acessar os dados, ligue para o user.customData() método no objeto User
de um usuário 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()) } }
Aviso
Os dados personalizados podem ser obsoletos
O Atlas App Services não atualiza dinamicamente o valor de User.customData() imediatamente quando os dados subjacentes são alterados. Em vez disso, o Atlas App Services obtém a versão mais recente dos dados de usuário personalizado sempre que um usuário atualiza seu token de acesso, o que ocorre durante a maioria das operações do SDK que entram em contato com o backend do Atlas App Services . O Realm atualiza os tokens de acesso a cada 30 minutos, para que os dados personalizados do usuário possam ficar obsoletos por no máximo 30 minutos.
Se você precisar da versão mais recente dos dados de usuário personalizados, use o user.refreshCustomData() para solicitar a versão mais recente dos dados personalizados de um usuário.
Criar um documento de dados personalizado do usuário
Dica
Para criar, atualizar ou excluir dados de usuário personalizados, você precisará das seguintes informações da sua configuração de dados de usuário personalizados:
o cluster de dados de usuário personalizado
o banco de dados de usuário personalizado
a collection de dados de usuário personalizada na qual os documento de dados de usuários personalizados são armazenados
o campo de ID do usuário usado para mapear documentos de dados de usuários personalizados para usuários (via ID do usuário)
Você pode encontrar essas informações na interface do usuário do App Services na página App Users , na aba Custom User Data .
Para criar dados de usuário personalizados para um usuário, crie um documento MongoDB na collection de dados de usuário personalizada. O campo ID do usuário do documento deve conter o ID de usuário do usuário. O exemplo a seguir usa o MongoDB Data Access para inserir um documento contendo o ID do usuário do usuário conectado no momento e um valor favoriteColor
na collection de dados de usuário 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}") } }
Você pode adicionar qualquer número de campos e valores arbitrários ao documento de dados de usuário personalizado ao criá-lo. O campo ID do usuário é o único requisito para que o documento fique disponível no objeto User
como dados de usuário personalizado.
Atualizar os dados personalizados de um usuário
Você pode atualizar dados de usuário personalizado usando MongoDB Data Access, Realm Sync, MongoDB Compass ou MongoDB Atlas Data Explorer.
Para atualizar os dados personalizados de um usuário com o MongoDB Data Access, edite o documento MongoDB cujo campo ID do usuário contém o ID do usuário do usuário.
Dica
Para determinar o ID de um usuário, acesse a propriedade User.id
ou localize o usuário na interface do usuário do App Services na página App Users Users .
O exemplo a seguir usa o MongoDB Data Access para atualizar o campo favoriteColor
do documento que contém o ID do usuário do usuário conectado no momento na collection de dados de usuário 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}") } }