Realm ~App Sync

用于与 Atlas App Services 交互的类。

相关类

AsyncOpenTask
AuthError
BaseSubscriptionSet
IncompleteSyncedRealmError
MutableSubscriptionSet
会话
订阅
SubscriptionSet
UserIdentity
Realm.App.Sync.SubscriptionsState
静态只读

表示Realm.App.Sync.SubscriptionSet集状态的枚举。

类型
"pending""complete""error""superseded"
属性:
  • 待处理
    • 类型: "pending""complete""error""superseded"
    • 默认: pending
    • 订阅更新已在本地持久保存,但服务器尚未返回与更新的订阅查询匹配的所有数据。

  • 完成
    • 类型: "pending""complete""error""superseded"
    • 默认: complete
    • 服务器已确认订阅,并在订阅集更新时发送与订阅查询匹配的所有数据。 服务器现在处于稳态同步模式,它将在更新到来时流式传输更新。

  • 错误
    • 类型: "pending""complete""error""superseded"
    • 默认: error
    • 服务器返回错误,此 Realm 的同步已暂停。 要查看实际错误,请使用Subscriptions.error

      您仍可使用Realm.App.Sync.SubscriptionSet#update来更新订阅,如果新的更新未trigger错误,则会重新启动同步。

  • 已取代
    • 类型: "pending""complete""error""superseded"
    • 默认: superseded
    • 该 SubscriptionSet 已被更新的 SubscriptionSet 所取代。 这通常意味着有人在 Subscriptions 的不同实例上调用了Realm.App.Sync.SubscriptionSet#update 。 您不应使用被取代的 SubscriptionSet,而应从Realm.subscriptions获取新实例。

Realm.App.Sync._hasExistingSessions( app )
静态

如果 Realm 仍然引用任何同步会话,无论其状态如何,都返回true 。 如果返回false ,则表示当前不存在会话。

参数
  • APP 可选
    • 类型: Realm.App
    • 打开 Realm 的应用程序。

Realm.App.Sync.enableSessionMultiplexing(app)
静态

为 Realm 应用启用通过单个连接复用多个同步会话的功能。 打开大量同步 Realm 时,由于服务器上有所有打开的套接字,系统可能会用完文件描述符。 会话多路复用旨在缓解这个问题,但它可能不适用于配置了故障转移的服务器。 仅当您看到有关达到文件描述符限制的错误并且知道自己正在使用许多同步会话时才使用。

参数
Realm.App.Sync.getAllSyncSessions(user)[Realm.App.Sync.Session, ...]
静态

返回用户的所有同步会话。

参数
返回[Realm.App.Sync.Session, ...]一个会话数组
Realm.App.Sync.getSyncSession(user, partitionValue)Realm.App.Sync.Session
静态

返回与用户和分区值关联的会话。

参数
  • 分区值
    • 类型: stringnumberObjectIdnull
返回Realm.App.Sync.Session会话
Realm.App.Sync.initiateClientReset应用程序路径
静态已弃用

启动客户端重置。 在重置之前,必须关闭 Realm。

如果与 Atlas Device Sync 的通信表明存在无法恢复的错误,导致无法继续正常同步,则可能需要重置已同步的 Realm。最常见的原因是客户端断开连接的时间过长。

Realm 的本地副本将移至恢复目录以妥善保管。

未成功同步到 Atlas 的本地写入将出现在 Realm 文件的本地恢复副本中。 重新下载的 Realm 最初仅包含 Realm 在服务器上同步时存在的数据。

参数
  • APP 可选
    • 类型: Realm.App
    • 打开 Realm 的应用程序。

  • 路径 可选
    • 类型: string
    • 要重置的 Realm 的路径。 如果无法重置,则会引发错误。

示例
{
  // Once you have opened your Realm, you will have to keep a reference to it.
  // In the error handler, this reference is called `realm`
  const config = {
    // schema, etc.
    sync: {
      user,
      partitionValue,
      error: (session, error) => {
        if (error.name === 'ClientReset') {
          let path = realm.path; // realm.path will no be accessible after realm.close()
          realm.close();
          Realm.App.Sync.initiateClientReset(app, path);
          // - open Realm at `error.config.path` (oldRealm)
          // - open Realm with `config` (newRealm)
          // - copy required objects from oldRealm to newRealm
          // - close both Realms
        }
      }
    }
  };
}
Realm.App.Sync.reconnect(app)
静态

