Menu Docs

Página inicial do DocsDesenvolver aplicaçõesAtlas Device SDKs

Dados personalizados do usuário - C++ SDK

Nesta página

  • Ler os dados personalizados de um usuário
  • Criar um documento de dados personalizado do usuário
  • Atualizar os dados personalizados de um usuário
  • Excluir 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. Você não pode editar dados de usuário personalizados por meio de um objeto User . Para editar dados de usuário personalizados, consulte Atualizar dados de usuário personalizados. Para ler os dados, acesse a propriedade custom_data no objeto User de um usuário conectado:

// Custom user data could be stale, so refresh it before reading it
user.refresh_custom_user_data().get();
auto userData = user.custom_data().value();
/* Parse the string custom data to use it more easily in your code.
In this example, we're using the nlohmann/json library, but use whatever
works with your application's constraints. */
auto userDataObject = nlohmann::json::parse(userData);
CHECK(userDataObject["favoriteColor"] == "gold");

Aviso

Os dados personalizados podem ser obsoletos

O Atlas App Services não atualiza dinamicamente o valor do documento de dados personalizado do usuário do lado do cliente imediatamente quando os dados subjacentes são alterados. Em vez disso, o 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, que é usado pela maioria das operações do SDK que entram em contato com o backend do App Services. Se o token não for atualizado antes de seu tempo de expiração padrão 30 minutos, o SDK do C++ atualizará o token na próxima chamada para o backend. Os dados personalizados do usuário podem ficar obsoletos por até 30 minutos, mais o tempo até que ocorra a próxima chamada do SDK para o backend.

Observação

Se você precisar da versão mais recente dos dados personalizados do usuário, use a função refresh_custom_user_data() para solicitar a versão mais recente dos dados personalizados de um usuário.

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.

Dica

Na interface do usuário do App Services, verifique a página App Users na guia Custom User Data para localizar e definir configurações de dados de usuário personalizadas, incluindo:

  • O cluster, o banco de dados e a coleção de dados de usuário personalizados

  • O campo de ID do usuário usado para mapear documentos de dados de usuário personalizados para usuários

Uma maneira de criar esse documento é chamando uma Função do Atlas que insere um documento de dados personalizado na coleta de dados de usuário personalizado. Não existe um padrão único para adicionar dados de usuário personalizado de uma Função do Atlas. Você deve escrever sua função ou funções para se adequar ao caso de uso do seu aplicativo.

Neste exemplo, a Função de Realm pega um objeto passado pelo cliente e o adiciona à collection de dados de usuário personalizada no Atlas. A Função cria os dados de usuário personalizados se ainda não existirem e substitui todos os dados nele se existir.

updateCustomUserData.js - Função de Realm em execução no servidor (JavaScript)
exports = async function updateCustomUserData(newCustomUserData) {
const userId = context.user.id;
const customUserDataCollection = context.services
.get("mongodb-atlas")
.db("custom-user-data-database")
.collection("cpp-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;
};

O exemplo a seguir chama uma função para inserir um documento contendo o ID do usuário conectado no momento e um valor favoriteColor na collection de dados de usuário personalizada:

auto user = app.login(realm::App::credentials::anonymous()).get();
// Functions take a string argument. Any quotes within the array must be
// escaped.
auto customData =
"[{\"userId\":\"" + user.identifier() + "\",\"favoriteColor\":\"gold\"}]";
// Call an Atlas Function to insert custom data for the user
auto result = user.call_function("updateCustomUserData", customData).get();

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.

Você pode atualizar dados de usuário personalizados usando uma Função do Atlas, MongoDB Compass ou o Explorador de Dados do MongoDB Atlas.

Para atualizar os dados personalizados de um usuário com uma Função de Realm, edite o documento MongoDB cujo campo ID do usuário contém o ID do usuário do usuário. O exemplo a seguir chama a mesma função usada para criar o documento de dados de usuário personalizado acima. Aqui, atualizamos o campo favoriteColor do documento que contém o ID do usuário do usuário conectado no momento:

// Functions take a string argument. Any quotes within the array must be
// escaped.
auto updatedData = "[{\"userId\":\"" + user.identifier() +
"\",\"favoriteColor\":\"black\"}]";
// Call an Atlas Function to update custom data for the user
auto updateResult =
user.call_function("updateCustomUserData", updatedData).get();
// Refresh the custom user data before reading it to verify it succeeded
user.refresh_custom_user_data().get();
auto updatedUserData = user.custom_data().value();
/* Parse the string custom data to use it more easily in your code.
In this example, we're using the nlohmann/json library, but use whatever
works with your application's constraints. */
auto updatedUserDataObject = nlohmann::json::parse(updatedUserData);
CHECK(updatedUserDataObject["favoriteColor"] == "black");

Dica

Para determinar o ID de um usuário, acesse a propriedade user.identifier() ou localize o usuário na interface do usuário do App Services na página App Users Users .

Os dados personalizados do usuário são armazenados em um documento vinculado ao objeto de usuário. Excluir um usuário não exclui os dados personalizados do usuário. Para excluir totalmente os dados do usuário para cumprir, por exemplo, a orientação de exclusão de conta da Apple, você deve excluir manualmente o documento de dados personalizado do usuário.

Você pode excluir dados de usuário personalizados usando uma Função do Atlas, MongoDB Compass ou o Explorador de Dados do MongoDB Atlas.

Neste exemplo, a Função Atlas não exige nenhum argumento. A Função usa o contexto da função para determinar o ID de usuário do chamador e exclui o documento de dados de usuário personalizado que corresponde ao ID do usuário.

deleteCustomUserData.js - Função de Realm em execução no servidor (JavaScript)
exports = async function deleteCustomUserData() {
const userId = context.user.id;
const customUserDataCollection = context.services
.get("mongodb-atlas")
.db("custom-user-data-database")
.collection("cpp-custom-user-data");
const filter = { userId };
const res = await customUserDataCollection.deleteOne(filter);
return res;
};

O código que chama essa função exige que apenas um usuário conectado chame a função:

auto deleteResult = user.call_function("deleteCustomUserData", "[]").get();
← Managed usuários de e-mail/senha - C++ SDK