Árvore de páginas


01. OBJETIVO

Falar sobre a arquitetura do Meu RH no mobile a partir da versão 3.0.0.


02. O QUE USAMOS DO APARELHO?

a) GPS (opcional): Utilizado para obter a localização do usuário quando ele bate o ponto.

b) Câmera (opcional): Utilizado para ler QR Code e anexar arquivos.

c) Biometria (opcional): Utilizado na autenticação.

d) Push notification (opcional): Utilizado para notificar usuários de atualizações.

e) Arquivos e compartilhamento (opcional): Para anexar arquivos do dispositivo e compartilhar qualquer arquivo nos aplicativos. 


Para melhor compreensão do aplicativo do Meu RH, será feito um breve conceito do que é Aplicativo Nativo, Aplicativo Híbrido, IONIC, IONIC CLI, Capacitor, CAPACITOR CLI e Gradle.

O que é um aplicativo nativo?

Aplicativo nativo é desenvolvido na linguagem exclusiva do determinado sistema operacional (Android ou IOS), explorando todas as potencialidades daquele sistema. Como é desenvolvido com linguagens nativas, o desenvolvedor consegue integrar com funcionalidades nativas (GPS, Câmera, etc.) com uma maior abrangência e customização das bibliotecas do dispositivo. Para Android é desenvolvido com Java ou Kotlin e para o IOS com Swift.

O que é um aplicativo híbrido?

Aplicativo hibrido é desenvolvido em uma única linguagem ou framework, possuindo acesso a camadas nativas dos aparelhos e sendo possível o funcionamento em ambos sistemas operacionais com o mesmo código. É comum que ele seja desenvolvido com HTML, CSS e Javascript e o Framework envolvido, pois em tempo de build o mesmo realiza a conversão para a linguagem nativa do sistema operacional em que ele será reproduzido.

O que é o IONIC?

IONIC é um framework para desenvolvimento híbrido, que abstrai as camadas nativas dos sistemas operacionais, disponibilizando um kit de UI com código aberto para desenvolver aplicativos móveis de alto desempenho ou somente WEB. Nele é possível utilizar frameworks e bibliotecas Javascripts, como Angular, Vue e React. O IONIC disponibiliza um kit de componentes para interação da interface com o usuário (Ui Components), unindo a ele a tematização destes componentes. A imagem abaixo ilustra de forma abstrata, qual a responsabilidade do IONIC durante o seu desenvolvimento com uma tecnologia WEB:

Para a comunicação com funcionalidades nativas do dispositivo o IONIC, o mesmo sugere o Capacitor como intermediador.

IONIC CLI

IONIC CLI é a Interface de linha de comando do IONIC, qualquer funcionalidade que você tenha que utilizar do mesmo, como build, subir localmente o aplicativo, informações do aplicativo e versionamento será por ele. É uma ferramenta que abstrai a complexidade dos comandos para uma interface em linha de comando. Abaixo é possível ver suas funcionalidades:

O que é o Capacitor?

Projeto de código aberto que executa aplicativos WEB modernos nativamente em IOS e Android. Capacitor além de otimizar a implantação de softwares com tecnologia WEB nos aplicativos móveis de forma nativa, o mesmo fornece plug-ins que possuem acesso aos recursos nativos do determinado dispositivo, como câmera, localização, biometria e etc. O mesmo possui plug-ins oficiais e também da própria comunidade na qual a empresa não se responsabiliza, mas realiza a indicação.

Na imagem acima, é possível compreender que o WEB APP é criado por uma tecnologia WEB (Angular, React ou Vue) na qual está dentro do ambiente do IONIC Framework. Logo o capacitor fornece API’S, em formato de plug-ins (dependências) que consegue abstrair e disponibilizar informações/funções da camada nativa do dispositivo. E está abstração é fornecida em tempo de execução.

Abaixo está a lista dos plug-ins utilizados no Meu RH e uma breve explicação de seu uso no aplicativo:

Plugin Funcionalidade Origem
capacitor-native-settings

Acessar as configurações do dispositivo.

Oficial
capacitor-plugin-webview-cache

