Docs Menu
Docs Home
/ /
Administrar usuarios

Datos de usuario personalizados - Swift SDK

Puedes leer el datos de usuario personalizados de un usuario actualmente conectado a través 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 leer los datos, acceda a la customData propiedad del User objeto de un usuario 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
}
}
}
}

Advertencia

Los datos personalizados pueden estar obsoletos

Atlas App Services no actualiza dinámicamente el valor del documento de datos personalizados del usuario del lado del cliente inmediatamente cuando cambian los datos subyacentes. En su lugar, App Services obtiene la versión más reciente de los datos personalizados del usuario cada vez que un usuario actualiza su token de acceso, que utilizan la mayoría de las operaciones del SDK que contactan con el backend de App Services. Si el token no se actualiza antes de su 30 tiempo de expiración predeterminado de minutos, el SDK de Swift lo actualiza en la siguiente llamada al backend. Los datos personalizados del usuario podrían estar obsoletos hasta 30 minutos, más el tiempo hasta la siguiente llamada del SDK al backend.

Nota

Si necesita la versión más reciente de los datos de usuario personalizados, utilice el método refreshCustomDataWithCompletion para solicitar la última versión de los datos personalizados de un usuario.

Para crear datos de usuario personalizados, cree un documento de MongoDB en la colección de datos de usuario personalizados. El campo "ID de usuario" del documento debe contener el ID del usuario.

Tip

En la interfaz de usuario de App Services, marque la casilla App Users página debajo de la pestaña Custom User Data para buscar y configurar ajustes de datos de usuario personalizados, incluidos:

  • El clúster, la base de datos y la colección de datos de usuario personalizados

  • El campo de ID de usuario utilizado para asignar documentos de datos de usuario personalizados a los usuarios

El siguiente ejemplo utiliza MongoDB Acceso Remoto para insertar un documento que contenga el ID de usuario del usuario que ha iniciado sesión y un valor favoriteColor en la colección de datos de usuario 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)")
}
}
}
}

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.

Puede actualizar datos de usuario personalizados mediante MongoDB Data Access, Atlas Device Sync, MongoDB Compass o MongoDB Atlas Data Explorer.

Para actualizar los datos personalizados de un usuario con MongoDB Data Access, edite el documento de MongoDB cuyo campo de ID de usuario contiene el ID del usuario. El siguiente ejemplo utiliza MongoDB Data Access para actualizar el favoriteColor campo del documento que contiene el ID del usuario que ha iniciado sesión en la colección de datos de usuario 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)")
}
}
}
}

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.

Volver

Autenticar usuarios

En esta página