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

将数据流式传输到 Atlas - Swift SDK

在此页面上

  • Overview
  • 从客户端应用程序单向同步数据
  • 定义非对称对象
  • 使用 App Services App 连接并进行身份验证
  • 打开 Realm
  • 创建非对称对象

10.29.0 版中的新增功能

您可以使用数据导入将数据从客户端应用程序流传输到启用了 Flexible Sync 的Atlas App Services App。

您可能希望在物联网(IoT)应用程序中单向同步数据,例如将数据发送到云的天气传感器。数据导入对于写入不需要冲突解决的其他类型的不可变数据也很有用,例如从零售应用程序创建发票或记录应用程序事件。

数据导入经过优化,可为繁重的客户端仅插入工作负载提供性能改进。

1

当该对象是 AsymmetricObject时,您可以单向同步数据。 通过从 AsymmetricObject 派生来定义AsymmetricObject:

class WeatherSensor: AsymmetricObject {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var deviceId: String
@Persisted var temperatureInFahrenheit: Float
@Persisted var barometricPressureInHg: Float
@Persisted var windSpeedInMph: Int
}

有关如何定义AsymmetricObject的更多信息,请参阅:定义 AsymmetricObject。

2

要将数据从客户端流式传输到后端应用程序,您必须连接到 App Services 后端并对用户进行身份验证。

let app = App(id: INSERT_APP_ID_HERE)
do {
let user = try await login()
await openSyncedRealm(user: user)
} catch {
print("Error logging in: \(error.localizedDescription)")
}
func login() async throws -> User {
let user = try await app.login(credentials: .anonymous)
return user
}

数据导入是Flexible Sync的一项功能,因此您连接的应用程序必须使用Flexible Sync。

3

拥有经过身份验证的用户后,您可以使用FlexibleSyncConfiguration()打开同步 Realm。 指定要同步的AsymmetricObject类型。

@MainActor
func openSyncedRealm(user: User) async {
do {
var asymmetricConfig = user.flexibleSyncConfiguration()
asymmetricConfig.objectTypes = [WeatherSensor.self]
let asymmetricRealm = try await Realm(configuration: asymmetricConfig)
await useRealm(asymmetricRealm, user)
} catch {
print("Error opening realm: \(error.localizedDescription)")
}
}

与双向同步不同,数据导入不使用Flexible Sync 订阅。

注意

在项目中混合使用同步和非同步 Realm

AsymmetricObject类型与非同步 Realm 不兼容。 如果您的项目同时使用同步和非同步 Realm,则必须在 Realm 配置中显式传递类的子集,以从非同步 Realm 中排除AsymmetricObject

自动模式发现意味着,在没有明确从配置中排除AsymmetricObject的情况下打开非同步域可能会引发与尝试使用不兼容的Realm 对象类型相关的错误。

4

打开Realm后,您可以使用create(_ type:, value:)在写事务(write transaction)中创建AsymmetricObject

@MainActor
func useRealm(_ asymmetricRealm: Realm, _ user: User) async {
try! asymmetricRealm.write {
asymmetricRealm.create(WeatherSensor.self,
value: [ "_id": ObjectId.generate(),
"deviceId": "WX1278UIT",
"temperatureInFahrenheit": 66.7,
"barometricPressureInHg": 29.65,
"windSpeedInMph": 2
])
}
}

您无法读取这些对象。 创建后,它们会同步到 App Services 后端和链接的 Atlas 数据库。

Atlas Device Sync 全面管理这些数据的生命周期。它会保留在设备上,直到数据摄入同步完成,然后从设备中删除。

后退

记录 Realm 事件