Docs Menu
Docs Home
/ /
Sincronizar datos del dispositivo

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

Esta página contiene información sobre Device Sync, sus conceptos básicos y cómo añadir Sync a una aplicación cliente con el SDK de Kotlin de Realm. Una vez que haya añadido Sync a su aplicación, podrá acceder a un realm sincronizado desde el cliente.

¿Ya conoces la Sincronización de dispositivos? ¡Sigue adelante! Habilite la sincronización del dispositivo en la sección Servicios de aplicaciones para comenzar.

Device Sync sincroniza los datos entre los dispositivos cliente y Atlas. Los datos se conservan en el dispositivo, incluso sin conexión. Cuando el dispositivo tiene conexión de red, Device Sync carga y descarga datos en segundo plano y gestiona la resolución de conflictos.

Los datos que se sincronizan entre tu aplicación cliente y Atlas se determinan por los permisos de un usuario para acceder a datos elegibles. Los datos elegibles son la intersección de:

  • Modelo de datos: información sobre su tipo de datos

  • Consultas de suscripción: las condiciones que definen qué datos almacenar

  • Permisos: los permisos basados ​​en roles necesarios para interactuar con datos que cumplen las condiciones especificadas

Para obtener una explicación detallada de la sincronización de dispositivos, consulte Introducción a la sincronización de dispositivos Atlas en la documentación de Atlas App Services.

El modelo de datos de sincronización de dispositivos define los tipos de objetos que se pueden sincronizar. Contiene un esquema del lado del cliente y del lado del servidor:

  • Esquema de reino: el modelo de objetos en su aplicación cliente que define sus datos en Kotlin.

  • Esquema de App Services: el esquema de Atlas App Services que define tus datos en BSON.

Ambos esquemas deben ser consistentes entre sí para sincronizar los datos.

Puede definir el modelo de datos de sincronización del dispositivo primero en una aplicación cliente o primero en Atlas:

Nota

Mapeo de modelos de datos en App Services

Para obtener más información sobre cómo se asignan datos entre el cliente y Atlas, consulte Datos de modelo con sincronización de dispositivos - SDK de Kotlin.

Una suscripción es una consulta del lado del cliente a objetos de tu modelo de datos. App Services solo sincroniza los objetos que coinciden con la consulta. Puedes definir varias consultas en tu aplicación cliente. Debes definir al menos una consulta para cada tipo de objeto de tu modelo de datos.

App Services asegura que las queries del lado del cliente sean consistentes con tu esquema de App Services mediante campos consultables. Estos son los campos de tu modelo de datos que pueden usarse en una query de suscripción. No es posible definir una suscripción usando un campo que no esté en sus campos consultables.

Cuando el modo de desarrollo está habilitado, App Services agrega automáticamente los campos que aparecen en las consultas de tus clientes como campos consultables. También puedes agregar y eliminar manualmente campos consultables a través de la interfaz de usuario de App Services. Para obtener más información, consulta Campos consultables en la documentación de App Services.

App Services utiliza permisos basados ​​en roles para controlar los datos que los usuarios pueden leer y guardar:

  • Cuando un usuario tiene permisos de lectura, Device Sync descarga los datos que coinciden con la consulta de suscripción al cliente.

  • Cuando un usuario tiene permisos de escritura, Atlas le permite escribir en los datos sincronizados y cargar datos escritos localmente en el backend.

Puedes definir y administrar roles en la interfaz de usuario de App Services. Al habilitar la sincronización, seleccionas un rol predeterminado, que puedes modificar posteriormente. Para obtener más información, consulta "Permisos basados en roles" en la documentación de App Services.

Puedes añadir Device Sync a una aplicación de varias maneras, según el estado de la aplicación y los datos. Esta guía describe cómo añadir Sync a una aplicación cliente existente mediante el modo de desarrollo. Se asume que tu aplicación utiliza el SDK de Kotlin de Realm y que ya has definido un modelo de datos en el código cliente.

