Docs Menu
Docs Home
/ /
Sincronizar datos

Agregar sincronización de dispositivos a una aplicación - Swift SDK

Tip

Esta página contiene información sobre cómo añadir Sincronización de dispositivos a una aplicación. Si busca información sobre qué es Sincronización de dispositivos y cómo funciona, consulte: Servicios de aplicaciones: Sincronizar datos.

Antes de poder acceder a un reino sincronizado desde el cliente, debe Habilite la sincronización en la interfaz de usuario de Atlas App Services. Durante este proceso, debe definir campos consultables que coincidan con los campos de su esquema. También debe definir permisos de lectura y escritura para los usuarios de la aplicación.

En este ejemplo, nuestro modelo incluye un ownerId campo que se asigna al user.id del usuario de Flexible Sync.

class Todo: Object {
@Persisted(primaryKey: true) var _id: ObjectId
@Persisted var name: String = ""
@Persisted var ownerId: String
@Persisted var status: String = ""
convenience init(name: String, ownerId: String) {
self.init()
self.name = name
self.ownerId = ownerId
}
}
1

Pase el ID de la aplicación para su aplicación, que puede encontrar en la interfaz de usuario de servicios de aplicaciones.

let app = App(id: FLEX_SYNC_APP_ID) // Replace FLEX_SYNC_APP_ID with your Atlas App ID
2

Autenticar un usuario en tu proyecto cliente. Aquí usaremos autenticación anónima.

func login() async throws -> User {
// Authenticate with the instance of the app that points
// to your backend. Here, we're using anonymous login.
let user = try await app.login(credentials: Credentials.anonymous)
print("Successfully logged in user: \(user)")
return user
}
3

Abra el dominio como un dominio sincronizado. Puede especificar si un dominio sincronizado debe descargar datos antes de abrirse. Aquí, usamos una configuración de sincronización flexible y especificamos que el SDK siempre debe descargar las actualizaciones más recientes antes de abrir el dominio.Arrancamos el dominio con una suscripción inicial. También especificamos los tipos de objeto que queremos incluir en este dominio.

Tip

Si su aplicación accede a Realm en un contexto async/await, marque el código con @MainActor para evitar fallas relacionadas con subprocesos.

@MainActor
func openSyncedRealm(user: User) async {
do {
var config = user.flexibleSyncConfiguration(initialSubscriptions: { subs in
subs.append(
QuerySubscription<Todo> {
$0.ownerId == user.id
})
})
// Pass object types to the Flexible Sync configuration
// as a temporary workaround for not being able to add a
// complete schema for a Flexible Sync app.
config.objectTypes = [Todo.self]
let realm = try await Realm(configuration: config, downloadBeforeOpen: .always)
useRealm(realm, user)
} catch {
print("Error opening realm: \(error.localizedDescription)")
}
}

La sintaxis para leer, escribir y observar cambios en un dominio sincronizado es idéntica a la de los dominios no sincronizados. Mientras trabaja con datos locales, un subproceso en segundo plano integra, carga y descarga conjuntos de cambios de forma eficiente.

El siguiente código crea un nuevo objeto Task y lo escribe en el reino:

@MainActor
func useRealm(_ realm: Realm, _ user: User) {
// Add some tasks
let todo = Todo(name: "Do laundry", ownerId: user.id)
try! realm.write {
realm.add(todo)
}
}

Importante

Al usar la sincronización, evite escribir en el hilo principal

Dado que Realm realiza integraciones de sincronización en un hilo en segundo plano, si escribes en tu reino en el hilo principal, existe una pequeña posibilidad de que tu interfaz de usuario parezca bloquearse mientras espera a que el hilo de sincronización en segundo plano finalice una transacción de escritura. Por lo tanto, se recomienda no escribir en el hilo principal al usar la sincronización de dispositivos.

Cada transacción de escritura para un conjunto de suscripciones tiene un coste de rendimiento. Si necesita realizar varias actualizaciones a un objeto de Realm durante una sesión, considere mantener los objetos editados en memoria hasta que se completen todos los cambios. Esto mejora el rendimiento de la sincronización al escribir solo el objeto completo y actualizado en su reino, en lugar de cada cambio.

Volver

Sincronizar datos

En esta página