Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Olá pessoal estou com o seguinte desafio: Fazer um App com o Ionic que funcione offline onde o mesmo precisa ler dados enviados por uma REST API, dados esses vindos de um ERP. Preciso armazena-los localmente para usar a aplicação offline (pensei em armazenar no SQLite), e depois de efetuar algumas mudanças nos dados offline sincronizar as mudanças feitas com a API que se comunica com o ERP. Penso em fazer da seguinte maneira: Ler os dados da REST API e então com base nos dados recebidos criar um banco de dados local com SQLite e popular com os dados, então com a app offline fazer as devidas mudanças nos dados, depois disso quando o dispositivo localizasse conexão com a internet ele sincronizaria os dados modificados no banco local do aparelho com a API. Vocês acham que o caminho certo é esse?
Obrigado.
Gabriel primeiro muito obrigado pela resposta. Mas tipo eu preciso carregar informações de bases, clientes, serviços que são entidades do projeto para fazer o registro da entidade principal. Você acha que usar o localStorage é uma boa visto que tenho que manipular tantas informações para o registro principal? Falo isso por que não sei ao certo mas o localStorage tem um limite de tamanho. Muito obrigado pelas dicas.
Resposta padrão é depende.
O localStorage em media tem 5MB, isso em String é coisa pra caramba hehe.
http://stackoverflow.com/questions/2989284/what-is-the-max-size-of-localstorage-values
De qualquer forma é uma das opções que dei, e pelo seu contexto pode ser uma das piores pensando bem.
Toda a parte da sincronização vai ficar a cargo de você.
O FireBase tenta resolver isso o problema de uma forma bacana...
https://firebase.google.com/docs/database/android/offline-capabilities?hl=pt-br
Um dos contras é justamente que não tem suporte Web e o Ionic roda em uma WebView correto?
Eu vi a galera falando bastante do PounchDb.
Da uma pesquisada nele, como alem da persistencia online você vai precisar da sincronização ele pode funcionar. (preparasse para entender profundamente noSql)
Legal. Obrigado Gabriel pelos esclarecimentos.
Interessante. Mas já pensou em um caso onde mais de uma pessoa esteja offline e ambas modificassem o mesmo registro, na hora de sincronizar uma vai sobrescrever a outra, pode dar ruim se isso não for gerenciado corretamente.
Exatamente itlpps nesse caso aí eu teria um erro operacional e um limite de como é offline eu não poder avisar para o determinado usuário que o registro que ele está tentando alterar já foi ou está sendo alterado.
Não entendi @flavionash, como você vai checar oq foi alterado se você não tem conexão?
Ou se estiver offline apenas leitura?
Exato @gabrieldarezzo disse acima não tenho como fazer isso pois será offline. Vou começar a por a mão na massa no projeto, qualquer pro vou pedindo ajuda aqui. Obrigado cara.
Já existe uma solução nativa para armazenamento offline no Ionic, chama-se Storage.
Veja a documentação oficial aqui.
A forma de uso é semelhante ao localStorage.
Quando executado no browser, o Storage tentará usar IndexedDB, WebSQL, nessa ordem. Porém quando o app estiver compilado e rodando na plataforma nativa, ele utilizará o SQLite.
Algumas opções:
-
PounchDb
-
FireBase
-
Usar loucamente o localStorage + JSON.parse()/JSON.stringify()
-
ServiceWorks
Eu atualmente estou fazendo um projeto em Cordova que necessita de persistência Offline de leitura (apenas consumo)
Estou abusando bastante do localStorage, e pelos testes está indo bem.
Vi um case na Google do pessoal da empresa a logbee.com.br, eles adotaram o FireBase/AngularFirebase e parecia estar funcionando tmb.
Recomendo os links abaixo:
https://tableless.com.br/a-importancia-do-offline-first/
https://pouchdb.com/getting-started.html
Agora você citou o Ionic, nunca trabalhei diretamente com ele.
Dando uma busca rapiada encontrei algumas com o termo:
'Ionic Offline Data Synchronization'