Debido a que Device Sync conecta su aplicación cliente al backend de App Services a través de una aplicación Atlas App Services, debe seguir estos pasos antes de poder comenzar:

  1. Una aplicación de Atlas App Services con autenticación habilitada. Para saber cómo hacerlo, consulta "Crear una aplicación de App Services" en la documentación de App Services.

  2. Confirma que tu aplicación pueda conectarse al backend de App Services. Para saber cómo, consulta Conectarse a Atlas App Services - SDK de Kotlin.

Los ejemplos de esta página se refieren a una aplicación Kotlin Todo de ejemplo con un modelo de datos ya definido que incluye una List objeto que contiene una lista de Item objetos:

Ejemplo de modelo de datos de la aplicación ToDo
class List : RealmObject {
@PrimaryKey
var _id: ObjectId = ObjectId()
var name: String = ""
var ownerId: String = ""
var items: RealmList<Item> = realmListOf()
}
class Item : RealmObject {
@PrimaryKey
var _id: ObjectId = ObjectId()
var name: String = ""
var complete: Boolean = false
}

Primero debe habilitar la sincronización de dispositivos en su aplicación Atlas App Services antes de poder agregar la sincronización a su aplicación cliente.

Para habilitar la sincronización de dispositivos en su aplicación, complete los pasos descritos en el procedimiento Configurar y habilitar la sincronización de dispositivos Atlas en la documentación de Servicios de la aplicación.

Durante este proceso, puede elegir si desea habilitar el modo de desarrollo y seleccionar un rol predeterminado para los usuarios de su aplicación. Para obtener más información sobre las opciones de configuración disponibles, consulte "Configuración de sincronización" en la documentación de App Services.

Tip

Recomendamos habilitar el modo de desarrollo al habilitar la sincronización por primera vez y deshabilitarlo antes de que la aplicación entre en producción. Para obtener más información, consulte "Modo de desarrollo" en la documentación de App Services.

Para nuestra aplicación de ejemplo, habilitamos la Sincronización de Dispositivos con el Modo de Desarrollo y, a continuación, añadimos el rol predeterminado "El usuario puede leer y escribir todos los datos". Esto significa que, para un usuario autorizado con conexión de red, la Sincronización de Dispositivos descarga los datos válidos al cliente y Atlas permite las escrituras en el cliente y, a continuación, las sincroniza con el backend. Para obtener más información sobre qué sucede cuando un usuario autorizado no tiene conexión de red, consulte Compensación de Escrituras.

Después de haber configurado y habilitado la sincronización en Atlas App Services, puede agregar la sincronización a su aplicación cliente.

1

Actualice sus dependencias para incluir la distribución Sync del SDK Realm Kotlin.

2

Pase su ID de aplicación a un App cliente para inicializar la aplicación. Para obtener su ID de aplicación desde la interfaz de usuario de App Services, consulte "Encuentre su ID de aplicación" en la documentación de App Services.

Para nuestra aplicación de ejemplo, pasamos nuestro ID de aplicación para inicializar un App con valores de configuración predeterminados:

// Replace `YOUR_APP_ID` with your Atlas App ID
val app = App.create(YOUR_APP_ID)

Para obtener más información sobre cómo acceder y configurar el cliente de la aplicación, consulte Inicializar el cliente de la aplicación.

3

Autentica un usuario en tu aplicación cliente utilizando un proveedor de autenticación que hayas habilitado.

Para nuestra aplicación de ejemplo, iniciamos sesión como usuario mediante autenticación anónima:

// Authenticate the Atlas App Services user
val myAuthenticatedUser = app.login(Credentials.anonymous())

Para obtener más información sobre cómo autenticar usuarios en su aplicación, consulte Crear y autenticar usuarios - SDK de Kotlin.

4

La sincronización de dispositivos requiere un objeto SyncConfiguration para abrir un dominio sincronizado. Tenga en cuenta que esto es diferente del RealmConfiguration objeto utilizado para abrir un dominio no sincronizado.

El objeto SyncConfiguration requiere lo siguiente:

  • Usuario: el objeto de usuario autenticado.

  • Esquema: todos los tipos de objetos que desea incluir en este reino.

  • Suscripción inicial: la consulta de suscripción que especifica los datos que se sincronizarán al abrir el dominio sincronizado. Puede actualizar sus suscripciones una vez abierto el dominio. Consulte "Administrar suscripciones de sincronización - SDK de Kotlin" para obtener más información.

