Plataforma de Comunicação Elgin versão 3.13.9
Documentação das bibliotecas de integração com hardware Elgin
|
Integração com a ElginTef API.
Integração com a ElginTef API.
Neste ponto vamos explorar toda a API de ponta a ponta. O objetivo desta seção é:
Projetos desenvolvidos em Android em sua grande maioria necessita de dependências de bibliotecas prontas de terceiros para agilizar e facilitar o nosso trabalho. Estas dependências são adicionadas nas configurações do projeto.
A forma mais utilizada é adicionando em um diretório chamado libs
. É recomendado que esse diretório seja adicionado dentro de app
, conforme a figura abaixo.
Após a criação deste diretório, vamos ao que interessa, adicionar as bibliotecas que utilizaremos no projeto.
As bibliotecas que utilizaremos no projeto são quatro AAR
(um arquivo AAR contém uma biblioteca de software usada para desenvolver aplicativos Android). Dois são de nossa propriedade e os demais são fornecidos por parceiros, eles são:
Com estas bibliotecas configuradas no arquivo build.gradle
(:app) do projeto você consegue iniciar o desenvolvimento da sua aplicação chamando as funções da seguinte maneira:
import com.elgin.e1.pagamentos.tef.*;
Mas ainda existe mais uma lib externa que devemos adicionar para dar suporte nas conversões internas:
implementation 'com.squareup.retrofit2:converter-gson:2.9.0
Sua configurações no arquivo build.gradle(:app) deve conter os componentes conforma abaixo:
A descrição de todas as funções disponíveis na API estão descritas na seção Funções.
setContext()
setHandler()
InformarDadosAutomacao()
AtivarTerminal()
ObterMensagemProgresso()
ObterDadosTransacao()
ObterOpcaoColeta()
InformarOpcaoColeta()
RealizarTransacaoDebito()
RealizarTransacaoCredito()
RealizarCancelamentoOperacao()
RealizarCancelamentoTransacao()
ImprimirRelatorioDiario()
ReimprimirUltimoComprovante()
RealizarTransacaoPIX()
Aqui vamos explorar este tipo de dado que é responsável direto por enviar e receber mensagens para a API após as transações (venda, cancelamento ou administrativas) serem inicializadas. Se a implementação estiver errada, provavelmente você receberá informações nos passos errados durante uma operação. Então vamos deixar claro a forma que estamos utilizando este componente em nossa API.
Um Handler permite que você envie e processe o Message
e objetos Runnable
associados a uma thread MessageQueue
. Cada instância do Handler está associada a um único encadeamento e à fila de mensagens desse encadeamento. Quando você cria um Handler, ele é vinculado a um arquivo Looper
. Ele entregará mensagens e executáveis para a fila de mensagens desse Looper e os executará no encadeamento desse Looper. Fonte Handler Android.
Em nosso exemplo vamos fazer a instância do objeto Handler com a sobrecarga de Looper.getMainLooper()
(classe usada para executar um loop de mensagem para uma Thread, no caso a UI Thread para a aplicação Android) e implementar a sobrecarga de handleMessage(Message msg)
. Por exemplo:
Agora que já vimos a definição e como instanciar um objeto Handler, vamos explorar um pouco o componente auxiliar Message, que será utilizado como parâmetro da função handleMessage
. Ele vai nos indicar em qual passo a API está e com isso, receberemos valores que serão responsáveis por apresentar mensagens, apresentar opções para escolha do operador, receber os dados da transação (venda, cancelamento, reimpressão ou relatórios).
Define uma mensagem contendo uma descrição e um objeto de dados arbitrário que pode ser enviado para um arquivo Handler. Esse objeto contém dois campos int
extras e um campo de objeto extra que permite que você não faça alocações em muitos casos. Fonte Message - Android.
what: Código de mensagem difinido pelo usuário para que o destinatário possa identificar do que se trata esta mensagem.
obj: Um objeto arbitrário para enviar ao destinatário.
A seguir, o código mostra que para cada valor de 1 - 4 que a propriedade what
recebe uma ação diferente é tomada com conteúdo recebido na propriedade obj
.
Já tivemos uma visão geral dos componentes acima, agora chegou o momento de colocar a mão na massa. Muito conteúdo até aqui? Sim, você precisa entender o porquê está utilizando isto.
what
para o MessagePara que possa receber as mensagens de processo da transação, você deve definir em sua aplicação os seguintes message.what
:
O exemplo abaixo mostra como você deverá definir o message.what
conforme o progresso da transação.
callbacks
(função passada a outra função como argumento, que é então invocada dentro da função externa para completar algum tipo de rotina ou ação) internos da API.Vamos dividir este passo em duas etapas:
obj
(Opcional)Este modelo foi desenvolvido para quem prefere utilizar algo mais verboso, com um nome e objetivos definidos na assinatura da função. O código a seguir mostra quais funções devem ser utilizadas em cada um dos códigos definidos anteriormente.
obj
(Opcional)Este modelo é opcional para quem prefere utilizar as propriedades que os tipos de dados oferecem, até mesmo para explorar novas tecnologias. A ideia é compartilhar conhecimento, trazer novas ideias para utilização de determinadas coisas que não são usuais para alguns desenvolvedores. A figura abaixo mostra como será utilizado o modelo, a diferença é bem sutil e mesmo utilizando o mesmo objeto os retornos são diferentes. Fiquem atentos a isto quando utilizar esse modelo.