Apagar cache da webview.

Oficial
capacitor-root-jailbreak-detector

Identifica permissões de Root ou Jailbreak no dispositivo.

Usuário do github
aparajita/capacitor-biometric-auth

Obtem o recurso de biometria.

Usuário do github
awesome-cordova-plugins/chooser

Recurso de transferência de arquivo.

Oficial
awesome-cordova-plugins/in-app-browser

Abrir um site web no dispositivo.

Oficial
capacitor-community/file-opener

Abrir arquivos no dispositivo.

Comunidade
capacitor-community/native-market

Redirecionar o aplicativo para lojas GooglePlay e AppleStore.

Comunidade
capacitor-firebase/messaging

Mensageiro de notificações push no dispositivo.

Comunidade
capacitor-mlkit/barcode-scanning

Escaneador de QR Code.

Usuário do github
capacitor/app-launcher Acessar um aplicativo das lojas GooglePlay e AppleStore pelo Meu RH. Oficial
capacitor/camera

Obtêm o recurso de câmera.

Oficial
capacitor/filesystem

Recursos para uso de arquivos no aplicativo.

Oficial
capacitor/geolocation

Obtêm o recurso da localização.

Oficial
capacitor/keyboard

Obtêm recursos do teclado do dispositivo.

Oficial
capacitor/network Obtêm recursos da internet do dispositivo. Oficial
capacitor/preferences

Banco de dados para armazenamento de informações do aplicativo.

Oficial
capacitor/push-notifications

Obtêm informações para o Push Notification.

Oficial
capacitor/share

Compartilhamento de arquivos do aplicativo para o dispositivo.

Oficial
capacitor/splash-screen

Acessa funcionalidades da splash-screen do aplicativo.

Oficial
capacitor/status-bar

Acessa funcionalidades da barra superior do dispositivo.

Oficial
cordova-plugin-nativestorage Banco de dados para armazenamento de informações do aplicativo. Oficial
cordova-sqlite-storage Banco de dados para armazenamento de informações do aplicativo. Oficial
localforage-cordovasqlitedriver

Driver para uso do SQLite no Capacitor.

Oficial


O que é o CAPACITOR CLI?

Ferramenta de interface de linha de comando, responsável por fornecer funções que auxiliarem no seu desenvolvimento com o Capacitor. Todo o comando feito por ela sempre será iniciado com ionic e ao lado a abreviação do Capacitor cap, exemplo: ionic cap build. Segue abaixo alguns comandos que serão utilizados durante o desenvolvimento:

ionic cap sync: Sincroniza as alterações feitas do projeto IONIC com o Capacitor, como inserção, modificação ou exclusão de permissões e plug-ins. Em cada alteração citada, será obrigatório realizar o sincronismo neste comando e checar o log para validação de alguma inconsistência na configuração do projeto.

ionic cap build <plataforma>: Realiza o build do projeto, verificando se o código compilado está coerente e abrirá a IDE (Android Studio ou XCode) para utilização do aplicativo compilado.

ionic cap run: Irá executar o aplicativo em qualquer plataforma disponibilizada, como emulador ou dispositivo físico.

ionic cap update <plataforma>: Um sucessor do sync para atualização dos plug-ins e dependências que foram alteradas/modificadas no package.json do projeto.

O que é Gradle?

É uma ferramenta utilizada pelo Capacitor de forma padrão, para trazer maior velocidade e flexibilidade na automação de construção e empacotamento do código do aplicativo. É responsável por compilar todo o código do projeto (IONIC e plug-ins do Capacitor) e gerar um único executável, sendo da extensão. apk ou .aab. Sendo usado somente em projetos Android, ele engloba toda a configuração do dispositivo nativo, desde permissões, inserção de dependências, configuração de versionamento e assinatura do aplicativo para colocar o mesmo na PlayStore.

Estrutura de pastas e arquivos do gradle:

Seguindo a partir da raiz da pasta android, nós temos os arquivos/pastas e suas responsabilidades:

.gradle, build, capacitor-cordova-android-plugins: São pastas geradas a partir do build do gradle, responsáveis por guardar informações temporárias, hashs dos plug-ins.

gradle.properties: responsável por guardar variáveis de configuração da aplicação Android, como informações e senhas para a assinatura do aplicativo antes de inserir o aplicativo na loja.

variables.gradle: responsável por guaradar variáveis de versionamento dos SDK do Android.

app/build: está pasta guardará o arquivo compilado do build do Gradle (sendo .apk ou .aab). Importante sempre excluir ela antes gerar um novo arquivo compilado para evitar problemas com cache.

app/build.gradle: guardará informações como versionamento do aplicativo, identificador único e configurações para compilação debug ou release.

app/google-services.json: arquivo de configuração do push notification.

app/src/main/res: ícones que será utilizado no dispositivo a partir do tamanho do dispositivo.

app/src/main/AndroidManifest.xml: Arquivo responsável por toda a configuração de permissão e customização de ícones ou plug-ins.


Arquitetura do aplicativo Meu RH

Para a construção do nosso aplicativo utilizamos o framework de desenvolvimento IONIC na versão e Angular na versão 15. A parte de comunicação para comunicar com recursos nativos é feita pelo Capacitor. O projeto está localizado no repositório MeuRH no AzureDevops.

O aplicativo hoje contempla com as telas de:

Autenticação: Login, Esqueceu a Senha, Alterar a senha e Home.

Configurações: Configuração de ambiente, Visualização/Compartilhamento de QR-Code e telas de ajuda.

Todas as outras funcionalidades do Meu RH são renderizadas pelo projeto de Portais através de um browser que é aberto dentro do aplicativo. Como utilizamos a biblioteca do PO-UI no projeto de Portais e ela é totalmente responsiva, se adaptando ao tamanho do dispositivo mobile.

Porém ao abrir o browser, ficamos com duas Webviews diferentes (A própria do IONIC e a outra do browser). Quem acessa os recursos do celular é a própria Webview do IONIC ou o Capacitor e por isso o browser onde o portal acessa não tem acesso direto a esses recursos. Porém, sabemos que dentro do aplicativo consumimos esses recursos da mesma forma (Ex: Batida por geolocalização). Para isso funcionar, criamos uma espécie de fila de eventos entre as duas webviews, sendo que sempre quando o portal precisa de algum recurso do celular ele posta uma mensagem na fila de eventos (onde a Webview do IONIC está sempre escutando), o IONIC solicita o recurso/ação e devolve uma mensagem de resposta para a Webview do portal:



Foi criado um contrato de mensagem nos dois projetos para que os dois lados possam saber o que está sendo solicitado e o que deve ser retornado:

Projeto de portais solicitando geolocalização:

Projeto do app recebendo a solicitação e verificando qual o evento recebido:

Utiliza o plugin do Capacitor para recuperar a geolocalização e emite a resposta na fila de eventos para o portal:

Projeto de portais recebendo a resposta do IONIC. Seta a informação de geolocalização e exibe a localização no mapa renderizado na tela:



Em relação a comunicação com o backend, o formato se assemelha a versão de Portal do Meu RH, inclusive a parte que ele renderiza o portal pelo browser utiliza todo o mecanismo do projeto de Portais. Porém, algumas API's estão também do lado do IONIC, por exemplo a API de autenticação. Dessa forma, temos um serviço genérico que é capaz de identificar qual o ERP e a partir disso definir qual a url base para realizar as requisições para o backend. A diferença é que agora todas as requisições provenientes do IONIC exigem o mecanismo de CORS (melhor detalhado na sessão de CORS). Dentre as três linhas de produto temos dois tipos de mecanismos, para RM e Protheus utilizamos um Bearer Token e em Datasul utilizamos Basic Authentication (Cookies). Em ambos os mecanismos os objetos de autenticação são compartilhados entre as duas webviews, visto que são necessários nos dois lados:



Link do repasse sobre os tópicos acima: https://drive.google.com/file/d/15UOFr5KBxQQXdhuClExyS6dyWO42bbtu/view?usp=sharing


    




  • Sem rótulos