调用此方法将强制 Realm 立即尝试将 Realm 应用重新连接到服务器。

Realm 将使用指数退避算法自动重新连接。 这意味着,如果设备长时间离线,则在设备重新上线后恢复连接可能需要比预期更长的时间。 在可以检测到网络状况的情况下(例如 飞行模式)。 手动调用该方法可提供更流畅的用户体验。

参数
Realm.App.Sync.setLogger(应用、记录器)
静态

捕获同步客户端的日志。 您只能设置日志级别一次,并且必须在创建 App 实例之后但在打开任何 Realm 之前进行设置。

请参阅: {Realm.App.Sync~setLogLevel}
参数
  • APP
示例
{
const app = new Realm.App(getAppConfig());
Realm.App.Sync.setLogger(app, (level, message) => console.log(`[${level}] ${message}`));
const user = await app.logIn(credentials);
const realm = await Realm.open(getRealmConfig(user));
}
Realm.App.Sync.setLogLevel(应用程序,级别)
静态

设置同步日志级别。 您只能设置日志级别一次,并且必须在创建 App 实例之后但在打开任何 Realm 之前进行设置。

参数
  • 等级
    • 类型: LogLevel
    • 新的日志级别。

示例
{
const app = new Realm.App(getAppConfig());
Realm.App.Sync.setLogLevel(app, "all");
const user = await app.logIn(credentials);
const realm = await Realm.open(getRealmConfig(user));
}
Realm.App.Sync.setUserAgent(app, userAgent)
静态

设置创建会话时将发送到 Realm 对象服务器的用户代理字符串的应用程序部分。

该方法只能在第一个 Realm 打开到点时调用。此后,用户代理无法再更改。

参数
  • 用户代理
    • 类型: string
    • 用户代理描述

ClientResetConfiguration

这描述了用于配置客户端重置的选项。