Para conocer parámetros de configuración adicionales, consulte Configurar y abrir un reino sincronizado - Kotlin SDK.

Para nuestra aplicación de ejemplo, definimos una configuración con:

  • un esquema que incluye nuestros objetos List y Item

  • una suscripción inicial que consulta todos los List objetos que posee el usuario y todos los Item objetos incompletos

// Define the configuration for the synced realm
val config =
// Pass the authenticated user and the set of
// all objects types you want to be able to sync
SyncConfiguration.Builder(
user = myAuthenticatedUser,
schema = setOf(List::class, Item::class)
)
// Define an initial subscription with queries that include
// the user's lists with incomplete items
.initialSubscriptions{ realm ->
add(realm.query<List>("ownerId == $0", myAuthenticatedUser.id),
name = "user-lists"
)
add(realm.query<Item>("complete = false"),
name = "incomplete-items"
)
}
.build()

Importante

Tipos de objetos en su esquema

El esquema de configuración de sincronización debe incluir todos los tipos de objeto con los que desea trabajar en el dominio sincronizado. Si intenta referenciar o escribir un objeto de un tipo que no está en su esquema, el dominio devuelve un error de validación del esquema.

5

Utilice la configuración definida para abrir el dominio sincronizado. Una vez abierto correctamente, la consulta de suscripción inicial determina qué datos sincronizar con el cliente. Si el modo de desarrollo está habilitado, App Services agrega automáticamente los campos consultables según la consulta definida en el esquema.

Para nuestra aplicación de ejemplo, pasamos nuestro objeto config a realm.open() para abrir un reino sincronizado y luego esperamos que nuestras suscripciones se sincronicen con el backend:

// Open the synced realm with the defined configuration
val realm = Realm.open(config)
Log.v("Successfully opened synced realm: ${realm.configuration.name}")
// Wait for initial subscriptions to sync to Atlas
realm.subscriptions.waitForSynchronization()

Debido a que tenemos habilitado el modo de desarrollo, App Services agregó automáticamente los siguientes campos como campos consultables en función de nuestra suscripción inicial:

  • _id (siempre incluido)

  • ownerId

  • complete

Ahora que has abierto el realm configurado y sincronizado, puedes trabajar con sus datos en el realm. Mientras trabajas con datos locales, un hilo en segundo plano integra de forma eficiente, sube y descarga conjuntos de cambios.

La sintaxis para leer, guardar y ver los cambios es idéntica a la sintaxis de los realms no sincronizados. Sin embargo, hay consideraciones adicionales al escribir datos en un realm sincronizado. Para obtener más información, consulta Escribir datos en un Synced Realm: Kotlin SDK.

Para nuestra aplicación de ejemplo, escribimos un nuevo objeto List y Item, luego los copiamos al reino sincronizado:

// Write List and Item objects to the synced realm
// Objects that match the subscription query are synced to Atlas
realm.write {
val list = List().apply {
name = "My Todo List"
ownerId = myAuthenticatedUser.id
items.add(Item().apply {
name = "Check email"
complete = false
})
}
copyToRealm(list)
}
realm.syncSession.uploadAllLocalChanges(30.seconds)

Los objetos se escriben correctamente en el dispositivo y luego se sincronizan con Atlas porque:

  • Ambos objetos están dentro de los parámetros de la consulta de suscripción (el List es propiedad del usuario y el Item está incompleto).

  • El usuario actual tiene permiso para escribir datos en el backend (el rol permite a los usuarios autorizados leer y escribir todos los datos).

Si nuestra operación de escritura no coincide con la consulta o el usuario actual no tiene los permisos necesarios, entonces Realm revierte la escritura con una operación de error no fatal llamada escritura compensatoria.

Una vez que su aplicación esté sincronizando exitosamente los datos deseados con Atlas, puede obtener más información sobre cómo usar Sync con el SDK de Kotlin:

Volver

Sincronizar datos del dispositivo