Docs Menu
Docs Home
/ /
Atlas Device SDK

クイック スタート - C++ SDK

項目一覧

  • Realm のインポート
  • オブジェクトモデルを定義する
  • Realm を開く
  • オブジェクトの作成、読み取り、更新、削除
  • 変更の監視
  • Realm を閉じる
  • Device Sync の追加(任意)
  • 前提条件
  • アプリを初期化する
  • ユーザーの認証
  • Realm を開く
  • 読み取り、 React 、変更への対応

このクイック スタートでは、Realm C++ SDK で Realm を使用する方法を説明します。 開始する前に、C++ SDK がインストールされていることを確認してください。

Realm C++ SDK を使用する変換ユニットに cpprealm/sdk.hppヘッダーを含めて、コード内で Realm C++ SDK を使用できるようにします。

#include <cpprealm/sdk.hpp>

ローカル専用 Realm の場合、コード内でオブジェクトモデルを直接定義できます。 このクイック スタートでは、オプションの Device Sync を追加する場合を除き、 ownerIdを削除できます。

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

Realm を開くときは、 db_configを指定する必要があります。 オプションで、特定のパスで Realm を開くか、同期された Realm を開くためにsync_configを指定することができます。

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

詳細については、「 Realm の構成とオープン 」を参照してください。

Realm を開くと、 書込みトランザクション ブロックでそのオブジェクトとその オブジェクト を変更できます。

新しい Todo オブジェクトをインスタンス化し、書込みブロックの Realm に追加するには、次の手順に従います。

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

Realm 内のすべての Todo のライブ結果コレクションを検索できます。

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

次の条件を使用してそのコレクションをフィルタリングすることもできます

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

Todo を変更するには、書込みトランザクション (write transaction) ブロックでそのプロパティを更新します。

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

最後に、Todo を削除できます。

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

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";
}
});

Realm を閉じてすべての基礎のリソースを解放するには、 db::close()を呼び出します。 データベースを閉じると、残りのオブジェクトは無効になります。

realm.close();

デバイス間で Realm データを同期する場合は、Atlas App Services App を設定し、Device Sync を有効にします。 App Services で実行できる操作の詳細については、「アプリケーション サービス - C++ SDK 」を参照してください。

Realm データを同期する前に、次の操作を行う必要があります。

  • App Services アプリの作成

  • 匿名認証を有効にする

  • 開発モードOn に切り替えて、 Flexible Sync を有効にします。この例では、Device Sync Queryable FieldsセクションにownerIdフィールドが必要です。

認証や同期などの App Services 機能を使用するには、App ID を使用して App Services App にアクセスします。 アプリ ID は、App Services UI で確認できます

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

このクイック スタートでは、匿名認証を使用してユーザーをログインさせ、識別情報の提供を要求しません。 ユーザーを認証したら、そのユーザーのRealmを開くことができます。

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

Realm C++ SDK は、ユーザーを認証、登録、リンクするための多くの追加の方法を提供します。 その他の認証プロバイダについては、「ユーザーの認証 - C++ SDK 」を参照してください。

Device Sync を有効にしてユーザーを認証したら、 sync_configurationオブジェクトを作成し、Realm を開くことができます。 次に、Realm が読み書きできるデータを決定するFlexible Sync サブスクリプションを追加できます。

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

同期された Realm で を読み取り書込み変更を監視する構文は、上記の同期されていない Realm の構文と同じです。

唯一の違いは、この例ではログインユーザーのuser.identifier()TodoアイテムのownerIdプロパティに保存されていることです。 これにより、サブスクライブ内のユーザーの Todo のみをクエリし、同期権限をUsers can only read and write their own dataに設定できるようになります。

同期権限の詳細については、ロールベースの権限 を参照してください。

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

ローカル データを操作している間に、バックグラウンド スレッドが変更セットを効率的に統合、アップロード、ダウンロードします。

サブスクリプションセットのすべての書込みトランザクション (write transaction) にはパフォーマンス コストがかかります。 セッション中に Realm オブジェクトを複数更新する必要がある場合は、すべての変更が完了するまで編集されたオブジェクトをメモリ内に保持することを検討してください。 これにより、すべての変更ではなく、完全で更新されたオブジェクトのみが Realm に書き込まれるため、同期のパフォーマンスが向上します。

次へ

Atlas Device SDK Docsへようこそ