Docs Menu
Docs Home
/ /
SDK de dispositivos Atlas

Quick Start - C++ SDK

Esta guía de inicio rápido muestra cómo usar Realm con el SDK de C++ de Realm. Antes de comenzar, asegúrese de tener instalado el SDK de C++.

Haga que el SDK de C++ de Realm esté disponible en su código incluyendo el cpprealm/sdk.hpp encabezado en la unidad de traducción donde desea utilizarlo:

#include <cpprealm/sdk.hpp>

Para un dominio exclusivamente local, puede definir su modelo de objetos directamente en el código. En esta guía rápida, puede eliminar ownerId a menos que desee agregar la sincronización de dispositivos opcional.

namespace realm {
struct Todo {
realm::primary_key<realm::object_id> _id{realm::object_id::generate()};
std::string name;
std::string status;
// The ownerId property stores the user.identifier() of a
// logged-in user. Omit this property for the non-sync example.
std::string ownerId;
};
REALM_SCHEMA(Todo, _id, name, status, ownerId);
} // namespace realm

Cuando abres un reino, debes especificar un db_config. Opcionalmente, puede abrir un dominio en una ruta específica o proporcionar un sync_config para abrir un dominio sincronizado.

auto config = realm::db_config();
auto realm = realm::db(std::move(config));

Para obtener más información, consulte: Configurar y abrir un reino.

Una vez que haya abierto un reino, puede modificarlo y modificar sus objetos en un bloque de transacción de escritura.

Para instanciar un nuevo objeto Todo y agregarlo al realm en un bloque de escritura:

auto todo = realm::Todo{.name = "Create my first todo item",
.status = "In Progress"};
realm.write([&] { realm.add(std::move(todo)); });

Puede recuperar una colección de resultados en vivo de todas las tareas pendientes en el ámbito:

auto todos = realm.objects<realm::Todo>();

También puedes filtrar esa colección usando donde:

auto todosInProgress = todos.where(
[](auto const& todo) { return todo.status == "In Progress"; });

Para modificar una tarea, actualice sus propiedades en un bloque de transacción de escritura:

auto todoToUpdate = todosInProgress[0];
realm.write([&] { todoToUpdate.status = "Complete"; });

Por último, puedes borrar un todo:

realm.write([&] { realm.remove(specificTodo); });

Puedes observar un objeto para detectar cambios con el observe método.

auto token = specificTodo.observe([&](auto&& change) {
try {
if (change.error) {
rethrow_exception(change.error);
}
if (change.is_deleted) {
std::cout << "The object was deleted.\n";
} else {
for (auto& propertyChange : change.property_changes) {
std::cout << "The object's " << propertyChange.name
<< " property has changed.\n";
}
}
} catch (std::exception const& e) {
std::cerr << "Error: " << e.what() << "\n";
}
});

Para cerrar un dominio y liberar todos los recursos subyacentes, llame a db::close(). Cerrar la base de datos invalida los objetos restantes.

realm.close();

Si desea sincronizar datos de Realm entre dispositivos, puede configurar una aplicación de Servicios de Aplicaciones Atlas y habilitar la sincronización de dispositivos. Para obtener más información sobre las funciones de los Servicios de Aplicaciones, consulte: Servicios de Aplicaciones - SDK de C++.

Antes de poder sincronizar los datos de Realm, debes:

Para usar las funciones de App Services, como la autenticación y la sincronización, accede a tu aplicación de App Services con tu ID de aplicación. Puedes encontrarlo en la interfaz de App Services.

auto appConfig = realm::App::configuration();
appConfig.app_id = APP_ID;
auto app = realm::App(appConfig);

En esta guía de inicio rápido, usará la autenticación anónima para iniciar sesión sin que los usuarios proporcionen información de identificación. Tras autenticar al usuario, podrá abrir un dominio para él.

auto user = app.login(realm::App::credentials::anonymous()).get();

El SDK de Realm para C++ ofrece muchas maneras adicionales de autenticar, registrar y vincular usuarios. Para conocer otros proveedores de autenticación, consulte: Autenticar usuarios - SDK de C++.

Una vez que haya habilitado la Sincronización de dispositivos y autenticado a un usuario, puede crear un objeto sync_configuration y abrir el dominio. A continuación, puede agregar una suscripción de Sincronización flexible que determine qué datos puede leer y escribir el dominio.

auto syncConfig = user.flexible_sync_configuration();
auto realm = realm::db(syncConfig);
// For this example, get the userId for the Flexible Sync query
auto userId = user.identifier();
auto subscriptions = realm.subscriptions();
auto updateSubscriptionSuccess =
subscriptions
.update([&](realm::mutable_sync_subscription_set& subs) {
subs.add<realm::Todo>("todos", [&userId](auto& obj) {
// For this example, get only Todo items where the ownerId
// property value is equal to the userId of the logged-in user.
return obj.ownerId == userId;
});
})
.get();

La sintaxis para leer, escribir y observar cambios en un reino sincronizado es idéntica a la sintaxis para reinos no sincronizados mencionada anteriormente.

La única diferencia es que este ejemplo almacena el user.identifier() del usuario conectado en la propiedad ownerId del elemento Todo. Esto nos permite consultar solo las tareas pendientes del usuario en la suscripción y establecer los permisos de sincronización en Users can only read and write their own data.

Para obtener más información sobre los permisos de sincronización, consulte Permisos basados ​​en roles.

auto todo = realm::Todo{.name = "Create a Sync todo item",
.status = "In Progress",
.ownerId = userId};
realm.write([&] { realm.add(std::move(todo)); });
auto todos = realm.objects<realm::Todo>();

Mientras trabaja con datos locales, un hilo en segundo plano integra, carga y descarga conjuntos de cambios de manera eficiente.

Cada transacción de escritura para un conjunto de suscripciones tiene un coste de rendimiento. Si necesita realizar varias actualizaciones a un objeto de Realm durante una sesión, considere mantener los objetos editados en memoria hasta que se completen todos los cambios. Esto mejora el rendimiento de la sincronización al escribir solo el objeto completo y actualizado en su reino, en lugar de cada cambio.

Next

Bienvenido a la Docs de Atlas Device SDK

En esta página