Menu Docs
Página inicial do Docs
/ /
Serviços Atlas App
/ /

Reinícios do cliente

Nesta página

  • Visão geral
  • Lidar com uma redefinição de cliente
  • Recuperar alterações não sincronizadas
  • Descartar alterações não sincronizadas
  • Reinício do cliente manual
  • Exemplos
  • Habilitar ou desabilitar o modo de recuperação

Um erro de reinício do cliente é uma situação em que um domínio do cliente não consegue sincronizar dados com o backend do aplicativo. Clientes neste estado podem continuar executando e salvando dados localmente, mas não podem enviar ou receber conjuntos de alterações de sincronização até fazerem um reinício do cliente. Na maioria dos casos, SDKs do Realm oferecem métodos para gerenciar o reinício do cliente automaticamente.

Aviso

Por padrão, o processo de reinício do cliente tenta recuperar alterações não sincronizadas que foram salvas localmente com sucesso. Quando o aplicação cliente tiver alterações no esquema de quebra ou se o Modo de recuperação estiver desativado no servidor, o processo de reinício do cliente não poderá recuperar dados não sincronizados que possam ser mantidos localmente no dispositivo.

Os cenários de redefinição de cliente ocorrem quando o histórico do servidor é incompatível com o histórico do cliente. As causas mais comuns de redefinição de cliente são:

  • Falha no servidor do Atlas App Services: um servidor pode restaurar a partir de um backup que tenha uma versão anterior. Um reinício do cliente neste caso reiniciaria o cliente para a versão anterior e resultaria na perda de todas as alterações salvas no cliente que ainda não foram sincronizadas com o servidor.

  • Desativar e reativar a sincronização: Desativar e reativar a sincronização na interface do usuário do App Services faz com que todos os clientes precisem ser redefinidos.

  • Incompatibilidade de esquema do cliente/backend: se um aplicativo do cliente tenta sincronizar com o backend usando um esquema de objetos de Realm que não existe no backend, o cliente deverá executar um reinício do cliente. Isso se aplica somente em uma direção: se o esquema de backend contiver uma classe de objeto de Realm não usada com um cliente, esse cliente não precisará fazer o reinício do cliente.

  • Tempo máximo offline do cliente: quando um cliente não sincroniza com o backend em mais de tempo máximo offline do cliente dias, esse cliente não pode mais sincronizar alterações locais não sincronizadas com o back-end. O cliente deve descartar todas as alterações locais desde a última sincronização e baixar o status atual do domínio do back-end.

  • Alterações importantes no esquema: uma alteração significativa ou destrutiva, como alterar um tipo de propriedade ou uma chave primária, exige que você encerre e reative a sincronização. Isso cria um novo arquivo de Realm sincronizado com uma versão não relacionada ao arquivo do cliente. Nesse cenário, o processo de reinício do cliente não pode ser concluído automaticamente, e seu aplicativo precisa fornecer um gerenciador manual de reinício do cliente .

  • Atualização de um cluster compartilhado para um cluster dedicado: ao atualizar de um cluster compartilhado para um cluster dedicado, você deve encerrar a sincronização no cluster antigo. Depois de atualizar, você pode reativar a sincronização. Desativar e ativar a sincronização novamente faz com que todos os clientes precisem de um reinício do cliente.

  • Alterações na função da sessão: Ao usar o Flexible Sync, as alterações na função de sessão do Flexible Sync de um usuário resultam em uma redefinição do cliente. Todos os cenários a seguir resultam em uma redefinição do cliente:

    • modificações no servidor ao role da sessão

    • alterações no valor de expansões nas expressões "aplicar quando", ler ou gravar

    • alterações que qualificam o usuário para outra role de sessão

    Observação

    As alterações de esquema de ruptura exigem uma atualização de esquema de aplicativo

    Após uma alteração significativa no esquema:

    • Todos os clientes devem fazer um reinício do cliente manual.

    • Você deve atualizar os modelos de cliente afetados pela alteração do esquema de quebra.

Os SDKs detectam automaticamente a necessidade de redefinir o cliente. Eles podem executar automaticamente uma redefinição de cliente na maioria dos casos, exceto no caso de uma alteração de esquema de quebra.

Durante um reinício do cliente automático, o cliente:

  1. Baixa uma nova cópia do domínio do back-end.

  2. Executa um diff para entender as etapas necessárias para deixar a cópia original (local) do domínio no mesmo estado da nova cópia do backend.

  3. Aplica esse conjunto de etapas para transformar o domínio local em um estado onde ele pode ser sincronizado com o backend.

    Se não houver alterações no esquema, ou se existir apenas alterações não significativas no esquema, o SDK tentará recuperar todas as alterações locais que ainda não foram sincronizadas com o backend. Ele também aplicará inserções, atualizações e exclusões do backend que ainda não foram sincronizadas com o cliente.

    Se você optou por descartar as alterações não sincronizadas no SDK, ou se o Modo de recuperação não puder recuperar as alterações não sincronizadas, o SDK poderá descartar as alterações locais que ainda não foram sincronizadas com o backend. Em seguida, ele pode aplicar quaisquer inserções, atualizações e exclusões do backend que ainda não tenham sido sincronizadas com o cliente. Para voltar a descartar alterações locais, escolha a versão do SDK de sua preferência do modo de reinício do cliente recoverOrDiscard.

  4. Descarta a cópia nova. O aplicativo continua usando a cópia original do domínio com o diff aplicado.