类型
Object
属性:
  • 模式
    • 类型: string
    • “manual”(已弃用,另请参阅Realm.App.Sync.initiateClientReset() )、“discardUnsyncedChanges”(从服务器下载新副本)、“recoverUnsyncedChanges”(合并远程和本地未同步更改)或“recoverOrDiscardUnsyncedChanges”(从服务器(如果无法恢复未同步的更改)

  • onBefore 可选
    • 类型: callback(realm)null
    • 在 sync 启动客户端重置之前调用(仅适用于“discardUnsyncedChanges”、“recoverUnsyncedChanges”或“recoverOrDiscardUnsyncedChanges”模式)。

  • onAfter 可选
    • 类型: callback(beforeRealm, afterRealm)null
    • 在执行客户端重置后调用; beforeRealmafterRealm是客户端重置前后 Realm 的实例(仅适用于“discardUnsyncedChanges”、“recoverUnsyncedChanges”或“recoverOrDiscardUnsyncedChanges”模式)。

  • onFallback 可选
    • 类型: callback(session, path)null
    • 在恢复或丢弃失败时调用(仅适用于“recoverUnsyncedChanges”或“recoverOrDiscardUnsyncedChanges”模式)。

  • onManual 可选
    • 类型: callback(session, path)null
    • 执行手动客户端重置 - 另请参阅Realm.App.Sync.initiateClientReset() (仅限“手动”模式)。

downloadBeforeOpenBehavior

如果要等待下载同步 Realm 完成后再打开它,则为默认行为设置。

InitialSubscriptionsConfiguration

可选对象,用于配置打开 Realm 时使用的一组初始 Flexible Sync 订阅的设置。 如果指定了此项,则在这组订阅与服务器完全同步之前,不会解析Realm.open

示例:

const config: Realm.Configuration = {
  sync: {
    user,
    flexible: true,
    initialSubscriptions: {
      update: (subs, realm) => {
        subs.add(realm.objects('Task'));
      },
      rerunOnOpen: true,
    },
  },
  // ... rest of config ...
};
const realm = await Realm.open(config);

// At this point, the Realm will be open with the data for the initial set
// subscriptions fully synchronized.
类型
Object
属性:
  • update
    • 类型: callback(realm)
    • 使用Realm.App.Sync~MutableSubscriptionSet实例和Realm实例调用回调,以允许您设置初始订阅集。 有关更多信息,请参阅Realm.App.Sync.SubscriptionSet#update

  • rerunOnOpen
    • 类型: Boolean
    • 可选标志。 如果为true ,则每次打开 Realm 时都会重新运行update回调(例如 每次用户打开您的应用时),否则(默认情况下)仅当 Realm 尚不存在时才会运行。

logCallback(级别,消息)

使用自定义记录器检测 Atlas Device Sync 客户端时传递给Realm.App.Sync.setLogger的回调。

参数
  • 等级
    • 类型: number
    • 日志条目的级别介于 0 到 8(含)之间。 将其用作['all', 'trace', 'debug', 'detail', 'info', 'warn', 'error', 'fatal', 'off']的索引以获取级别的名称。

  • message
    • 类型: string
    • 日志条目的消息。

日志级别
类型
"all""trace""debug""detail""info""warn""error""fatal""off"
openLocalRealmBehavior

如果要立即打开同步的 Realm 并开始处理,则使用默认行为设置。 如果这是您第一次打开 Realm,则在背景下载服务器数据时,Realm 将为空。

OpenRealmBehaviorConfiguration

指定如何打开同步 Realm。

类型
Object
属性:
  • 类型
    • 类型: string
    • 如何打开 Realm - “downloadBeforeOpen”等待下载完成或“openImmediately”打开本地 Realm

  • timeOut 可选
    • 类型: number
    • 等待下载的时间(以毫秒为单位)。 默认值:无穷大

  • timeOutBehavior 可选
    • 类型: string
    • 下载超时时该怎么办 — 使用“openLocalRealm”打开本地 Realm,或使用“throwException”抛出异常。

提供程序类型

身份验证提供者的类型,用于对用户进行身份验证。

类型
"anon-user""api-key""local-userpass""custom-function""custom-token""oauth2-google""oauth2-facebook""oauth2-apple"
SSLConfiguration

这描述了使用 Atlas Device Sync 创建Realm实例的不同选项。

类型
Object
属性:
  • 验证
    • 类型: boolean
    • 指示是否必须验证 SSL 证书。 默认值为true

  • certificatePath
    • 类型: string
    • 查找受信任 SSL 证书的路径。

  • validateCertificates
    • 类型: sslValidateCallback
    • 用于接受或拒绝服务器的 SSL 证书的回调函数。

Realm.App.Sync.SubscriptionOptions

选项 Realm.App.Sync.SubscriptionSet.add

类型
Object
属性:
  • throwOnUpdate
    • 类型: booleanundefined
    • 默认情况下,添加与现有订阅同名但不同查询的订阅将使用新查询更新现有订阅。 如果throwOnUpdate设置为 true,则添加具有相同名称但不同查询的订阅将引发异常。 添加具有相同名称和查询的订阅始终不需要执行任何操作。

SyncConfiguration

本节介绍了用于创建具有 Atlas App Services 同步功能的Realm实例的不同选项。

类型
Object
属性:
  • 灵活
    • 类型: boolean
    • 是否使用Flexible Sync(如果为true )或基于分区的同步(默认)

  • 分区值
    • 类型: stringnumberBSON.ObjectIdnull
    • 分区键的值。 仅在使用基于分区的同步时有效。

  • onError 可选
    • 类型: callback(session, syncError)
    • 在错误情况下调用的回调函数。 回调函数会传递两个参数: sessionsyncError 。 如果设置syncError.name == "ClientReset"syncError.pathsyncError.configsyncError.readOnly为 true(已弃用,请参阅Realm.App.Sync~ClientResetConfiguration )。 否则, syncError最多可以有五个属性: namemessageisFatalcategorycode

  • customHttp headers 可选
    • 类型: Object
    • 自定义 HTTP headers 的映射(字符串,字符串)。

  • newRealmFileBehavior 可选
    • 类型: OpenRealmBehaviorConfiguration
    • 是创建新的文件并在背景中同步,还是等待文件同步。如果未设置,则会在打开之前下载 Realm。

  • existingRealmFileBehavior 可选
    • 类型: OpenRealmBehaviorConfiguration
    • 是打开现有文件并在背景同步,还是等待文件同步完成后再打开。如果未设置,则会在打开之前下载 Realm。