Página inicial do Docs → Desenvolver aplicações → Atlas Device SDKs
Managed sessões de sincronização - Swift SDK
Nesta página
- Comportamento da conexão de sincronização
- Verifique a conexão de rede
- Suspender ou retomar uma sessão de sincronização
- Quando pausar uma sessão de sincronização
- Aguarde as alterações para fazer upload ou download
- Verificar o progresso do upload e download de uma sessão de sincronização
- Reconectar manualmente todas as sessões de sincronização
A abertura de um domínio sincronizado inicia uma SyncSession para esse domínio. O Realm Swift SDK fornece métodos para pausar e retomar manualmente uma sessão de sincronização.
Comportamento da conexão de sincronização
Novo na versão 10.41.0.
No Realm Swift SDK versão 10.41.0 e posterior, o App Services tem como padrão compartilhar uma única conexão com o servidor para todos os domínios sincronizados abertos. Esta é uma mudança em relação às versões anteriores, em que a abertura de mais de um Realm sincronizado abria conexões adicionais com o servidor. A conexão com o servidor é independente do SyncSession
e é baseada no usuário do App Services.
Você pode alterar esse comportamento na configuração do cliente do aplicativo.
Verifique a conexão de rede
Dica
O design offline do Realm significa que geralmente você não precisa verificar o estado atual da conexão de rede. Dito isto, a propriedade connectionState
está disponível se a sua aplicação chamar alguma indicação do estado da conexão.
Suspender ou retomar uma sessão de sincronização
Você pode suspender e retomar a sessão de sincronização no Realm. Pausar uma sessão de sincronização suspende apenas a sessão de sincronização desse realm. Se você tiver mais de um Realm aberto, a suspensão não afetará a sessão de sincronização de outros Realms.
Quando pausar uma sessão de sincronização
Para a maioria dos aplicativos, não é necessário pausar e retomar manualmente uma sessão de sincronização. No entanto, existem algumas circunstâncias em que você pode querer pausar ou suspenso uma sessão de sincronização:
Você só quer sincronizar depois que o usuário executar uma ação específica
Você só deseja sincronizar durante um determinado horário do dia
Você não quer tentar sincronizar quando a conectividade de rede estiver ruim
Você deseja forçar explicitamente uma sessão de sincronização para se conectar
No caso de uma conectividade de rede ruim, tentar continuamente estabelecer uma conexão de rede pode esgotar a bateria do dispositivo do usuário.
O caso de forçar explicitamente uma sessão de sincronização para se conectar é mais comumente relacionado a estar offline por algum tempo. O cliente de sincronização tenta se conectar e, em caso de falha, entra em backoff exponencial. After being offline for a long time, the client may not immediately reconnect. Pausar e retomar a sessão de sincronização força explicitamente a conexão.
Ao pausar uma sessão de sincronização, lembre-se do seguinte:
Se o cliente ficar offline por mais tempo do que o tempo máximo offline do cliente , o cliente não conseguirá retomar a sincronização e deverá fazer um reinício do cliente.
Pausar uma sessão de sincronização a pausa em ambas as direções. As alterações feitas pelo seu aplicativo no dispositivo não são sincronizadas com o backend, e as alterações nos dados no backend ou em outros dispositivos não são sincronizadas com o dispositivo. Não há como pausar apenas uploads ou pausar apenas downloads.
Não pause uma sessão de sincronização se quiser que um cliente pare permanentemente de sincronizar com o backend. Para parar permanentemente a sincronização, copie o conteúdo do Realm sincronizado em um Realm não sincronizado e use o Realm não sincronizado no cliente.
Não pause a sincronização para parar a sincronização por períodos indefinidos ou intervalos de tempo em meses e anos. A funcionalidade não foi projetada ou testada para esses casos de uso. Você pode encontrar uma série de problemas ao usá-lo dessa forma.
Aguarde as alterações para fazer upload ou download
Novidade na versão 10.45.0.
Para aguardar o upload ou download de todas as alterações do seu domínio sincronizado, chame realm.syncSession?.wait(for: ).
Este método utiliza um argumento ProgressDirection para especificar se deseja acompanhar o progresso do upload ou download.
Você pode usar esses métodos com a sintaxe async/await do Swift ou com a sintaxe de retorno de chamada. A versão de chamada de resposta, realm.syncSession?.wait(for:queue:block:), pode pegar uma fila para despachar a chamada de resposta e um bloco para invocar quando a espera for concluída.
Verificar o progresso do upload e download de uma sessão de sincronização
Observação
As notificações de progresso da Flexible Sync ainda não são totalmente suportadas. Ao usar a Flexible Sync, os downloads só relatam notificações após a integração das alterações. A sincronização baseada em partição fornece notificações contínuas à medida que o download das alterações progride. Os carregamentos relatam notificações de progresso contínuo para ambos os modos de sincronização.
Reconectar manualmente todas as sessões de sincronização
Novidade na versão 10.44.0.
O Realm detecta automaticamente quando um dispositivo recupera a conectividade depois de estar offline e tenta se reconectar usando uma estratégia de backoff incremental. Por exemplo, em plataformas Apple, o Realm escuta notificações de alteração de rede e Atlas Triggers automaticamente uma reconexão imediatamente após o recebimento de uma.
No Swift SDK versão 10.44.0 e posterior, você pode optar por trigger manualmente uma tentativa de reconexão com SyncSession.reconnect()
em vez de esperar pela duração do backoff incremental. Isso é útil se você tiver uma compreensão mais precisa das condições da rede e não quiser confiar na detecção automática de reconexão do Realm.
let syncSession = realm.syncSession! // Work with the realm. When you need to force the sync session to reconnect... syncSession.reconnect()
Quando você chama esse método, o SDK força todas as sessões de sincronização a tentar se reconectar imediatamente. Isso redefine todos os temporizadores usados para backoff incremental.
Chamar esse método não garante que o dispositivo possa se reconectar. Se o SDK receber um erro fatal ou se o dispositivo já estiver conectado ou tentando se conectar, chamar esse método não terá efeito.
Importante
Não é possível reconectar dentro da duração do tempo limite de leitura do soquete
O Realm tem um tempo limite de leitura de soquete padrão interno de 2 minutos, onde o Realm atingirá o tempo limite se uma operação de leitura não receber nenhum dado dentro de uma janela de 2 minutos. Se você chamar SyncSession.reconnect()
dentro dessa janela, o Swift SDK não tentará se reconectar.