Docs Menu
Docs Home
/ /
Sincronizar datos

Transmitir datos a Atlas - Swift SDK

Nuevo en la versión 10.29.0.

Puedes utilizar Ingesta de datos para transmitir datos desde la aplicación cliente a una aplicación Atlas App Services habilitada para Flexible Sync.

Es posible que desee sincronizar datos unidireccionalmente en aplicaciones de IoT, como un sensor meteorológico que envía datos a la nube. La ingesta de datos también es útil para escribir otros tipos de datos inmutables donde no se requiere resolución de conflictos, como la creación de facturas desde una aplicación de comercio electrónico o el registro de eventos de la aplicación.

La ingesta de datos está optimizada para proporcionar mejoras de rendimiento para cargas de trabajo pesadas de solo inserción del lado del cliente.

1

Puede sincronizar datos unidireccionalmente cuando ese objeto es un AsymmetricObject. Defina un AsymmetricObject derivando de 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
}

Para obtener más información sobre cómo definir AsymmetricObject un, consulte: Definir un AsymmetricObject.

2

Para transmitir datos desde el cliente a su aplicación backend, debe conectarse a un backend de App Services y autenticar a un usuario.

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
}

La ingesta de datos es una función de Flexible Sync, por lo que la aplicación a la que te conectas debe usar Flexible Sync.

3

Una vez que tenga un usuario autenticado, puede abrir un dominio sincronizado mediante flexibleSyncConfiguration(). Especifique los AsymmetricObject tipos que desea sincronizar.

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

A diferencia de la sincronización bidireccional, la ingesta de datos no utiliza una suscripción de sincronización flexible.

Nota

Dominios sincronizados y no sincronizados mixtos en proyectos

El AsymmetricObject tipo es incompatible con dominios no sincronizados. Si su proyecto utiliza un dominio sincronizado y uno no sincronizado, debe pasar explícitamente un subconjunto de clases en la configuración del dominio para excluir el tipo del AsymmetricObject dominio no sincronizado.

El descubrimiento automático de esquemas significa que abrir un reino no sincronizado sin excluir específicamente AsymmetricObject de la configuración puede generar un error relacionado con el intento de usar un tipo de objeto incompatible.

4

Una vez que tenga un reino abierto, puede crear un AsymmetricObject dentro de una transacción de escritura usando create(_ type:, value:).

@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
])
}
}

No se pueden leer estos objetos. Una vez creados, se sincronizan con el backend de App Services y la base de datos Atlas vinculada.

Atlas Device Sync gestiona completamente el ciclo de vida de estos datos. Se mantiene en el dispositivo hasta que la sincronización de Data Ingest se completa y luego se elimina del dispositivo.

Volver

Eventos del reino récord

En esta página