Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

Dados personalizados do usuário - Swift 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

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 customData no objeto User de um usuário conectado:

RLMApp *app = [RLMApp appWithId:YOUR_APP_ID];
[app loginWithCredential:[RLMCredentials anonymousCredentials] completion:^(RLMUser *user, NSError *error) {
if (error != nil) {
NSLog(@"Failed to log in: %@", error);
return;
}
// If the user data has been refreshed recently, you can access the
// custom user data directly on the user object
NSLog(@"User custom data: %@", [user customData]);
// Refresh the custom data
[user refreshCustomDataWithCompletion:^(NSDictionary *customData, NSError *error) {
if (error != nil) {
NSLog(@"Failed to refresh custom user data: %@", error);
return;
}
NSLog(@"Favorite color: %@", customData[@"favoriteColor"]);
}];
}];
let appId = YOUR_APP_SERVICES_APP_ID // replace this with your App ID
let app = App(id: appId)
app.login(credentials: Credentials.anonymous) { (result) in
switch result {
case .failure(let error):
print("Failed to log in: \(error.localizedDescription)")
case .success(let user):
// If the user data has been refreshed recently, you can access the
// custom user data directly on the user object
print("User custom data: \(user.customData)")
// Refresh the custom user data
user.refreshCustomData { (result) in
switch result {
case .failure(let error):
print("Failed to refresh custom data: \(error.localizedDescription)")
case .success(let customData):
// favoriteColor was set on the custom data.
print("Favorite color: \(customData["favoriteColor"] ?? "not set")")
return
}
}
}
}

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 Atlas App Services obtém a versão mais recente dos dados personalizados do usuário 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 Atlas App Services . Se o token não for atualizado antes de seu tempo de expiração padrão 30 minutos, o Swift SDK 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, utilize o método RefreshCustomDataWithCompletion para solicitar a versão mais recente dos dados personalizados do 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

O exemplo a seguir usa o MongoDB Remoto 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:

RLMApp *app = [RLMApp appWithId:YOUR_APP_ID];
[app loginWithCredential:[RLMCredentials anonymousCredentials] completion:^(RLMUser *user, NSError *error) {
if (error != nil) {
NSLog(@"Failed to log in: %@", error);
return;
}
RLMMongoClient *client = [user mongoClientWithServiceName:@"mongodb-atlas"];
RLMMongoDatabase *database = [client databaseWithName:@"my_database"];
RLMMongoCollection *collection = [database collectionWithName:@"users"];
[collection insertOneDocument:
@{@"userId": [user identifier], @"favoriteColor": @"pink"}
completion:^(id<RLMBSON> newObjectId, NSError *error) {
if (error != nil) {
NSLog(@"Failed to insert: %@", error);
}
NSLog(@"Inserted custom user data document with object ID: %@", newObjectId);
}];
}];
let appId = YOUR_APP_SERVICES_APP_ID // replace this with your App ID
let app = App(id: appId)
app.login(credentials: Credentials.anonymous) { (result) in
switch result {
case .failure(let error):
print("Failed to log in: \(error.localizedDescription)")
case .success(let user):
let client = user.mongoClient("mongodb-atlas")
let database = client.database(named: "my_database")
let collection = database.collection(withName: "users")
// Insert the custom user data object
collection.insertOne([
"userId": AnyBSON(user.id),
"favoriteColor": "pink"
]) { (result) in
switch result {
case .failure(let error):
print("Failed to insert document: \(error.localizedDescription)")
case .success(let newObjectId):
print("Inserted custom user data document with object ID: \(newObjectId)")
}
}
}
}

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 o MongoDB Data Access, o Atlas Device Sync, o MongoDB Compass ou o 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. 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:

RLMApp *app = [RLMApp appWithId:YOUR_APP_ID];
[app loginWithCredential:[RLMCredentials anonymousCredentials] completion:^(RLMUser *user, NSError *error) {
if (error != nil) {
NSLog(@"Failed to log in: %@", error);
return;
}
RLMMongoClient *client = [user mongoClientWithServiceName:@"mongodb-atlas"];
RLMMongoDatabase *database = [client databaseWithName:@"my_database"];
RLMMongoCollection *collection = [database collectionWithName:@"users"];
// Update the user's custom data document
[collection updateOneDocumentWhere:@{@"userId": [user identifier]}
updateDocument: @{@"favoriteColor": @"cerulean"}
completion:^(RLMUpdateResult *updateResult, NSError *error) {
if (error != nil) {
NSLog(@"Failed to insert: %@", error);
}
NSLog(@"Matched: %lu, modified: %lu", [updateResult matchedCount], [updateResult modifiedCount]);
}];
}];
let appId = YOUR_APP_SERVICES_APP_ID // replace this with your App ID
let app = App(id: appId)
app.login(credentials: Credentials.anonymous) { (result) in
switch result {
case .failure(let error):
print("Failed to log in: \(error.localizedDescription)")
case .success(let user):
// Access the custom user document remotely to update it.
let client = user.mongoClient("mongodb-atlas")
let database = client.database(named: "my_database")
let collection = database.collection(withName: "users")
collection.updateOneDocument(
filter: ["userId": AnyBSON(user.id)],
update: ["favoriteColor": "cerulean"]
) { (result) in
switch result {
case .failure(let error):
print("Failed to update: \(error.localizedDescription)")
return
case .success(let updateResult):
// User document updated.
print("Matched: \(updateResult.matchedCount), updated: \(updateResult.modifiedCount)")
}
}
}
}

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 .

Voltar

Autentique usuários