Adicionar Device Sync a um aplicativo - Kotlin SDK
Nesta página
- Device Sync
- Modelo de dados
- Assinaturas
- Permissões de usuário
- Pré-requisitos
- Sobre os exemplos nesta página
- Habilitar o Device Sync nos App Services
- Adicionar sincronização ao seu aplicativo cliente
- Instalar a distribuição de sincronização do Kotlin SDK
- Conecte-se ao backend do Atlas App Services
- Autenticar um usuário
- Definir a configuração de sincronização
- Abrir o Realmsincronizado
- Use o Realm
- Próximos passos
Esta página contém informações sobre o Device Sync, seus conceitos básicos e como adicionar o Sync a um aplicativo cliente com o Realm Kotlin SDK. Depois de adicionar o Sync ao seu aplicativo, você pode acessar um domínio sincronizado do cliente.
Já está familiarizado com o Device Sync? Vá para a seção Habilitar a Device Sync nos App Services para começar.
Device Sync
O Device Sync sincroniza dados entre dispositivos cliente e o Atlas. Os dados são mantidos em um dispositivo, mesmo quando estiver off-line. Quando o dispositivo tem uma conexão de rede, o Device Sync carrega e baixa dados em background e gerencia a resolução de conflitos.
Os dados sincronizados entre seu aplicativo cliente e o Atlas são determinados pelas permissões de um usuário para acessar dados qualificados. Os dados elegíveis são a interseção de:
Modelo de dados: suas informações de tipo de dados
Queries de assinatura: as condições que definem quais dados armazenar
Permissões: as permissões baseadas em funções necessárias para interagir com dados que atendam às condições especificadas
Para obter uma explicação detalhada do Device Sync, consulte Introdução ao Atlas Device Sync na documentação do Atlas App Services .
Modelo de dados
O modelo de dados do Device Sync define os tipos de objeto que você pode sincronizar. Ele contém um esquema do lado do cliente e do lado do servidor:
Realm schema: o modelo de objetos em seu aplicativo cliente que define seus dados em Kotlin.
Esquema do Atlas App Services : o esquema no Atlas App Services que define seus dados no BSON.
Ambos os esquemas devem ser consistentes entre si para sincronizar dados.
Você pode definir o modelo de dados do Device Sync em um aplicativo cliente primeiro ou no Atlas primeiro:
Para definir seu modelo de dados por meio do aplicativo cliente , primeiro defina um modelo de objetos diretamente no código do aplicativo cliente . Em seguida, você pode usar o modo de desenvolvimento para gerar automaticamente um esquema correspondente do App Services. O modo de desenvolvimento é uma configuração que permite ao Device Sync inferir e atualizar esquemas com base em modelos de dados do lado do cliente quando você sincroniza dados do cliente. A seção Habilitar a Device Sync no App Services descreve como habilitar a Device Sync com o modo de desenvolvimento em seu aplicativo cliente .
Se você já tiver dados no Atlas e preferir definir seu modelo de dados por meio do Atlas primeiro, consulte Sincronizar dados no Atlas com um aplicativo de cliente na documentação do App Services.
Observação
Mapeamento de modelo de dados em App Services
Para saber mais sobre como os dados são mapeados entre o cliente e o Atlas, consulte Modelar dados com o Device Sync - Kotlin SDK.
Assinaturas
Uma assinatura é uma query do lado do cliente para objetos em seu modelo de dados. Atlas App Services sincroniza apenas objetos que correspondem à query. Você pode definir várias queries em seu aplicativo cliente. Você deve definir pelo menos uma query para cada tipo de objeto em seu modelo de dados.
Atlas App Services garante que suas queries do lado do cliente sejam consistentes com seu esquema do Atlas App Services por meio de campos de query. Esses são os campos do seu modelo de dados que podem ser usados em uma query de assinatura. Você não pode definir uma assinatura usando um campo que não está em seus campos de query.
Quando o Modo de desenvolvimento está habilitado, o Atlas App Services adiciona automaticamente os campos que aparecem nas queries do seu cliente como campos de query. Você também pode adicionar e remover manualmente campos de query por meio da interface do usuário do Atlas App Services . Para mais informações, consulte Campos consultáveis na documentação do Atlas App Services .
Permissões de usuário
O App Services usa permissões baseadas em função para controlar os dados que os usuários podem ler e escrever:
Quando um usuário tem permissões de leitura, o Device Sync baixa os dados correspondentes à query de assinatura para o cliente.
Quando um usuário tem permissões de gravação, o Atlas permite gravações nos dados sincronizados e carrega os dados gravados localmente no backend.
Você pode definir e gerenciar funções na interface do usuário do Atlas App Services . Ao ativar a Sincronização, você seleciona uma função padrão, que pode ser modificada mais tarde. Para mais informações, consulte Permissões baseadas em role na documentação do Atlas App Services .
Pré-requisitos
Você pode adicionar o Device Sync a um aplicativo de várias maneiras, dependendo do estado do aplicativo e dos seus dados. Este guia descreve como adicionar a sincronização a um aplicativo cliente existente usando o Modo de desenvolvimento. Este guia pressupõe que seu aplicativo use o Realm Kotlin SDK e que você já definiu um modelo de dados no código do cliente.
Como o Device Sync conecta seu aplicativo cliente ao backend do Atlas App Services por meio de um Atlas App Services , você precisa seguir antes de começar:
Um aplicativo Atlas App Services com autenticação ativada. Para saber como, consulte Criar um App Services App do App Services na documentação do Atlas App Services .
Confirme que seu aplicativo pode se conectar ao back-end do Atlas App Services . Para saber como, consulte Conectar-se ao Atlas App Services - Kotlin SDK.
Sobre os exemplos nesta página
Os exemplos nesta página referem-se a um exemplo do aplicativo Kotlin Todo com um Modelo de dados Realm já definido que inclui um objeto List
contendo uma lista de objetos Item
:
class List : RealmObject { var _id: ObjectId = ObjectId() var name: String = "" var ownerId: String = "" var items: RealmList<Item> = realmListOf() } class Item : RealmObject { var _id: ObjectId = ObjectId() var name: String = "" var complete: Boolean = false }
Habilitar o Device Sync nos App Services
Você deve primeiro ativar o Device Sync em seu aplicativo Atlas App Services antes de adicionar a sincronização ao seu aplicativo cliente.
Para habilitar o Device Sync em seu aplicativo, conclua as etapas descritas no procedimento Configurar e habilitar o Atlas Device Sync na documentação do Atlas App Services .
Durante esse processo, você pode escolher se deseja ativar o Modo de desenvolvimento e pode selecionar uma função padrão para os usuários do seu aplicativo. Para obter mais informações sobre as configurações disponíveis, consulte Configurações de sincronização na documentação do App Services.
Dica
Recomendamos ativar o modo de desenvolvimento quando ativar a sincronização pela primeira vez e, em seguida, desabilitá-lo antes que o aplicativo vá para a produção. Para mais informações, consulte Modo de desenvolvimento na documentação do Atlas App Services .
Para nosso aplicativo de exemplo , ativamos a Device Sync com o modo de desenvolvimento e, em seguida, adicionamos a função padrão "O usuário pode ler e escrever todos os dados". Isso significa que, para um usuário autorizado com uma conexão de rede, o Device Sync baixa os dados qualificados para o cliente e o Atlas permite as gravações no cliente e, em seguida, sincroniza-as com o backend. Para saber mais sobre o que acontece quando um usuário autorizado não tem uma conexão de rede, consulte Compensating Writes.
Adicionar sincronização ao seu aplicativo cliente
Depois de configurar e habilitar a sincronização no Atlas App Services, você poderá adicionar a sincronização à sua aplicação cliente.
Instalar a distribuição de sincronização do Kotlin SDK
Atualize suas dependências para incluir a distribuição de sincronização do Realm Kotlin SDK.
Conecte-se ao backend do Atlas App Services
Passe seu ID do aplicativo para um cliente App
para inicializar o aplicativo. Para obter sua ID do aplicativo na interface do usuário do Atlas App Services , consulte Encontrar sua ID do aplicativo na documentação do Atlas App Services .
Para nosso aplicativo de exemplo , passamos nosso ID do aplicativo para inicializar um App
com valores de configuração padrão:
// Replace `YOUR_APP_ID` with your Atlas App ID val app = App.create(YOUR_APP_ID)
Para mais informações sobre como acessar e configurar o App cliente, consulte Inicializar o App Client.
Autenticar um usuário
Autentique um usuário em seu aplicativo de cliente usando um fornecedor de autenticação que você habilitou.
Para nosso aplicativo de exemplo , conectamos um usuário usando autenticação anônima:
// Authenticate the Atlas App Services user val myAuthenticatedUser = app.login(Credentials.anonymous())
Para obter mais informações sobre como autenticar usuários em seu aplicativo, consulte Criar e autenticar usuários - Kotlin SDK.
Definir a configuração de sincronização
O Device Sync requer um objeto SyncConfiguration para abrir um Realm sincronizado. Observe que isso é diferente do objeto RealmConfiguration
usado para abrir um Realm não sincronizado.
O objeto SyncConfiguration
exige o seguinte:
Usuário: o objeto de usuário autenticado.
Esquema: todos os tipos de objetos que você deseja incluir neste domínio.
Assinatura inicial: a consulta de assinatura que especifica os dados a serem sincronizados quando o Realm sincronizado é aberto pela primeira vez. Você pode atualizar suas assinaturas depois que o Realm for aberto. Consulte Gerenciar assinaturas de sincronização - Kotlin SDK para obter mais informações.
Para obter parâmetros de configuração adicionais, consulte Configurar e abrir um domínio sincronizado - Realm Kotlin SDK.
Para nosso aplicativo de exemplo , definimos uma configuração com:
um esquema que inclui nossos objetos
List
eItem
uma assinatura inicial que consulta todos os objetos
List
que o usuário possui e todos os objetosItem
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 em seu esquema
O esquema de configuração de sincronização deve incluir todos os tipos de objeto com os quais você deseja trabalhar em seu Realm sincronizado. Se você tentar referenciar ou gravar um objeto de um tipo de objeto que não esteja em seu esquema, o Realm retornará um erro de validação de esquema .
Abrir o Realmsincronizado
Use a configuração definida para abrir o domínio sincronizado. Quando o domínio é aberto com sucesso, a query de assinatura inicial determina quais dados sincronizar com o cliente. Se o Modo de desenvolvimento estiver habilitado, o Atlas App Services adicionará automaticamente quaisquer campos de query com base na query definida em seu esquema.
Para nosso aplicativo de exemplo, passamos nosso objeto config
para realm.open()
para abrir um domínio sincronizado e, em seguida, aguardamos que nossas assinaturas sejam sincronizadas com o 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()
Como temos o Modo de desenvolvimento ativado, o App Services adicionou automaticamente os seguintes campos de query com base em nossa assinatura inicial:
_id
(Sempre incluído)ownerId
complete
Use o Realm
Agora que você abriu o Realm sincronizado configurado, pode trabalhar com seus dados no Realm. Enquanto você trabalha com dados locais, um thread em segundo plano integra, carrega e baixa conjuntos de alterações de forma eficiente.
A sintaxe para ler, escrever e observar alterações é idêntica à sintaxe para domínios não sincronizados. No entanto, há considerações adicionais ao escrever dados em um Realm sincronizado. Para obter mais informações, consulte Gravar dados em um domínio sincronizado - Realm Kotlin SDK.
Para nosso aplicativo de exemplo , escrevemos um novo objeto List
e Item
e, em seguida, os copiamos para o Realm 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)
Os objetos gravam com sucesso no dispositivo e, em seguida, sincronizam com o Atlas porque:
Ambos os objetos estão dentro dos parâmetros da consulta de assinatura (o
List
é de propriedade do usuário e oItem
está incompleto).O usuário atual tem permissão para gravar dados no backend (a função permite que usuários autorizados leiam e escrevam todos os dados).
Se nossa operação de gravação não corresponder à query ou o usuário atual não tiver as permissões necessárias, o Realm reverterá a gravação com uma operação de erro não fatal chamada gravação compensatória.
Próximos passos
Depois que seu aplicativo estiver sincronizando com sucesso os dados desejados com o Atlas, você poderá saber mais sobre como usar a sincronização com o Kotlin SDK:
Configurar e abrir um domínio sincronizado - Realm Kotlin SDK: saiba mais sobre as opções de configuração do cliente de aplicativo disponíveis, como definir um nome de aplicativo de depuração, fornecer cabeçalhos de solicitação personalizados ou especificar um despachante.
Gerenciar assinaturas de sincronização - Kotlin SDK: saiba como definir e gerenciar as queries de assinatura em seu aplicativo.
Gravar dados em um domínio sincronizado - Realm Kotlin SDK: saiba mais sobre como escrever em um Realm sincronizado , como lidar com erros de gravação compensatórios e como agrupar gravações para melhorar o desempenho.
Gerenciar uma sessão de sincronização - Kotlin SDK: saiba como gerenciar a comunicação com o App Services por meio de sessões de sincronização.
Lidar com erros de sincronização - Kotlin SDK: saiba como lidar com erros de sincronização que podem ocorrer, incluindo redefinições do cliente.