Docs 菜单
Docs 主页
/ /
Atlas Device SDKs
/ /

基于分区的同步 - Kotlin SDK

在此页面上

  • 分区值
  • 打开基于分区的 Sync Realm
  • 配置基于分区的同步 Realm
  • 检查同步会话的上传和下载进度
  • 从基于分区的同步迁移到 Flexible Sync
  • 迁移后更新客户端代码

基于分区的同步是一种较旧的模式,用于将 Atlas Device Sync 与 Realm Kotlin SDK 结合使用。 我们建议对新应用使用Flexible Sync 。 此页面上的信息适用于仍在使用基于分区的同步的用户。

提示

Realm Kotlin SDK v 1.9.0及更高版本能力从基于分区的同步迁移到 Flexible Sync。 有关更多信息,请参阅: 从基于分区的同步迁移到 Flexible Sync。

当您为后端应用配置选择基于分区的同步时,您的客户端实施必须包含分区值。 这是您在配置基于分区的同步时选择的分区键字段的值。

分区值决定客户端应用程序可以访问哪些数据。

打开同步 Realm 时,必须提供分区值。

要打开基于基于分区的同步域,请将用户、分区和一设立Realm 对象模式传递给SyncConfiguration.Builder() 。 然后,将配置传递给Realm .open()以打开域的实例:

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

要调整特定配置设置,请使用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() 有两个参数:

  • 可设置为UPLOADDOWNLOADDirection枚举。 这指定进度流跟踪上传或下载。

  • ProgressMode枚举,可设置为以下任一项:

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

您可以将 App Services Device Sync 模式从基于分区的同步迁移到 Flexible Sync。 迁移是一个自动过程,无需对应用程序代码进行任何更改。 Automatic migration requires Realm Kotlin SDK version 1.9.0 or newer.

通过迁移,您可以保留现有的 App Services 用户和身份验证配置。 Flexible Sync提供更通用的权限配置选项和更细粒度的数据同步。

有关如何将App Services App从基于分区的同步迁移到Flexible Sync的更多信息,请参阅迁移Device Sync模式。

从基于分区的同步自动迁移到Flexible Sync不需要对客户端代码进行任何更改。 但是,为了支持此功能,Realm 会通过以下方式自动处理两种同步模式之间的差异:

  • 自动为每个Realm 对象类型创建Flexible Sync订阅,其中partitionKey == partitionValue

  • partitionKey字段注入到每个对象中(如果尚不存在)。 这是自动Flexible Sync订阅所必需的。

如果您需要在迁移后更新客户端代码,请考虑更新客户端代码库以删除隐藏的迁移功能。 在以下情况下,您可能需要更新客户端代码库:

  • 您在客户端代码库中添加新模型或更改模型

  • 添加或更改涉及读取或写入 Realm 对象的功能

  • 您希望对同步的数据实施更细粒度的控制

进行以下更改,将基于分区的同步客户端代码转换为使用 Flexible Sync:

  • 更新SyncConfiguration.Builder()以使用Flexible Sync 。 这包括删除partitionValue并根据需要添加一组初始订阅。

  • 将相关属性添加到对象模型中,以便在 Flexible Sync 订阅中使用。 例如,您可以添加ownerId属性,使用户能够仅同步自己的数据。

  • 删除自动Flexible Sync订阅并手动创建相关订阅。

有关 Flexible Sync 权限策略的示例,包括如何为这些策略进行数据建模的示例,请参阅Device Sync权限指南。

当您从基于分区的同步迁移到Flexible Sync时,Realm 会自动为您的应用创建隐藏的Flexible Sync订阅。 下次添加或更改订阅时,我们建议您:

  1. 删除自动生成的订阅。

  2. 订阅查询在客户端代码库中手动添加相关订阅。

这样,您就可以在代码库中同时查看所有订阅逻辑,以便将来进行迭代和调试。

有关自动生成的Flexible Sync订阅的更多信息,请参阅将客户端应用程序迁移到Flexible Sync。

后退

在后台同步数据