Menu Docs
Página inicial do Docs
/ /
Atlas Device SDKs
/ /

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.

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 .

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.

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 .

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 .

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:

  1. 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 .

  2. 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.

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 :

Exemplo de modelo de dados do aplicativo 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
}

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.

Depois de configurar e habilitar a sincronização no Atlas App Services, você poderá adicionar a sincronização à sua aplicação cliente.

1

Atualize suas dependências para incluir a distribuição de sincronização do Realm Kotlin SDK.

2

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.

3

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.

4

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 e Item

  • uma assinatura inicial que consulta todos os objetos List que o usuário possui e todos os objetos Item 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 .

5

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

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 o Item 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.

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:

Voltar

Sincronizar dados do dispositivo