Criando aplicações off-line com PO Sync — Parte 1

Nicole Oliveira
TOTVS Developers
Published in
5 min readSep 25, 2020

--

Uma mulher segurando um celular que contém um aplicativo de fotos
Photo by Plann on Unsplash

Por que criar aplicações que funcionem em modo off-line?

Existem várias razões pelas quais se necessita de um aplicativo que funcione em modo off-line, dentre elas podemos destacar a produtividade. Pois muitos usuários que necessitam de mobilidade em algum momento acabam enfrentando problemas com relação a instabilidade de rede ou até mesmo a falta dela.

Vamos pensar em um campo de pesquisa que fica em uma área bastante afastada, o pesquisador precisa coletar os dados no local, ou até mesmo as coordenadas para posteriormente serem sincronizadas com a base de dados da central. Isso gera mais confiança, produtividade e mobilidade para o usuário.

Por isso, quero mostrar para vocês como nós podemos fazer este tipo de aplicativo utilizando as tecnologias Ionic e o PO Sync.

Este artigo será dividido em várias etapas, portanto neste primeiro momento iremos nos concentrar na apresentação do PO Sync e na sua configuração inicial.

PO Sync

O PO Sync é uma biblioteca que possibilita armazenar e sincronizar dados, possibilitando ao usuário utilizar o aplicativo mesmo estando off-line, com a mesma experiência como se estivesse online.

Ele simplifica o processo de implementação de aplicações off-line, pois o desenvolvedor não precisa se preocupar com o estado dos dados na alternância entre online/offline das aplicações. E também traz diferentes tipos de armazenamento, como o IndexDB, localStorage, LokiJS e como possui licença MIT e está disponível no Github, também abre para a possibilidade de melhorias através da comunidade.

Esta biblioteca, faz parte de um projeto maior chamado PO UI, que contém diversas soluções para aumentar a produtividade do desevolvimento de aplicações front-end.

Como ele funciona?

Primeiramente, o PO Sync armazena localmente os dados criados pelo usuário. Qualquer modificação feita nesses dados, até mesmo a criação, vai gerar um item de sincronização que a própria biblioteca armazena, para posteriormente enviar esses dados para o servidor. Esses itens ficam armazenados em uma fila de eventos, com as características que representam o tipo de evento como criação, alteração ou remoção.

Demonstração gráfica de um robô enviando os dados do armazenamento local para o servidor
Fila de eventos enviando os dados com o servidor

Esses dados são enviados para o servidor a partir de um gatilho, que pode ser a alteração do estado da rede, uma configuração que você pode fazer para sincronizar de forma periódica ou até mesmo uma sincronização manual feita pelo próprio usuário do aplicativo.

Demonstração gráfica de um robô enviando os dados do do servidor para o armazenamento local
Recebendo os dados atualizados do servidor

Por onde eu começo?

No portal do PO UI contém dois guias bem completos sobre a instalação do pacote na sua aplicação e os principais fundamentos que envolvem o PO Sync, incluindo técnicas mais avançadas para customizar conforme a sua aplicação.

Neste tutorial, iremos abordar a preparação do ambiente da sua aplicação para começar a utilizar o PO Sync, bem como a primeira busca na base de dados.

O problema

A nossa aplicação será um gerenciador de pets! Imagine uma pessoa que trabalha como pet sitter e que, por cuidar de muitos animais, precisa estar sempre atenta ao horário das medicações, se eles já foram alimentados, o tipo da ração de cada um, enfim são muitos detalhes! Como ela sempre está indo para diversos lugares, as vezes fica sem acesso à rede dependendo da região.

Então, vamos criar agora uma solução que possa ajudá-la nesse problema e que mantenha a mobilidade do aplicativo!

Endpoint do tutorial

Para fazer as sincronizações, iremos precisar ter um backend pronto que nos retorne os dados conforme a específicação do PO Sync. Para esse tutorial, iremos utilizar os endpoints desse link:

https://my-pets-backend.herokuapp.com/api.

Vamos lá!

Para seguir esse tutorial e desenvolver utilizando a biblioteca, é necessário ter como pré-requisitos conhecimentos em:

Para criar a aplicação e instalar as dependências, você pode seguir as opções do guia Começando com o PO Sync. Após fazer essa configuração inicial, você deve ter adicionado a biblioteca da seguinte forma:

Com isso, a nossa aplicação está pronta para começar a usar o @po-ui/ng-sync.

Agora nós precisamos criar o nosso primeiro schema, chamado Pets. Ele terá as configurações e características do nosso endpoint Pets. Para isso, crie um arquivo chamado schemas.constants.ts em src/app/schemas.constants.ts.

Depois de criado o nosso schema, precisamos ter um serviço que seja responsável por fazer as configurações iniciais do PO Sync.

Vamos criar um serviço chamado SyncService, e adicionar as configurações que precisamos.

Os métodos checkDataInitial e loadDataInitial fazem um controle para poder fazer um carregamento inicial dos dados. Caso esses dados já tenham sido carregados no aplicativo, ele pula essa etapa. Este controle pode ser feito como você quiser, ou até mesmo não fazer nenhuma carga inicial dos dados.

Como esta instância do PO Sync será utilizada pela aplicação inteira, podemos deixar o serviço com escopo global.

Agora nós queremos que a inicialização do PO Sync seja executada sempre que o aplicativo inicializa nas rotas, para podermos avisar aos demais componentes que ele já está pronto para ser utilizado. Para isso, iremos criar um resolver de rotas.

Agora basta adicioná-lo na nossa rota principal:

Para buscar os dados, iremos criar um serviço chamado PetsService.

Nele, buscaremos os dados armazenados e gerenciados pela biblioteca, utilizando o serviço PoSyncService, que nos oferece métodos para busca dos dados e também alguns filtros para ele. Neste caso, estaremos buscando todos os dados referentes ao schema Pets.

Agora vamos para HomePageComponent!

Para buscar os dados do servidor utilizando o PO Sync, primeiro precisamos verificar se foi inicializado na aplicação. Para isso, faremos essa validação através das propriedades das rotas da seguinte forma:

Basta utilizar a propriedade this.pets$ que contém um Observable que retorna os dados que queremos acessar. Dessa forma, você pode acessar os dados da seguinte forma no seu home.component.html:

Em seguida, execute a aplicação utilizando o ionic serve e, se ocorrer tudo certo, você terá uma tela com as informações parecidas com a imagem abaixo:

Aba do navagador contendo um simulador de celular com dados sobre os pets e esse dados estão no storage do navegador
Aplicação sendo executada

Com isso, seu App já recebe novos dados que são colocados no servidor e também está pronto para começar a enviar novos dados também, e já pode começar a funcionar de forma off-line.

Considerações finais

Em breve farei outras postagens com o passo a passo das demais funcionalidades do PO Sync, como gravar, atualizar e remover os dados e preparar a API para as sincronizações.

--

--

Nicole Oliveira
TOTVS Developers

Gosta de tudo relacionado a front-end. É apaixonada por acessibilidade Web e machine learning. Core time em: PO UI e Animalia DS