1
resposta

[Dúvida] Videos x Conteúdo descritivo

Para quando necessário salvar dados no indexdb e sincronizar depois, no video é realizado operações pra salvar no IndexDB sempre junto com a lista, e depois ao listar, obter também dele, porém se fosse uma API, quando ele iria sincronizar no servidor, ou seja quando iria salvar os dados no backend que foram armazenados somente no indexDB por estar offline? Na descrição da atividade no tópico: "4. Sincronização de dados com background sync" descreve uma forma, porém onde adicionar isso? acredito que seria no arquivo do service worker, porém utilizando o Angular como mostrado no vídeo, temos apenas o arquivo ngsw-config.json e o arquivo ngsw-worker.js é gerado somente no build

1 resposta

Olá!

Quando a gente fala de sincronizar dados com IndexedDB e Service Worker, o principal ponto é usar o Background Sync. Essa funcionalidade é ótima porque permite agendar a sincronização pra quando a internet voltar.

No Angular, o ngsw-config.json é usado pra configurar o Service Worker, mas a lógica de sincronização mesmo você precisa implementar por fora. Isso porque o ngsw-worker.js é gerado automaticamente, então não dá pra mexer direto nele. A solução é criar seu próprio Service Worker customizado.

  1. Cria um arquivo de Service Worker customizado, por exemplo: custom-sw.js.

  2. Implementa a lógica de sync nele. Você pode escutar o evento de sync e chamar a função que envia os dados pro servidor. Algo assim:

    self.addEventListener('sync', function(event) {
      if (event.tag === 'sync-dados') {
        event.waitUntil(syncData());
      }
    });
    
    function syncData() {
      // Aqui você buscaria os dados no IndexedDB e mandaria pro servidor
      return fetch('/api/sync', {
        method: 'POST',
        body: JSON.stringify(dados),
        headers: { 'Content-Type': 'application/json' }
      });
    }
    

Registre esse Service Worker customizado no seu Angular, talvez lá no main.ts ou em outro ponto de inicialização do app.

Configure o uso do Background Sync: seu app precisa pedir permissão pra isso e registrar a tarefa de sincronização no momento certo (tipo quando detectar que o usuário tá offline e fez alguma ação que precisa ser salva depois).

Com isso, você consegue garantir que os dados serão enviados pro servidor assim que a conexão voltar. Dá um pouquinho de trabalho no começo, mas depois que engrena, fica tranquilo.