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

Início rápido - C++ SDK

Nesta página

  • Importar Realm
  • Definir seu modelo de objeto
  • Abrir um Realm
  • Criar, ler, atualizar e excluir objetos
  • Fique atento às mudanças
  • Fechar um Realm
  • Adicionar Device Sync (opcional)
  • Pré-requisitos
  • Inicialize o aplicativo
  • Autenticar um usuário
  • Abrir um Realm
  • Ler, escrever e React a mudanças

Este Início Rápido demonstra como usar o Realm com o Realm C++ SDK. Antes de começar, certifique-se de ter instalado o C++ SDK.

Disponibilize o C++ SDK do Realm em seu código, incluindo o cabeçalho cpprealm/sdk.hpp na unidade de tradução em que você deseja usá-lo:

#include <cpprealm/sdk.hpp>

Para um Realm somente local, você pode definir seu modelo de objetos diretamente no código. Neste início rápido, você pode remover ownerId a menos que queira adicionar a Device Sync 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

Ao abrir um Realm, você deve especificar um db_config. Opcionalmente, você pode abrir um Realm em um caminho específico ou fornecer um sync_config para abrir um Realm sincronizado.

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

Para mais informações, consulte: Configurar e Abrir um Realm.

Depois de abrir um realm, você pode modificá-lo e seus objetos em um bloco de transação de gravação .

Para instanciar um novo objeto Todo e adicioná-lo ao Realm em um bloco de gravação:

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

Você pode recuperar uma coleção de resultados ao vivo de todos no domínio:

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

Você também pode filtrar essa coleção usando onde:

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

Para modificar uma tarefa, atualize suas propriedades em um bloco de transação de gravação:

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

Por fim, você pode excluir uma tarefa:

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

Você pode observar um objeto para alterações com o método observe .

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 fechar um Realm e liberar todos os recursos subjacentes, ligue para db::close(). Fechar o banco de dados de dados invalida quaisquer objetos restantes.

realm.close();

Se você deseja sincronizar dados do Realm entre dispositivos, você pode configurar um Atlas App Services e habilitar a Device Sync. Para obter mais informações sobre o que você pode fazer com o App Services, consulte: Serviços de aplicativos - C++ SDK.

Antes de sincronizar os dados do Realm, você deve:

Para usar as funcionalidades do App Services, como autenticação e sincronização, acesse o App Services App usando seu ID do aplicativo. O ID do aplicativo está disponível na UI do App Services.

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

Neste início rápido, você usa a autenticação anônima para fazer login de usuários sem exigir que eles forneçam nenhuma informação de identificação. Depois de autenticar o usuário, você poderá abrir um domínio para esse usuário.

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

O Realm C++ SDK oferece muitas maneiras adicionais de autenticar, registrar e vincular usuários. Para outros provedores de autenticação, consulte: Autenticar usuários - C++ SDK

Depois de ativar a Device Sync e autenticar um usuário, você pode criar um objeto sync_configuration e abrir o Realm. Em seguida, você pode adicionar uma assinatura da Flexible Sync que determina quais dados o Realm pode ler e escrever.

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();

A sintaxe para ler, gravar e observar alterações em um domínio sincronizado é idêntica à sintaxe para domínios não sincronizados acima.

A única diferença aqui é que este exemplo armazena o user.identifier() do usuário conectado na ownerId propriedade do Todo item . Isso nos permite executar query somente dos todos do usuário na assinatura e definir permissões de sincronização para Users can only read and write their own data.

Para obter mais informações sobre permissões de sincronização, consulte Permissões baseadas em funções.

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>();

Enquanto você trabalha com dados locais, um thread em segundo plano integra, carrega e baixa conjuntos de alterações de forma eficiente.

Cada transação de escrita para um conjunto de assinaturas tem um custo de desempenho. Se você precisar fazer várias atualizações em um objeto do Realm durante uma sessão, considere manter objetos editados na memória até que todas as alterações sejam concluídas. Isso melhora o desempenho da sincronização, gravando apenas o objeto completo e atualizado em seu domínio, em vez de cada alteração.

Próximo

Bem-vindo aos Docs do Atlas Device SDK