sincronização baseada em partição - Kotlin SDK
Nesta página
- Valor da partição
- Abra um Realm de sincronização baseado em partição
- Configurar um sincronização baseada em partição Realm
- Verificar o progresso do upload e download de uma sessão de sincronização
- Migrar da sincronização baseada em partição para a Flexible Sync
- Atualizando o código do cliente após a migração
A sincronização baseada em partição é um modo mais antigo de usar o Atlas Device Sync com o Realm Kotlin SDK. Recomendamos usar o Flexible Sync para novos aplicativos. As informações nesta página são para usuários que ainda estão usando a sincronização baseada em partições.
Dica
O Realm Kotlin SDK v1.9.0 e mais recente oferece suporte à capacidade de migrar da sincronização baseada em partição para a Flexible Sync. Para obter mais informações, consulte: Migrar da sincronização baseada em partição para a Flexible Sync.
Valor da partição
Quando você seleciona sincronização baseada em partição para a configuração do aplicativo de backend, a implementação do cliente deve incluir um valor da partição}. Esse é o valor do campo da chave da partição que você seleciona ao configurar a sincronização baseada em partição.
O valor da partição determina quais dados o aplicativo cliente pode acessar.
Você deve fornecer um valor da partição quando abrir um Realm sincronizado.
Abra um Realm de sincronização baseado em partição
Para abrir um Realm de sincronização baseada em partição , passe um usuário, uma partição e um conjunto de esquemas de Objeto de Realm para SyncConfiguration.Builder(). Em seguida, passe a configuração para Realm.open() para abrir uma instância do Realm:
val app = App.create(YOUR_APP_ID) runBlocking { val user = app.login(Credentials.anonymous()) val config = SyncConfiguration.Builder(user, PARTITION, setOf(/*realm object models here*/)) // specify name so realm doesn't just use the "default.realm" file for this user .name(PARTITION) .build() val realm = Realm.open(config) Log.v("Successfully opened realm: ${realm.configuration.name}") realm.close() }
Configurar um sincronização baseada em partição Realm
Para ajustar definições de configuração específicas, use as opções fornecidas por SyncConfiguration.Builder:
val app = App.create(YOUR_APP_ID) runBlocking { val user = app.login(Credentials.anonymous()) val config = SyncConfiguration.Builder(user, PARTITION, setOf(/*realm object models here*/)) .maxNumberOfActiveVersions(10) .waitForInitialRemoteData() .name("realm name") .build() val realm = Realm.open(config) Log.v("Successfully opened realm: ${realm.configuration}") realm.close() }
Verificar o progresso do upload e download de uma sessão de sincronização
Observação
O ouvinte progressAsFlow()
no Kotlin SDK só está disponível atualmente para domínios que usam a Sincronização baseada em partição. O Kotlin SDK ainda não é compatível com ouvintes de progresso para o Flexible Sync.
Você pode monitorar o progresso do upload e download de uma sessão de sincronização. A sessão de sincronização começa quando você abre um Realm sincronizado. Para obter mais informações, consulte Gerenciar uma sessão de sincronização.
Para monitorar o progresso do upload e download da sincronização, chame SyncSession.progressAsFlow()
Este método retorna um fluxo de eventos de progresso . Progress
fornece o número total de bytes transferíveis e os bytes restantes a serem transferidos.
syncSession.progressAsFlow()
recebe dois argumentos:
Um enum de direção que pode ser definido como
UPLOAD
ouDOWNLOAD
. Especifica que o fluxo de progresso rastreia uploads ou downloads.Um enum ProgressMode que pode ser definido como:
INDEFINITELY
: define as notificações para continuar até que a chamada de resposta seja cancelada.CURRENT_CHANGES
: define as notificações para continuar até que somente os bytes atualmente transferíveis sejam sincronizados.
val stream = realm.syncSession.progressAsFlow( Direction.UPLOAD, ProgressMode.CURRENT_CHANGES ) stream.collect { progress -> if (progress.transferableBytes == progress.transferredBytes) { Log.i("Upload complete") } }
Migrar da sincronização baseada em partição para a Flexible Sync
Você pode migrar seu Realm Mobile Sync do App Services da sincronização baseada em partição para a Flexible Sync. A migração é um processo automático que não exige alterações no código do aplicativo. A migração automática requer o Realm Kotlin SDK versão 1.9.0 ou mais recente.
A migração permite que você mantenha os usuários existentes do App Services e a configuração de autenticação. O Flexible Sync fornece opções de configuração de permissões mais versáteis e sincronização de dados mais granular.
Para obter mais informações sobre como migrar seu aplicativo do App Services App da Partition-Based Sync para o Flexible Sync, consulte Migrar modos de Device Sync .
Atualizando o código do cliente após a migração
A migração automática da sincronização baseada em partição para a Flexible Sync não exige nenhuma alteração no código do cliente. No entanto, para suportar essa funcionalidade, o Realm lida automaticamente com as diferenças entre os dois modos de sincronização por:
Criando automaticamente assinaturas de Flexible Sync para cada Tipo de objeto de Realm em que
partitionKey == partitionValue
.Injetando um campo
partitionKey
em cada objeto, se ainda não existir um. Isso é necessário para a assinatura automática do Flexible Sync.
Se você precisar fazer atualizações no código do cliente após a migração, considere atualizar a base de código do cliente para remover a funcionalidade de migração oculta. Talvez você queira atualizar a base de código do cliente quando:
Você adiciona um novo modelo ou altera um modelo na base de código do cliente
Você adiciona ou altera funcionalidades que envolvem a leitura ou escrita de Objeto de Realm
Você deseja implementar um controle mais refinado sobre quais dados você sincroniza
Faça essas alterações para converter seu código de cliente de sincronização baseada em partição para usar o Flexible Sync:
Atualize seu SyncConfiguration.Builder() para usar o Flexible Sync. Isso envolve remover o
partitionValue
e adicionar um conjunto de assinaturas iniciais, se necessário.Adicione propriedades relevantes aos seus modelos de objetos para usar em suas assinaturas do Flexible Sync. Por exemplo, você pode adicionar uma propriedade
ownerId
para permitir que um usuário sincronize somente seus próprios dados.Remova as assinaturas automáticas do Flexible Sync e crie manualmente as assinaturas relevantes.
Para obter exemplos de estratégias de permissões de Flexible Sync , incluindo exemplos de como modelar dados para essas estratégias, consulte o Guia de permissões de Device Sync .
Remover e criar assinaturas manualmente
Quando você migra da sincronização baseada em partição para o Flexible Sync, o Realm cria automaticamente assinaturas ocultas do Flexible Sync para seu aplicativo. Da próxima vez que adicionar ou alterar subscrições, recomendamos que você:
Isso permite que você veja toda a sua lógica de assinatura junto em sua base de código para futura iteração e depuração.
Para obter mais informações sobre as assinaturas Flexible Sync geradas automaticamente, consulte Migrar aplicativo cliente para Flexible Sync.