パーティションベースの同期 - Kotlin SDK
項目一覧
パーティションベースの同期は、Realm Kotlin SDK で Atlas Device Sync を使用するための古いモードです。 新しいアプリにはFlexible Syncを使用することをお勧めします。 このページの情報は、パーティションベースの同期を引き続き使用しているユーザー向けです。
Tip
Realm Kotlin SDK v 1.9.0以降では、パーティションベースの同期から Flexible Sync に移行する機能がサポートされています。 詳細については、「 パーティションベースの同期から Flexible Sync への移行 」を参照してください。
パーティション値
バックエンド アプリ構成にパーティションベースの同期を選択する場合、クライアント実装にはパーティション値を含める必要があります。 これは、 Flexible Sync を設定するときに選択したパーティションキーフィールドの値です。
パーティション値によって、クライアント アプリケーションがアクセスできるデータが決まります。
同期された Realm を開くときは、パーティション値を指定する必要があります。
パーティションベースの同期Realmを開く
パーティションベースの同期邦土を開くには、ユーザー、パーティション、および Realm オブジェクト スキーマのセットをSyncConfiguration.Builder()に渡します。 次に、構成をRealm.open()に渡して、Realm のインスタンスを開きます。
val app = App.create(YOUR_APP_ID) runBlocking { val user = app.login(Credentials.anonymous()) val config = SyncConfiguration.Builder(user, PARTITION, setOf(/*realm object models here*/)) // specify name so realm doesn't just use the "default.realm" file for this user .name(PARTITION) .build() val realm = Realm.open(config) Log.v("Successfully opened realm: ${realm.configuration.name}") realm.close() }
パーティションベースの同期Realmの構成
特定の構成設定を調整するには、 SyncConfiguration.Builderが提供するオプションを使用します。
val app = App.create(YOUR_APP_ID) runBlocking { val user = app.login(Credentials.anonymous()) val config = SyncConfiguration.Builder(user, PARTITION, setOf(/*realm object models here*/)) .maxNumberOfActiveVersions(10) .waitForInitialRemoteData() .name("realm name") .build() val realm = Realm.open(config) Log.v("Successfully opened realm: ${realm.configuration}") realm.close() }
同期セッションのアップロードとダウンロードの進行状況を確認
注意
Kotlin SDK の progressAsFlow()
リスナーは現在、パーティションベースの同期を使用する Realm でのみ使用できます。 Kotlin SDK はまだ Flexible Sync の進行状況リスナーをサポートしていません。
同期セッションのアップロードとダウンロードの進行状況を監視できます。 同期された Realm を開くと、同期セッションが開始されます。 詳細については、「 同期セッションの管理 」を参照してください。
同期のアップロードとダウンロードの進行状況を監視するには、 SyncSession.progressAsFlow()を呼び出します
このメソッドは、進行状況イベントのフローを返します。 Progress
は、転送可能なバイトの合計数と転送される残りのバイト数を提供します。
syncSession.progressAsFlow()
は 2 つの引数を取ります。
UPLOAD
またはDOWNLOAD
に設定できる方向列挙型。 これは、進行状況ストリームがアップロードまたはダウンロードを追跡することを指定します。次のいずれかに設定できるgressMode列挙型。
INDEFINITELY
: コールバックが登録されていないまで通知を続けるように設定します。CURRENT_CHANGES
: 現在転送可能なバイトのみが同期されるまで通知を続けるように設定します。
val stream = realm.syncSession.progressAsFlow( Direction.UPLOAD, ProgressMode.CURRENT_CHANGES ) stream.collect { progress -> if (progress.transferableBytes == progress.transferredBytes) { Log.i("Upload complete") } }
パーティションベースの同期から Flexible Sync への移行
App Services Device Sync モードを、パーティションベースの同期から Flexible Sync に移行できます。 移行は自動プロセスであり、アプリケーション コードを変更する必要はありません。 自動移行には、Realm Kotlin SDK バージョン 1.9.0 以降が必要です。
移行により、既存の App Services ユーザーと認証構成を維持できます。 Flexible Sync は、より多目的の権限構成オプションとよりきめの細かいデータ同期を提供します。
App Services App をパーティションベースの同期から Flexible Sync に移行する方法の詳細については、「 Device Sync モードの移行 」を参照してください。
移行後のクライアント コードの更新
パーティションベースの同期から Flexible Sync への自動移行には、クライアント コードを変更する必要はありません。 ただし、この機能をサポートするために、Realm は 2 つの同期モード間の違いを次の方法で自動的に処理します。
partitionKey == partitionValue
の各オブジェクトタイプの Flexible Sync サブスクリプションを自動的に作成します。すべてのオブジェクトに
partitionKey
フィールドを挿入します(フィールドがまだ存在しない場合)。 これは自動 Flexible Sync サブスクライブに必要です。
If you need to make updates to your client code after migration, consider updating your client codebase to remove hidden migration functionality. 次の場合には、クライアント コードベースを更新する必要がある場合があります。
クライアント コードベースで新しいモデルを追加または変更する
Realm オブジェクトの読み取りまたは書き込みを含む機能を追加または変更する場合
同期するデータの内容をより詳細に制御する機能を実装したい
Flexible Sync を使用するようにパーティションベースの同期クライアント コードを変換するには、次の変更を行います。
を使用するようにFlexible Sync SyncConfiguration.Builder() を更新します。これには、必要に応じて、
partitionValue
を削除し、一連の初期サブスクリプションを追加することが含まれます。Flexible Sync サブスクライブで使用する関連プロパティをオブジェクトモデルに追加します。 たとえば、ユーザーが自分のデータのみを同期できるようにするには、
ownerId
プロパティを追加します。自動 Flexible Sync サブスクライブを削除し、関連するサブスクライブを手動で作成します。
これらの戦略にデータをモデル化する方法の例を含む、Flexible Sync 権限戦略の例については、 Device Sync 権限ガイド を参照してください。
サブスクリプションの削除と手動作成
パーティションベースの同期から Flexible Sync に移行すると、Realm はアプリ用の非表示の Flexible Sync サブスクリプションを自動的に作成します。 次回サブスクリプションを追加または変更するときは、次の操作を行うことをお勧めします。
これにより、将来の反復やデバッグのために、すべてのサブスクライブ ロジックをコードベースにまとめて表示できます。
自動生成される Flexible Sync サブスクライブの詳細については、「クライアント アプリの Flexible Sync への移行 」を参照してください。