Um app que só funciona com internet frustra quem está no metrô, no campo ou em um prédio com sinal fraco. Antes de decidir por suportar o modo offline, vale entender o que ele envolve, porque ele muda a arquitetura do projeto.
Os três níveis de offline
Nem todo app precisa do mesmo grau de independência da rede:
- Aviso amigável: o app detecta que não há conexão, mostra uma mensagem clara e não perde o que o usuário digitou.
- Leitura offline: o app guarda em cache o conteúdo já carregado, como listas e artigos, e deixa o usuário consultá-lo sem internet.
- Escrita offline: o usuário cria e edita dados sem conexão, e o app envia tudo quando a rede voltar.
Quanto mais alto o nível, maior o custo de desenvolvimento e de testes.
Armazenamento local
Para guardar dados no aparelho, os apps usam bancos locais, como o SQLite, ou áreas simples de armazenamento para configurações. Para aprender sobre bancos, veja banco de dados e SQL para iniciantes.
No caso de sites, os PWAs usam o service worker para guardar arquivos e respostas em cache, o que permite abrir páginas já visitadas sem rede.
Sincronizar sem perder dados
A parte mais delicada é a sincronização. O fluxo costuma seguir estes passos:
- Toda alteração feita offline vai para uma fila local, com data e hora.
- Quando a conexão volta, o app envia a fila ao servidor, em ordem.
- O servidor confirma cada item, e o app remove da fila os que foram aceitos.
- Se uma operação falhar, o app tenta de novo, sem duplicar o que já passou.
Esse último ponto exige cuidado para evitar ações repetidas. Veja mais em idempotência em APIs.
Conflitos
Imagine que o usuário edita um contato no celular offline, e outra pessoa altera o mesmo contato no computador. Ao sincronizar, qual vale? As estratégias comuns são:
- Prevalece a última alteração.
- O servidor sempre vence.
- O app mostra as duas versões e pede ao usuário que escolha.
Escolha de acordo com o risco: para um bloco de notas, a última alteração costuma bastar; para estoque ou pedidos, vale pedir confirmação.
Quando não compensa
Se o app depende de dados ao vivo, de pagamentos ou de verificações de segurança, o offline completo pode ser inviável ou perigoso. Comece pelo nível mais simples, teste com usuários reais em situações de sinal ruim e só então invista nos níveis maiores, se os dados mostrarem que fazem falta.