Se houver uma alteração significativa no esquema, ou se o reinício do cliente automático falhar, o reinício do cliente voltará para um manipulador manual de reinício do cliente que seu aplicativo deverá definir. Os SDKs do Realm não podem fazer um reinício do cliente automaticamente se você faz uma alteração significativa no esquema.

O modo de reinício automático do cliente tem várias vantagens em comparação com a recuperação manual:

  • Seu aplicativo pode executar um reinício do cliente sem escrever qualquer lógica personalizada, exceto a especificação do modo. Você não precisa iniciar o reinício do cliente manualmente ou interagir com o objeto de erro.

  • Seu aplicativo pode executar uma redefinição do cliente sem fechar nenhum domínio, desconectar-se do aplicativo de backend ou reinicializar manualmente. Isso significa que você não precisa escrever nenhuma lógica para lidar com essas situações.

  • Usuários do aplicativo recebem notificações de alterações à medida que o domínio local é atualizado para corresponder ao estado do domínio de backend.

Quando a Recuperação de Cliente está ativada na configuração do Device Sync - como é o caso por padrão - os aplicativos clientes podem recuperar automaticamente as alterações não sincronizadas. Na maioria dos cenários, o aplicativo cliente pode detectar que ocorreu um erro de redefinição do cliente e iniciar um processo automatizado para lidar com a redefinição do cliente.

Após o reinício do cliente, a aplicação pode abrir e operar normalmente.

A Recuperação de Cliente pode recuperar dados não sincronizados em redefinições de cliente, exceto quando houve uma alteração de esquema de quebra. A Recuperação de Cliente aplica Regras de Redefinição de Cliente determinando como integrar dados não sincronizados do dispositivo.

Você pode optar por voltar a descartar alterações não sincronizadas caso o cliente não consiga recuperar dados não sincronizados. Nesse caso, os dados locais são descartados, mas o cliente pode executar automaticamente o reinício do cliente. Para voltar a descartar alterações locais, escolha a versão do SDK de sua preferência do modo de reinício do cliente recoverOrDiscard.

Em uma redefinição de cliente que não envolve uma alteração de esquema de quebra, os SDKs de Realm tentam recuperar alterações não sincronizadas. O SDK integra objetos criados localmente que não sincronizaram antes da redefinição do cliente. Essas regras determinam como os conflitos são resolvidos quando o backend e o cliente fazem alterações no mesmo objeto:

  • Se um objeto for excluído no servidor, mas for modificado no cliente de recuperação, a exclusão terá precedência e o cliente descartará a atualização.

  • Se um objeto for excluído no cliente em recuperação, mas não no servidor, o cliente aplicará a instrução de exclusão.

  • No caso de atualizações conflitantes no mesmo campo, a atualização do cliente é aplicada.

Aviso

Exclui alterações locais não sincronizadas permanentemente

Esse modo de reinício do cliente exclui permanentemente todas as alterações feitas localmente que ainda não foram sincronizadas com o backend. Não use este modo de reinício do cliente se o aplicativo precisa preservar alterações não sincronizadas.

O modo de reinício do cliente de descarte de alterações não sincronizadas lida automaticamente com as redefinições do cliente sem tentar recuperar os dados do dispositivo cliente . Você pode escolher esse modo se as Regras de Recuperação de Redefinição de Cliente não funcionarem para seu aplicativo ou se você não precisar salvar dados não sincronizados. Quando esse modo usa um diff para trazer o Realm local para o mesmo estado do backend, as alterações não sincronizadas são permanentemente excluídas.

O modo de descartar alterações não sincronizadas não pode executar um reinício do cliente automatizado se houver uma alteração significativa no esquema.

No caso de uma alteração significativa no esquema, os SDKs do Realm não podem gerenciar um reinício do cliente automaticamente. Você deve definir um manipulador de reinício do cliente manual se fizer alterações significativas no esquema.

Nesse cenário, um manipulador de redefinição manual do cliente deve fazer algo como dizer ao usuário para atualizar o aplicativo. Nas versões do Realm SDK que tratam automaticamente das redefinições do cliente, uma redefinição manual do cliente ocorre somente em cenários de erro em que não é possível ocorrer uma recuperação significativa.

Para obter mais informações sobre como executar um reinício do cliente, consulte os exemplos de reinício do cliente para seu SDK:

O modo de recuperação é habilitado por padrão em todas as configurações do Device Sync. Você pode desabilitar o modo de recuperação ou reabilitá-lo se ele foi desabilitado anteriormente.

  1. Selecione o menu Device Sync na barra lateral.

  2. Clique no painel Advanced Configuration para exibir opções de configuração adicionais.

  3. Clique no botão de alternância Enable Client Recovery .

  4. Pressione o botão Save para confirmar as alterações.

    Se a sua aplicação utiliza rascunhos de implementação, é necessário implementar sua aplicação depois de efetuar as alterações.

  1. Faça pull de uma cópia local da versão mais recente do seu aplicativo com o seguinte comando pull:

    Puxe
    appservices pull --remote="<Your App ID>"
  2. Você pode configurar o número de dias para o tempo máximo offline do cliente do seu aplicativo com a propriedade is_recovery_mode_disabled no arquivo sync/config.json do seu aplicativo:

    ``sync/config.json``
    {
    ...
    "is_recovery_mode_disabled": false,
    ...
    }
  3. Implemente a configuração de aplicação atualizada com o seguinte comando push:

    Empurrar
    appservices push --remote="<Your App ID>"

Voltar

Manipular erros