Desenvolvimento para Dispositivos Móveis Com Ionic
Desenvolvimento para Dispositivos Móveis Com Ionic
Desenvolvimento para Dispositivos Móveis Com Ionic
Meu nome é Marcos Henrique de Paula. Sou mestre na área de Engenharia de Software pela
Universidade Federal de São Carlos, departamento de Ciência da Computação – UFSCar. Minha
formação é bacharel em Sistemas de Informação, com especialização em Projeto e Desenvolvimento
de Software com Java e Banco de Dados pelo Claretiano – Centro Universitário. Leciono diversas
disciplinas relacionadas com o desenvolvimento de software no curso de Sistemas de Informação
no Claretiano – Batatais–SP e atuo com análise e desenvolvimento de software desde 1997 na
região de Batatais e Ribeirão Preto-SP.
Marcos Henrique de Paula
Batatais
Claretiano
2018
© Ação Educacional Claretiana, 2017 – Batatais (SP)
Todos os direitos reservados. É proibida a reprodução, a transmissão total ou parcial por qualquer forma e/ou qualquer meio
(eletrônico ou mecânico, incluindo fotocópia, gravação e distribuição na web), ou o arquivamento em qualquer sistema de
banco de dados sem a permissão por escrito do autor e da Ação Educacional Claretiana.
ISBN: 978-85-8377-570-6
CDD 006.786
INFORMAÇÕES GERAIS
Cursos: Graduação
Título: Desenvolvimento para Dispositivos Móveis com Ionic
Versão: dez./2018
Formato: 20x28 cm
Páginas: 142 páginas
SUMÁRIO
CONTEÚDO INTRODUTÓRIO
1. INTRODUÇÃO...................................................................................................................................................................9
2. GLOSSÁRIO DE CONCEITOS ...........................................................................................................................................10
3. ESQUEMA DOS CONCEITOS-CHAVE...............................................................................................................................13
4. E-REFERÊNCIAS................................................................................................................................................................14
Conteúdo
Introdução ao Desenvolvimento para Dispositivos Móveis. Histórico e Aspectos evolutivos. Tecnologias para
Desenvolvimento Nativo, Híbrido e Cross-Plataforma. Fundamentos do Framework Ionic. Apache Cordova.
Instalação e configuração. Criação de Projetos. Estrutura de um projeto Ionic. Executando Aplicações Ionic.
Emulação com o Navegador. Emulação no Dispositivo. Componentes gráficos do framework Ionic. Armazenamento
persistente de dados com Ionic. JavaScript Object Notation (JSON). SQLite. Conectividade com Ionic. API REST.
Bibliografia Básica
ARVIND, R. Learning Ionic. 2. ed. Birmingham: Packt Publishing, 2017.
GOIS, A. Ionic framework. São Paulo: Casa do Código, 2017.
PHAN, C. Ionic 2 cookbook. 2. ed. Birmingham: Packt Publishing, 2016.
Bibliografia Complementar
FRISBIE, M. Angular 2 cookbook. Birmingham: Packt Publishing, 2016.
GUEDES, T. Crie aplicações com Angular. São Paulo: Casa do Código, 2017.
LEE, V.; SCHNEIDER, H.; SCHELL, R. Aplicações móveis: arquitetura, projeto e desenvolvimento. Tradução de: Amaury Bentes e
Deborah Rudger, São Paulo: Ed. Pearson Education do Brasil, 2005.
LOPES, C. AngularJS para desenvolvedores Java. Rio de Janeiro: Ciência Moderna, 2016.
SOMMERVILLE, Ian. Engenharia de Software. 9. ed. São Paulo: Pearson Addison-Wesley, 2011.
E-referências
IONIC Framework, Components. Site do desenvolvedor, componentes. Disponível em: <https://ionicframework.com/docs/
components/>. Acesso em: 03 ago. 2018.
IONIC Framework, API Reference. Site do desenvolvedor, documentação referencial da API. Disponível em: <https://
ionicframework.com/docs/api/>. Acesso em: 03 ago. 2018.
7
CONTEÚDO INTRODUTÓRIO
É importante saber
Esta obra está dividida, para fins didáticos, em duas partes:
Conteúdo Básico de Referência (CBR): é o referencial teórico e prático que deverá ser assimilado para aquisição das
competências, habilidades e atitudes necessárias à prática profissional. Portanto, no CBR, estão condensados os principais
conceitos, os princípios, os postulados, as teses, as regras, os procedimentos e o fundamento ontológico (o que é?) e etioló-
gico (qual sua origem?) referentes a um campo de saber.
Conteúdo Digital Integrador (CDI): são conteúdos preexistentes, previamente selecionados nas Bibliotecas Virtuais Univer-
sitárias conveniadas ou disponibilizados em sites acadêmicos confiáveis. É chamado "Conteúdo Digital Integrador" porque é
imprescindível para o aprofundamento do Conteúdo Básico de Referência. Juntos, não apenas privilegiam a convergência
de mídias (vídeos complementares) e a leitura de "navegação" (hipertexto), como também garantem a abrangência, a den-
sidade e a profundidade dos temas estudados. Portanto, são conteúdos de estudo obrigatórios, para efeito de avaliação.
1. INTRODUÇÃO
No cotidiano da vida moderna existem muitos elementos importantes, mas sem dúvida
os Smartphones desempenham um papel fundamental em nossas vidas. A conectividade e a
mobilidade fornecidas por esses dispositivos têm alterado a forma como realizamos muitas
de nossas atividades habituais. Mensagens, chamadas telefônicas, redes sociais, compras,
entretenimento, atividades profissionais, quase tudo em nosso dia a dia pode ser realizado
em um estilo de vida em movimento.
Estamos vivendo a era da mobilidade e a cada dia temos uma nova variedade de serviços
sendo oferecidos por meio de novos aplicativos nos Smartphones. Esses mesmos aplicativos
também rodam em Tablets e outros tipos de dispositivos móveis. As pessoas têm seus
“apps” preferidos instalados e prontos para uso. Dessa forma, a demanda por novos tipos de
aplicativos continua em alta.
Aparentemente, nos ambientes de negócios e de trabalho, as pessoas usam em média
pelo menos dois dispositivos diferentes como parte de suas rotinas diárias, e esse número
tende a aumentar. Além disso, as pessoas têm a liberdade de escolher os aplicativos e até
mesmo os processos necessários para completar suas atividades.
Gerando, assim, um aumento da pressão sobre os desenvolvedores para criar novas
funcionalidades, em curto espaço de tempo, para os aplicativos móveis. A maioria das
empresas acha um grande desafio produzir, implantar e distribuir aplicativos móveis no
ritmo acelerado que o mercado exige. Encontrar e empregar desenvolvedores com todas as
habilidades necessárias nessa área é uma tarefa cada vez mais difícil.
De acordo com o Gartner Group (2017), até o final de 2017, a demanda do mercado para
serviços corporativos de desenvolvimento de aplicativos móveis superaria a capacidade das
empresas de desenvolvê-los. E até 2019, a venda de telefones celulares atingiria 2,1 bilhões de
unidades. Isso significa uma demanda ainda maior para desenvolver aplicações móveis.
Ainda de acordo com o Gartner Group (2017) existem melhores práticas que as empresas
de software podem considerar para superar com sucesso os desafios e a crescente demanda do
desenvolvimento de aplicativos para dispositivos móveis. Entre essas boas práticas está o uso
de frameworks e APIs, ferramentas de automação e geração de código, cujo desenvolvimento
é baseado em modelos e metodologias ágeis para a produção de software.
Esse é o cenário que se apresenta diante das empresas e das comunidades de
desenvolvedores de aplicativos para dispositivos móveis; o mercado é amplo e as oportunidades
se multiplicam na mesma proporção em que os negócios migram para os aplicativos móveis.
Refletindo sobre o exposto, apresentamos neste material uma plataforma de
desenvolvimento de aplicações para dispositivos móveis que, diante desse cenário, seja
uma boa opção de escolha, tanto para desenvolvedores experientes como para iniciantes,
para fazer frente à crescente demanda e ser capaz de atender às expectativas de empresas
e desenvolvedores como uma boa solução tecnológica, eficaz e que proporciona os recursos
necessários à produção rápida de novos aplicativos.
2. GLOSSÁRIO DE CONCEITOS
O Glossário de Conceitos permite uma consulta rápida e precisa das definições
conceituais, possibilitando um bom domínio dos termos técnico-científicos utilizados na área
de conhecimento dos temas tratados.
Figura 1 Esquema dos Conceitos-chave de Desenvolvimento para Dispositivos Móveis com Ionic.
4. E-REFERÊNCIAS
BOOSTRAP. Site do desenvolvedor, documentação técnica. Disponível em: <https://getbootstrap.com/>. Acesso em: 03 ago.
2018.
IONIC CLI. Site do desenvolvedor, documentação técnica. Disponível em: <https://ionicframework.com/docs/cli/>. Acesso
em: 03 ago. 2018.
CORDOVA. Site do desenvolvedor, documentação técnica. Disponível em: <https://cordova.apache.org/>. Acesso em: 03 ago.
2018.
GARTNER GROUP. Technology Research. Disponível em: <https://www.gartner.com/newsroom/id/3076817>. Acesso em: 03
ago. 2018.
GARTNER GROUP. Technology Research. Disponível em: <https://www.gartner.com/newsroom/id/3725117>. Acesso em: 03
ago. 2018.
DAO Data Access Object. In: Wikipédia: a enciclopédia livre. Disponível em: <https://pt.wikipedia.org/wiki/DAO>. Acesso em:
03 ago. 2018.
Frameworks. In: Wikipédia: a enciclopédia livre. Disponível em: <https://pt.wikipedia.org/wiki/Framework>. Acesso em: 03
ago. 2018.
SDK. In: Wikipédia: a enciclopédia livre. Disponível em: <https://pt.wikipedia.org/wiki/Kit_de_desenvolvimento_de_
software>. Acesso em: 03 ago. 2018.
Objetivos
• Conhecer os conceitos acerca das características particulares dos dispositivos móveis.
• Compreender a importância do desenvolvimento para dispositivos móveis que utilizam as plataformas nativas
e híbridas.
• Preparar o ambiente de desenvolvimento.
• Desenvolver a primeira aplicação utilizando componentes básicos para introduzir a prática de se utilizar a
plataforma Ionic.
• Conhecer a plataforma de desenvolvimento Ionic, outros frameworks e aplicativos que completam a
plataforma.
• Evidenciar aspectos importantes da arquitetura de software para dispositivos móveis.
Conteúdos
• Características de hardware dos dispositivos móveis.
• Sensores e infraestrutura dos dispositivos móveis.
• Plataforma de desenvolvimento Ionic e suas dependências.
• Instalação da Plataforma Ionic.
• Utilização de componentes do framework Ionic.
1) Não se limite ao conteúdo desta obra, busque outras informações em sites confiáveis e/ou nas referências
bibliográficas apresentadas ao final de cada unidade. Lembre-se de que, na modalidade EaD, o engajamento
pessoal é um fator determinante para o seu crescimento intelectual.
15
4) É importante revisar os conhecimentos básicos de desenvolvimento para padrões web, como HTML, Javascript
e CSS, que serão claramente reaproveitados no estudo da plataforma de desenvolvimento de aplicativos
híbridos.
5) Nas instruções para criar e configurar novos projetos, siga exatamente as orientações, em especial ao que se
refere ao nome do projeto e ao nome de componentes, pois esses nomes são utilizados no código-fonte da
aplicação.
1. INTRODUÇÃO
O objetivo inicial do estudo desta primeira unidade é ajudar você a compreender
características que são particulares nos dispositivos móveis e que os diferenciam dos
computadores pessoais, melhorando assim, a perspectiva inicial de abordagem para o
desenvolvimento de software e, consequentemente, auxiliando o desenvolvedor a obter um
aplicativo mais ajustado às características dos dispositivos móveis.
Os objetivos a serem alcançados, nesta unidade, fundamentam-se na compreensão dos
conceitos envolvidos na plataforma de desenvolvimento Ionic, nas atividades de instalação e
utilização da plataforma. Portanto, é fundamental que você prepare desde já o seu ambiente
de desenvolvimento Ionic e comece a utilizá-lo para compreender os conceitos ao longo
dos estudos apresentados. Mais adiante, serão explicados todos os procedimentos para a
instalação da plataforma Ionic.
Para o bom desenvolvimento deste conteúdo, é fundamentol que você saiba que os
dispositivos móveis surgiram por meio da integração dos computadores com os recursos de
telecomunicações. Essa união de tecnologias criou um novo panorama digital de computação
e mobilidade que possibilita acesso instantâneo a informações em qualquer lugar e a qualquer
momento. Assim, a computação móvel, como é chamada hoje, é considerada um novo
paradigma computacional.
Desse modo, com a diminuição dos custos dos computadores e os serviços de
telecomunicações, como os serviços via satélite, as redes sem fio e a internet, a computação
móvel se tornou viável não somente para o governo e o segmento empresarial, mas também
para as pessoas de forma geral. De acordo com a enciclopédia digital Wikipédia (2017), a
computação móvel pode ser considerada uma revolução, pois é capaz de atingir de forma
significativa o cotidiano das pessoas fazendo parte de suas vidas, modificando, assim, suas
rotinas e formas de tomar decisões.
No contexto da computação móvel, um dispositivo móvel é um aparelho de computação
pequeno o suficiente para segurar e operar na mão, e os elementos desse sistema têm as
propriedades de comunicação e mobilidade, pois podem ser operados a distância e sem fio.
Mobilidade se refere ao uso de dispositivos móveis portáteis que ofereçam capacidade de
deslocamento e podem realizar facilmente um conjunto de funções de aplicação capazes de
conectar-se com outros sistemas para obter e fornecer dados (LEE et al. 2005). Um crescimento
extraordinário tem ocorrido nesse segmento na última década, e o impacto de sua utilização
está redefinindo a forma como é realizada a difusão e o comércio de produtos e serviços,
principalmente na área de entretenimento.
Apesar de tudo isso parecer muito óbvio, principalmente para aqueles que já estão
acostumados aos Smartphones e Tablets, é importante destacar que, ao desenvolver um
software para esses dispositivos, o desenvolvedor deve considerar uma abordagem um pouco
diferente do software tradicional para computadores pessoais. Isso porque os dispositivos
móveis possuem características tecnológicas intrínsecas à usabilidade e à mobilidade, como
por exemplo os sensores, a tela sensível ao toque e, em muitos casos, a ausência de periféricos
como teclado e mouse. Portanto, é muito importante que as aplicações sejam planejadas e
implementadas desde o início tendo em vista essas diferentes características.
Infraestrutura Móvel
Esse tópico fornece uma visão geral dos componentes de hardware e dos principais
sensores que estão disponíveis nos frameworks das plataformas de desenvolvimento para
dispositivos móveis. Ele também fornece uma introdução à infraestrutura de sensores.
Observe que os componentes de hardware dos dispositivos móveis lhe conferem
características particulares, muitas delas não encontradas nos computadores tradicionais.
Por isso esses aparelhos vêm ganhando cada vez mais espaço e atenção das comunidades de
desenvolvimento de software. De acordo com LEE et al. (2005), os principais componentes dos
dispositivos móveis são:
Um jogo pode registrar leituras do sensor de gravidade de um dispositivo para inferir gestos e movimentos
complexos do usuário. Inclinação, agitação, rotação ou balanço do dispositivo podem influenciar no cenário e no
comportamento do jogo. Da mesma forma, uma aplicação meteorológica pode usar o sensor de temperatura e o
sensor de umidade do dispositivo para calcular e relatar a informação coletada do ambiente. Uma aplicação de
turismo pode usar o sensor geomagnético e o acelerômetro para relatar as posições das coordenadas geográficas
em um mapa que mostra a localização de determinados locais por onde o usuário se deslocará durante seu
passeio.
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Sensores de movimento
Os sensores de movimento são capazes de mediar as forças de aceleração e as forças de
rotação ao longo de três eixos que determinam a posição do dispositivo. Esta categoria inclui
acelerômetros, sensores de gravidade e sensores de rotação.
O Acelerômetro é um dispositivo que pode medir a força de aceleração, seja por gravidade
ou por movimento. Portanto, um acelerômetro pode medir a velocidade de movimento
de um dispositivo ao qual está acoplado. Como um acelerômetro detecta movimento e
gravidade, também pode sentir o ângulo em que o dispositivo está sendo mantido (Wikipédia
“Accelerometer”, 2017). Por isso, o dispositivo móvel pode ser utilizado como um joystick em
alguns tipos de jogos. O usuário controla o personagem do jogo manipulando o dispositivo
móvel como se fosse um joystick. O acelerômetro pode sentir a inclinação, o movimento e a
velocidade que lhe são aplicados, bem como a direção em relação à tela. Quando utilizado em
conjunto com sensor giroscópio, é possível detectar o movimento em seis direções (esquerda,
direita, para cima, para baixo, frente e verso). Esse sensor também detecta movimentos
baseados em três dimensões, X, Y e Z.
O Giroscópio é um dispositivo que pode medir a posição relativa ao ângulo dos eixos X, Y e
Z e o sentido da rotação. Esse sensor pode detectar pequenas mudanças de direção em relação
aos eixos, tanto em sentido horário como em sentido anti-horário (Wikipédia, “Giroscope”,
2017; ANDROID DEVELOPER, 2017). O giroscópio é calibrado para dar uma leitura com o valor
zero quando o dispositivo é mantido em uma superfície horizontal plana. Qualquer alteração
na orientação do dispositivo é medida pelo sensor giroscópio. Os dispositivos móveis utilizam
o giroscópio para detectar sua orientação. Quando o usuário vê uma imagem mantendo seu
telefone na horizontal e após girar o telefone para a posição vertical observa-se que a imagem
acompanha o movimento, esse efeito é obtido com a ajuda da função do sensor giroscópio.
Sensores ambientais
Os sensores ambientais são capazes de medir vários parâmetros ambientais, tais como
temperatura e pressão do ar ambiente, iluminação e umidade. Essa categoria de sensores
inclui o barômetro, o fotômetro e o termômetro.
O Barômetro é um dispositivo que opera em conjunto com o acelerômetro e pode medir
a pressão atmosférica. A tendência de pressão pode prever mudanças de curto prazo no clima.
Medições da pressão do ar são utilizadas na análise do tempo (Wikipédia, “Barometer”, 2017).
Esses sensores são usados para informar a previsão do tempo, ou, por exemplo, para monitorar
a saúde do usuário do dispositivo móvel, que com isso consegue saber se está gastando mais
ou menos calorias em uma caminhada.
O sensor de proximidade é um dispositivo capaz de detectar a presença de objetos
próximos ao dispositivo móvel. Esse sensor emite um campo eletromagnético ou um feixe de
radiação eletromagnética, como por exemplo o infravermelho, e procura mudanças no campo
ou sinal de retorno. A distância máxima que esse sensor pode detectar um objeto é definida
como “faixa nominal”. Alguns sensores podem ter ajustes da faixa nominal.
Em dispositivos móveis do tipo smartphone, os sensores de proximidade são utilizados
para detectar se alguém está em alcance nominal. Quando ocorre uma chamada telefônica,
o sensor de proximidade irá medir a distância entre o dispositivo e o rosto e pausar as tarefas
que estão sendo executadas, como por exemplo navegação na web, reprodução de música ou
vídeo. Após finalizar o telefonema, o sensor vai continuar essas tarefas novamente. Durante
uma chamada telefônica, esses sensores desempenham um papel na detecção de toques
acidentais na tela touchscreen quando segurados próximos a orelha.
O sensor de luminosidade é um dispositivo utilizado para fornecer informações sobre os
níveis de luz ambiente. Em dispositivos móveis, esses sensores podem medir a intensidade da
luz do ambiente em que o usuário está e, com isso, ajustar o brilho da sua tela de acordo com a
iluminação externa. Isso é uma forma de economizar energia. Também pode ser utilizado para
mudar ou aumentar a intensidade do brilho do flash quando o usuário fotografa um objeto.
Sensores de posição
Os sensores de posição medem a posição física de um dispositivo. Essa categoria inclui
os sensores de orientação, como o Compass e o magnetômetro.
O Compass, mais conhecido como bússola, é um dispositivo utilizado para navegação e
orientação que mostra a direção em relação ao norte geográfico. Esse sensor usa componentes
eletrônicos internos altamente calibrados para medir a resposta do dispositivo ao campo
magnético da Terra.
O GPS (Global Positioning System), sistema de posicionamento global, é um dispositivo
de navegação capaz de receber informações de satélites e depois calcular a posição geográfica
do dispositivo. Com o GPS e um software apropriado, o dispositivo pode exibir a posição do
dispositivo móvel em um mapa e pode oferecer instruções de deslocamento.
De acordo com o site Wikipédia (2017), em áreas urbanas, os sinais de satélite podem
ser enfraquecidos devido ao desvio de sinal que ocorre nas estruturas como prédios e túneis
ou por condições meteorológicas. Os sistemas de GPS dos smartphones contam com a
tecnologia A-GPS, que utiliza a estação base ou as torres de celular para fornecer a capacidade
de rastreamento de localização do dispositivo, especialmente quando os sinais GPS são fracos
ou indisponíveis. No entanto, a parte da rede móvel da tecnologia A-GPS não estaria disponível
quando o smartphone estiver fora do alcance das torres de recepção móvel.
O desenvolvedor pode acessar os sensores disponíveis no dispositivo e adquirir os dados
coletados usando os componentes da API da plataforma de desenvolvimento. A estrutura de
componentes de software fornece várias classes e interfaces que o ajudam a realizar uma
grande variedade de tarefas relacionadas ao sensoriamento do ambiente.
Com a API de componentes da plataforma, é possível fazer o seguinte:
• Determinar quais sensores estão disponíveis em um dispositivo.
• Determinar quais são os recursos de um sensor individual, como: seu alcance máximo,
o fabricante, os requisitos de energia e a resolução de dados.
• Coletar os dados brutos do sensor e definir o intervalo mínimo de tempo no qual a
aplicação deve adquirir os dados do sensor.
• Registrar e anotar os métodos de eventos dos objetos que monitoram as mudanças
nos dados coletados do sensor.
Tela sensível ao toque (touchscreen) – embora este componente já seja utilizado nos
computadores tradicionais, isso não é tão comum como nos dispositivos móveis. Das ações
que normalmente eram executadas com auxílio do mouse, a maioria agora é realizada nas
pontas dos dedos. Isso torna as tarefas de digitação não tão agradáveis, os teclados virtuais
não são muito amigáveis e essas particularidades influenciarão na usabilidade das aplicações
móveis.
Essas são algumas das características mais importantes a serem consideradas
no planejamento de aplicações para dispositivos móveis. Agora que você conhece as
particularidades funcionais dos dispositivos móveis, é hora de aprender um pouco mais sobre
o desenvolvimento de aplicações para esses dispositivos. Vamos começar mostrando uma
perspectiva arquitetural, a forma como devem ser estruturados e organizados os componentes
da aplicação.
esses dados. O componente da camada de visão (view) define e gerencia como os dados são
apresentados ao usuário. O componente da camada de controle (control) gerencia, por meio
de eventos, a interação do usuário com as telas do sistema e passa essas interações para os
componentes de Visão e Modelo.
É comum associar ao padrão MVC uma quarta camada com o objetivo específico de
fornecer o acesso a dados. Geralmente a comunidade de desenvolvedores costuma nomear
essa camada como DAO (Data Accsses Object). A camada de acesso a dados é composta
exclusivamente de classes que acessam os serviços de gerenciadores de bancos de dados
(SGDB) e têm o objetivo específico de manipular os dados da aplicação. Todas as funções
relacionadas com a manipulação de dados, como inserção, alteração, exclusão e pesquisa, são
reservadas a essa camada, inclusive a conexão com o banco de dados.
Os componentes distribuídos por todas essas camadas são implementados como
classes no paradigma de programação orientada a objetos; nesse caso, toda a modelagem
e relacionamentos de classes podem ser representados com o diagrama de classes UML. A
implementação de código geralmente utiliza linguagens como Java, C#, Javascript e Objectve-C;
isso vai depender de qual plataforma de desenvolvimento foi escolhida para produzir o
aplicativo.
A formação básica da estrutura de um projeto de aplicação para dispositivos móveis é
construída de forma automática por meio de geração de código com o auxílio de ferramentas
do tipo IDE (Integrated Development Environment), que são ambientes de desenvolvimento
integrado que, ao gerarem um novo projeto, também criam a estrutura básica de componentes
e realizam a configuração padrão inicial. No caso da plataforma Android, a ferramenta IDE
utilizada é o Android Development Kit; no caso do Windows Phone, a ferramenta IDE utilizada
é o Microsoft Visual Studio. A instalação dessas ferramentas, incluindo alguns frameworks de
desenvolvimento, faz parte da atividade de preparação do ambiente de desenvolvimento.
No caso da plataforma Ionic, não são utilizadas ferramentas do tipo IDE para gerar
a estrutura do projeto; em vez disso, o projeto é criado por meio de linha de comando
executado diretamente no prompt (Windows) ou terminal (MacOS/Linux), cujo processo será
demonstrado no decorrer de seus estudos.
A plataforma Ionic, por sua vez, utiliza muitas tecnologias que foram criadas para o
desenvolvimento de aplicação para web, incluindo o HTML, CSS, Javascript, Bootstrap, etc que
já são mais conhecidas. A seguir, apresentamos as características destas tecnologias.
O HTML (W3SCHOOLS, “HTML”, 2017) é uma linguagem de marcação padrão para criar
conteúdo web; a plataforma Ionic utiliza o HTML ou o HTML5 para criar as páginas visuais
de interação com o usuário. O HTML (Hyper text Markup Language) descreve a estrutura
das páginas da aplicação usando tags de marcação. No código HTML, as tags são elementos
dispostos como blocos de construção e utilizados para estruturar e dar significado ao conteúdo
web.
Agora, veremos o CSS (Cascading Style Sheets) (W3SCHOOLS, “CSS”, 2017), que é uma
linguagem de regras de estilo que descreve o efeito visual que os elementos devem ter quando
apresentados na tela por meio de um documento HTML. O CSS descreve propriedades de cor,
forma, tamanho, entre outras, afetando a aparência dos elementos na tela. As definições de
estilo normalmente são salvas em arquivos .css externos. Com um arquivo de folha de estilo
externo, é possível alterar a aparência de um site inteiro sem alterar código da aplicação,
mudando apenas no arquivo .css.
O SASS (Syntactically Awesome Style Sheets) (SASS, 2017) é uma extensão da linguagem
de regras de estilo CSS que permite o uso de novos recursos, como, por exemplo, a criação de
variáveis, regras aninhadas, importações em linha e outras soluções, e que tem o objetivo de
acelerar o processo de desenvolvimento de código para regras de estilo.
O Javascript (W3SCHOOLS, “Javascript”, 2017) é uma linguagem de programação que
permite criar conteúdo que se atualiza dinamicamente nas páginas web. Esse conteúdo
dinâmico refere-se à habilidade de atualizar a exibição de uma página web para mostrar os
elementos de acordo com novas circunstâncias, gerando novo conteúdo conforme solicitado.
É mais utilizada para fornecer comportamento aos elementos do conteúdo web. Inicialmente,
foi implementada para rodar apenas no lado do cliente em navegadores da web, porém
atualmente os mecanismos da linguagem Javascript estão incorporados em outros aplicativos
que permitem rodar do lado do servidor.
Ao carregar uma página web, o código Javascript é executado pelo navegador somente
depois que o HTML e CSS forem interpretados e colocados juntos na página. Isso assegura que
toda a estrutura e a aparência da página estejam no lugar certo na hora em que o Javascript
for executado.
O código HTML e o CSS são implementados na camada View da aplicação, já o código
Javascript pode ser implementado na camada Cliente ou Servidor. A junção dessas tecnologias
Você sabia que o design web responsivo refere-se à criação de sites e aplicativos que se ajustam automaticamente para ter
boa aparência em todos os tipos de telas dos dispositivos, desde pequenos smartphones, tablets até grandes monitores de
desktops.
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Um aplicativo móvel nativo é uma aplicação para dispositivos móveis codificada em uma
linguagem de programação específica da plataforma de desenvolvimento a qual pertence o
dispositivo. Geralmente, a empresa que detém a propriedade do dispositivo é quem define
qual será o sistema operacional e a linguagem de programação oficial a ser utilizada.
Como os aplicativos nativos são escritos para uma plataforma específica, eles podem
interagir e aproveitar os recursos do sistema operacional e outros softwares normalmente
instalados nessa plataforma. Assim, ele possui a capacidade natural de usar hardware e
software específico do dispositivo, o que significa que aplicativos nativos podem aproveitar a
tecnologia mais recente disponível em dispositivos móveis. Isso pode ser interpretado como
uma vantagem para os aplicativos.
Além disso, os aplicativos móveis nativos oferecem um desempenho rápido e um alto
grau de confiabilidade. Eles também têm uma boa integração com a infraestrutura de hardware
e fornecem acesso a todos os recursos, inclusive aos sensores do dispositivo. No entanto,
na aplicação produzida para a plataforma nativa, o desenvolvedor fica vinculado ao sistema
operacional e à plataforma de desenvolvimento. As plataformas nativas mais utilizadas são:
• iOS desenvolvido pela empresa Apple.
• Android desenvolvido pela empresa Google.
• Windows Phone desenvolvido pela empresa Microsoft
Todas essas empresas oferecem um SDK (software development kit) para instalação das
ferramentas de desenvolvimento. A Apple utiliza o sistema operacional iOS e as linguagens
Objective-C e Swift; o Google utiliza o sistema operacional Android e a linguagem Java; e a
Microsoft utiliza o sistema operacional Windows Phone e linguagens como C# e C++.
Como já foi mencionado, os aplicativos móveis híbridos são criados com uma combinação
de tecnologias da web como HTML, CSS e JavaScript. Desenvolvedores que já possuem
experiência com essas tecnologias podem reutilizar esse conhecimento para desenvolver nas
plataformas híbridas. Uma vez que o aplicativo móvel está pronto, ele pode ser executado
como qualquer outro aplicativo. Uma grande vantagem é que a partir da aplicação criada na
plataforma híbrida podem ser gerados aplicativos para outras plataformas nativas, ou seja, o
aplicativo é implementado uma única vez e pode ser reutilizado para outras plataformas.
As plataformas de desenvolvimento híbrido mais conhecidas são Ionic, PhoneGap e
Xamarin, além destas plataformas existem outras, pois esta é uma área que está em expansão.
Em ambas as plataformas, a distribuição dos aplicativos ao usuário final é realizada por
meio de sites de lojas de aplicativos conhecidas como App Store.
Por exemplo, uma loja de aplicativos é um portal online de distribuição digital onde
os programas de software estão disponíveis para aquisição e download. Todos os principais
fornecedores de sistemas operacionais móveis, incluindo Apple, Google e Microsoft,
disponibilizam suas próprias lojas de aplicativos, o que lhes garante controle sobre o software
disponível em suas respectivas plataformas, além disso, pode existir lojas de aplicativos de
terceiros em operação.
As lojas de aplicativos de terceiros geralmente assumem a forma de uma loja online, em
que os usuários podem navegar por meio dessas diferentes categorias de aplicativos, visualizar
NodeJS
O NodeJS é a base que sustenta a execução de um aplicativo Ionic na fase de
desenvolvimento. Inicialmente se parece com um servidor de aplicações, mas, de acordo com
o fabricante o NodeJS, não é um servidor de aplicações.
Construído sobre a máquina virtual Javascript V8 do Google e aproveitando a sua
simplicidade para escrever aplicações assíncronas, o NodeJS é uma plataforma para
implementar aplicações server-side de sistemas distribuídos, rápidas e escaláveis. Utiliza um
modelo de Input/Output direcionada a evento não bloqueante que o torna leve e eficiente,
ideal para aplicações em tempo real com troca intensa de dados através de dispositivos
distribuídos.
Apache Cordova
Apache Cordova é um framework de desenvolvimento para dispositivos móveis. Sua
licença de uso é de código aberto. Ele fornece acesso a toda infraestrutura de hardware do
dispositivo móvel, permite o uso de tecnologias web padrão, HTML5, CSS3 e Javascript e o
desenvolvimento de aplicativos para várias plataformas nativas (APACHE CORDOVA, 2017).
Os aplicativos são executados dentro de pacotes, chamados de Engine WebView,
direcionados a cada plataforma e dependem de APIs compatíveis com padrões para acessar
as capacidades, como sensores, dados, status da rede etc., de cada dispositivo (APACHE
CORDOVA, 2017). A Figura 2 ilustra a arquitetura de uma aplicação construída com o apoio do
framework Cordova.
Ionic Framework
Atualmente, existe um amplo número de aplicativos web sendo utilizados por usuários
da internet, assim como existem milhares de desenvolvedores que dominam essas tecnologias
que envolvem o HTML. Com os avanços da tecnologia móvel, smartphones e tablets agora
também são capazes de executar aplicações web com o apoio da plataforma Ionic.
Typescript e Javascript
A partir da versão Ionic 2.0, o Typescript foi incorporado à plataforma de desenvolvimento.
O Typescript, opcionalmente, pode ser uma linguagem estaticamente tipada, isto é, uma
linguagem de programação que usa variáveis com tipos específicos. O Typescript não obriga
os desenvolvedores a adicionar tipos, mas, uma vez declarados, eles se tornam estáticos. Os
tipos podem ser adicionados a variáveis, funções, propriedades etc. Isso ajudará o compilador
a mostrar avisos sobre possíveis erros no código antes que um aplicativo seja executado.
Nas linguagens estaticamente tipadas, uma vez que a variável foi declarada com um tipo,
por exemplo, tipo inteiro, ela será assim até o seu fim, não podendo mais ser alterada ao longo
do programa. Normalmente, possuem declaração explícita de tipo da variável, e isso deve ser
especificado logo no momento de sua declaração. Operações entre tipos diferentes muitas
vezes ocasionam erro de código que são logo identificados e apontados pelos compiladores.
Encontrar erros de código é uma tarefa difícil, à medida que o código de um aplicativo
fica maior e mais complexo; nesse caso, as linguagens com tipos estáticos podem oferecer
algumas ótimas vantagens.
O Javascript, por sua vez, é uma linguagem fracamente tipada; no Ionic 1.0, os
desenvolvedores codificavam diretamente com Javascript, e isso era um grande problema para
identificar erros de código. Na maioria das vezes, o programa simplesmente não executava, e
a tarefa de encontrar a causa do erro era extremamente dificultada para programadores não
experientes.
A partir do Ionic 2.0, o desenvolvedor codifica a aplicação utilizando o Typescript, e logo
após, antes de executar, o código é transcrito para a linguagem Javascript em um movimento
denominado “transpile”.
Sugerimos que você acesse a documentação referente ao editor Visual Studio Code no
site code.visualstudio.com. Nele, você encontrará informações relevantes para sua atuação
profissional. Disponível em: <https://code.visualstudio.com/docs>. Acesso em: 10 ago. 2018.
Para finalizar, instale o Visual Studio Code. O primeiro passo é acessar o site oficial do
editor, disponível em: <https://code.visualstudio.com/Download>, acesso em: 10 ago. 2018.
Escolha o download, de acordo com o sistema operacional que você utiliza, para baixar o
instalador encontrado nessa página.
Após essa sequência de procedimentos, o seu ambiente de desenvolvimento estará
pronto para ser utilizado.
Para saber mais sobre como começar a trabalhar com a plataforma Ionic, acesse o site
disponível em: <https://ionicframework.com/getting-started>. Acesso em: 10 ago. 2018.
Agora que você está dentro da pasta dev, vamos utilizar o Ionic CLI para criar um novo
projeto; o CLI é instalado junto com o framework Ionic e são comandos utilizados na linha de
prompt. Para esse procedimento, seu computador deverá estar conectado à internet.
Para criar um novo projeto, digite o comando:
ionic start meuprojeto blank
Existem mais três modelos disponíveis, cada modelo possui alguns recursos prontos, o
modelo blank é o modelo mais básico. Esse assunto será comentado com mais detalhes no
decorrer de seus estudos.
Ainda dentro da pasta dev, acesse a pasta do novo projeto digitando o comando:
cd meuprojeto
Hora de executar seu projeto pela primeira vez. É importante saber que o próximo
comando só funciona se você estiver dentro da pasta do projeto Ionic. O comando para
executar a aplicação vem do Ionic CLI, digite da seguinte forma:
ionic serve
Aguarde alguns minutos, pois o Ionic realizará o build da aplicação, ou seja, o aplicativo
será gerado por meio do projeto. O navegador padrão de seu sistema operacional será
carregado e mostrará a tela inicial da aplicação de acordo com o template blank. A Figura 4
mostra a tela da aplicação.
Vamos conhecer um pouco mais sobre a estrutura do projeto Ionic e realizar algumas
alterações no código-fonte da aplicação. Nesse momento, utilizaremos alguns comandos e
componentes do framework, mas não se preocupe, basta seguir as instruções. Explicações
mais detalhadas sobre os componentes do framework Ionic serão abordadas mais adiante no
decorrer de seus estudos.
Abra o editor de código Visual Studio Code. Será apresentada a tela conforme a Figura 5.
Após abrir a pasta do seu projeto Ionic no editor do Visual Studio Code, será apresentada
a tela como é mostrado na imagem 7.
Abra a pasta src e, em seguida, abra a pasta home. Dentro da pasta home, abra o arquivo
home.html. Será apresentada a tela, conforme é mostrado na Figura 8.
<ion-header>
<ion-navbar>
<ion-title>
Ionic Blank
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<p>
</p>
</ion-content>
Fim código 1
Faça as alterações para que o código da página home.html fique como o Código 2,
mostrado a seguir.
Código 2 Novo código da página home.html
<ion-header>
<ion-navbar color=”primary”>
<ion-title>
Meu Projeto
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<p>
</p>
</ion-content>
<ion-footer>
<ion-toolbar color=”secondary”>
<ion-title>Rodapé</ion-title>
</ion-toolbar>
</ion-footer>
Fim código 2
entre as tags <ion-header> e </ion-header>. O conteúdo de código entre essas duas tags é
mostrado na parte superior da página, que recebe o nome de cabeçalho ou também pode ser
chamado de barra de navegação.
A parte central, delimitada entre as tags <ion-content> e </ion-content>. Essa é a parte
de conteúdo da página, ou seja, os elementos e texto que estarão em evidência, bem no meio
da página. Por fim, a parte delimitada entre as tags <ion-footer> e </ion-footer>, os elementos
colocados entre essas duas tags serão apresentados na parte inferior da página.
A maioria dos aplicativos móveis possui alguns elementos fundamentais. Normalmente,
esses elementos incluem um cabeçalho e um rodapé que irão reservar a parte superior e
inferior da tela. Todos os outros elementos serão colocados entre esses dois. Elementos de
conteúdo como esses servem como um recipiente que envolvem todos os outros elementos
da tela.
Vamos continuar modificando a aparência da aplicação. Faça novas alterações no código
da página home.html para que fique conforme é mostrado no Código 3.
Código 3 Inclusão de botões na página home.html
<ion-header>
<ion-navbar color=”primary”>
<ion-title>
Meu Projeto
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<p>
</p>
<button ion-button>Default</button>
<br/>
<br/>
</ion-content>
<ion-footer>
<ion-toolbar color=”secondary”>
<ion-title>Rodapé</ion-title>
</ion-toolbar>
</ion-footer>
Fim código 3
Veja, esse novo código possibilitou incluir na página componentes que representam
botões de ação. O componente botão é incluído por meio da tag <button>, que é uma tag
HTML comum, mas o que torna o botão como um componente Ionic é a diretiva complementar
“ion-button”. A formatação que atribui a cor ao botão é a diretiva “color=”. Por exemplo, para
formatar o botão com a cor verde, use a diretiva color=”secondary”. A palavra secondary é
uma formatação SASS que pertence aos componentes Ionic.
As alterações de código realizadas até o momento afetaram apenas a parte visual da
aplicação, ou seja, se pensarmos no padrão MVC (Model, View, Controller), o código do arquivo
home.html pertence à parte View do padrão. Para criar comportamentos que representem
ações e funcionalidades na aplicação, é necessário trabalhar em conjunto entre Controller
e View. Isso quer dizer que os métodos que realizam as funções devem ser declarados e
implementados no controlador, e na aplicação é representado pelo arquivo home.js.
Resumindo, podemos entender que, quando o usuário interage com a aplicação clicando
em um link, botão ou outro componente da página home.html, a ação ou comportamento
que ocorrerá em seguida estará implementada no código no controlador (home.js). Vamos
entender isso utilizando outro componente Ionic, o Action Sheets (folha de ação), e realizando
a próxima modificação de código.
Faça novas alterações no código da página home.html para que fique conforme é
mostrado no Código 4.
Código 4 Componente botão para o Action Sheets.
<ion-header>
<ion-navbar color=”primary”>
<ion-title>
Meu Projeto
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<p>
</p>
</button>
</ion-content>
<ion-footer>
<ion-toolbar color=”secondary”>
<ion-title>Rodapé</ion-title>
</ion-toolbar>
</ion-footer>
Fim código 4
foi modificado, em seguida, faça as alterações para que o código do controlador fique como o
Código 5, mostrado a seguir.
Código 5 Arquivo home.js, controlador da página home.html
@Component({
selector: ‘page-home’,
templateUrl: ‘home.html’
})
mostrarComponente(){
cssClass: ‘action-sheets-basic-page’,
buttons: [
text: ‘Apagar’,
role: ‘destructive’,
icon: ‘trash’,
handler: () => {
console.log(‘Clicou em Apagar’);
},
text: ‘Compartilhar’,
icon: ‘share’,
handler: () => {
console.log(‘Clicou em Compartilhar’);
},
text: ‘Tocar’,
icon: ‘arrow-dropright-circle’,
handler: () => {
console.log(‘Clicou em Tocar’);
},
text: ‘Favoritar’,
icon: ‘heart-outline’,
handler: () => {
console.log(‘Clicou em Favoritar’);
},
text: ‘Cancelar’,
role: ‘cancel’,
icon: ‘close’,
handler: () => {
console.log(‘Clicou em Cancelar’);
});
actionSheet.present();
Fim código 5
Os Action Sheets deslizam para cima a partir da borda inferior da tela do dispositivo
e exibem um conjunto de opções com a capacidade de confirmar ou cancelar uma ação. As
folhas de ação às vezes podem ser usadas como uma alternativa aos menus, no entanto, elas
não devem ser usadas para navegação.
Um Action Sheets sempre aparece acima de qualquer outro componente na página e
deve ser descartado para interagir com o conteúdo subjacente. Quando é acionado, o resto da
página escurece para dar mais foco às opções da Folha de Ação.
Essas foram algumas alterações para iniciar e ajudar a entender a utilização da plataforma
de desenvolvimento do framework Ionic; outros componentes serão mostrados mais adiante.
Vale a pena lembrar que nosso primeiro projeto utilizou o template “blank”, porém
outros modelos de templates de aplicação Ionic estão disponíveis para a criação de projetos.
Esse assunto será abordado mais adiante, em outra unidade.
Na próxima unidade, estudaremos a estrutura de diretórios do projeto Ionic e vários
outros componentes de interface com o usuário. Como já foi mencionado, o framework
Ionic possui um grande número de componentes para melhorar a experiência do usuário na
interação com o aplicativo. Uma maneira de começar com o desenvolvimento na plataforma é
conhecer bem esses componentes do framework.
7. QUESTÕES AUTOAVALIATIVAS
A autoavaliação pode ser uma ferramenta importante para você testar o seu desempenho.
Se encontrar dificuldades em responder as questões a seguir, você deverá revisar os conteúdos
estudados para sanar as suas dúvidas.
1) Entre os sensores disponíveis na infraestrutura de um dispositivo móvel, qual é capaz de medir a velocidade
de movimento de um dispositivo ao qual está acoplado?
a) Sensor de posicionamento global (GPS)
b) Sensor de distância
c) Acelerômetro
d) Giroscópio
e) Compass
2) Entre as dependências do ambiente do framework Ionic, qual é responsável por fornecer uma plataforma
para implementar aplicações server-side de sistemas distribuídos?
a) NPM
b) Apache Cordova
c) WebView
d) NodeJS
e) ECMA Script
Gabarito
Confira, a seguir, as respostas corretas para as questões autoavaliativas propostas:
1) Alternativa C.
2) Alternativa D.
8. CONSIDERAÇÕES
Com o estudo desta unidade, você teve a oportunidade de compreender as características
de hardware particulares dos dispositivos móveis, os conceitos de instalação e a utilização da
plataforma de desenvolvimento Ionic.
Também teve a oportunidade de conhecer as principais tecnologias utilizadas para o
desenvolvimento de aplicações híbridas em dispositivos móveis, que são NodeJS, Apache
Cordova, Typescript e outras já conhecidas como HTML, Javascript e CSS.
No decorrer desta unidade, utilizamos a plataforma Ionic com a implementação de
um exemplo de aplicação. O objetivo desse primeiro exemplo foi introduzi-lo nas práticas de
desenvolvimento e nos primeiros conceitos que envolvem a utilização de componentes da
plataforma.
Assim, é fundamental que você compreenda que no desenvolvedor de software
para dispositivos móveis, além de conhecer bem as linguagens de programação, você deve
conhecer bem sua plataforma de trabalho, assim poderá analisar as melhores estratégias de
desenvolvimento, desenvolver estudos e desenhar a solução mais adequada ao domínio do
problema.
Esperamos que você aprofunde seus estudos com as leituras indicadas sobre esses
assuntos. Conhecer as fontes do conhecimento relacionadas ao desenvolvimento de software
para dispositivos móveis pode ajudá-lo futuramente no desempenho de suas atividades.
9. E-REFERÊNCIAS
Lista de figuras
Figura 2 Arquitetura utilizando o framework Cordova. Disponível em: <https://cordova.apache.org/static/img/guide/
cordovaapparchitecture.png>. Acesso em: 07 ago. 2018.
Sites pesquisados
Accelerometer. In: Wikipédia: a enciclopédia livre. Disponível em: <https://en.wikipedia.org/wiki/Accelerometer>. Acesso
em: 10 ago. 2018.
ANDROID Developers “Data Storage”. Site do desenvolvedor Android. Disponível em: <https://developer.android.com/guide/
topics/data/data-storage.html>. Acesso em: 10 ago. 2018.
ANDROID DEVELOPER. Site do desenvolvedor da plataforma Android. Disponível em: <https://developer.android.com/guide/
topics/sensors/sensors_overview.html>. Acesso em: 10 ago. 2018.
APACHE CORDOVA, site do desenvolvedor. Disponível em: <http://cordova.apache.org>. Acesso em: 10 ago. 2018.
APACHE CORDOVA, site do desenvolvedor. Disponível em: <https://cordova.apache.org/docs/en/latest/guide/overview/>.
Acesso em: 10 ago. 2018.
BAROMETER. In: Wikipédia: a enciclopédia livre. Disponível em: <https://en.wikipedia.org/wiki/Barometer>. Acesso em: 20
nov. 2017.
BOOTSTRAP. Site do framework para conteúdo web. Disponível em: <http://getbootstrap.com/>. Acesso em: 20 nov. 2017.
GIROSCOPE. In: Wikipédia: a enciclopédia livre. Disponível em: <https://en.wikipedia.org/wiki/Gyroscope>. Acesso em: 20
nov. 2017.
IONIC Framework, Getting Started. Disponível em: <https://ionicframework.com/docs/components/>. Acesso em: 10 ago. 2018.
NODEJS, JavaScript Runtime Site. Disponível em: <https://nodejs.org/>. Acesso em: 10 ago. 2018.
SASS. Site da linguagem de extensão CSS. Disponível em: <http://sass-lang.com/>. Acesso em: 10 ago. 2018.
TECNOLOGIA MÓVEL. In: Wikipédia: a enciclopédia livre. Disponível em: <https://pt.wikipedia.org/wiki/
Tecnologia_m%C3%B3vel>. Acesso em: 20 nov. 2017.
TYPESCRIPTLANG. Site oficial da linguagem typescript. Disponível em: < http://www.typescriptlang.org/index.html>. Acesso
em: 10 ago. 2018.
VISUAL STUDIO CODE. Site do editor. Disponível em: <https://code.visualstudio.com/>. Acesso em: 10 ago. 2018.
W3SCHOOLS. Tutoriais para estudo e treinamento CSS. Disponível em: <https://www.w3schools.com/css/default.asp>.
Acesso em: 10 ago. 2018.
W3SCHOOLS. Tutoriais para estudo e treinamento HTML. Disponível em: <https://www.w3schools.com/html/default.asp>.
Acesso em: 10 ago. 2018.
W3SCHOOLS. Tutoriais para estudo e treinamento HTML5 Webstorage. Disponível em: <https://www.w3schools.com/html/
html5_webstorage.asp>. Acesso em: 10 ago. 2018.
W3SCHOOLS. Tutoriais para estudo e treinamento Javascript. Disponível em: <https://www.w3schools.com/js/default.asp>.
Acesso em: 10 ago. 2018.
Objetivos
• Criar e configurar projeto de aplicação com o framework Ionic.
• Desenvolver um projeto utilizando componentes da plataforma Ionic.
• Executar e testar o funcionamento do aplicativo desenvolvido.
• Conhecer a forma correta de se utilizar componentes da plataforma Ionic.
• Compreender os conceitos que estão incluídos nas práticas de utilização dos componentes da plataforma Ionic.
Conteúdos
• Estrutura de um projeto Ionic.
• Componentes da plataforma Ionic.
• Comandos utilizados no desenvolvimento de aplicativos Ionic.
• Práticas iniciais para o desenvolvimento na plataforma Ionic.
• Conceitos de navegação entre os componentes da plataforma Ionic.
1) Certifique-se de que você instalou todos os componentes da plataforma Ionic conforme orientações da
unidade anterior.
2) Acesse os links das referências sobre os componentes da plataforma Ionic e pesquise as instruções de
utilização dos componentes que serão abordados nesta unidade.
3) Aprofunde seus conhecimentos com as leituras indicadas referentes à forma correta de implementação dos
componentes da plataforma Ionic.
4) Nas instruções para criar e configurar novos projetos, siga exatamente as orientações, em especial a que se
refere ao nome do projeto e de componentes, pois esses nomes são utilizados no código-fonte da aplicação.
51
© Desenvolvimento para Dispositivos Móveis com Ionic
UNIDADE 2 – COMPONENTES DO FRAMEWORK IONIC
1. INTRODUÇÃO
O objetivo do estudo desta segunda unidade é ajudar você a compreender os métodos e
os conceitos que estão incluídos nas práticas de utilização dos componentes da plataforma Ionic.
Conhecer a forma correta de utilização dos componentes, bem como sua distribuição de código
nos componentes do padrão MVC, ajuda o profissional a se familiarizar com o desenvolvimento
de aplicativos desde o início, melhorando, assim, a perspectiva inicial de produção de software
e, consequentemente, antecipa o conhecimento que irá auxiliar em sua jornada de aprendizado.
Os objetivos a serem alcançados, nesta unidade, fundamentam-se na compreensão
da função de cada componente da plataforma e sua utilidade no contexto de interação
com o usuário da aplicação. É fundamental que você conheça a utilidade particular de cada
componente.
2. COMPONENTES VISUAIS
Os aplicativos da plataforma Ionic são feitos com blocos de construção de alto nível
chamados componentes. Esses componentes permitem que você construa rapidamente uma
interface para interação com o usuário. Existem vários componentes disponíveis, dentre eles
modais, popups e cartões.
Confira os exemplos a seguir para ver como cada componente se parece e para aprender
a usar cada um deles. Quando você estiver familiarizado com o básico, dirija-se aos documentos
da API para obter ideias de como personalizar cada componente.
Você deve estar lembrado de que na Unidade 1 criamos um novo projeto e abordamos a utilização
dos componentes Botão de ação e Action Sheets (folhas de ação). O botão foi o componente usado
para mostrar o Action Sheets. Como foi visto, por meio do evento (click), o botão aciona a apresentação
das opções para o usuário escolher. O Action Sheets é útil quando queremos interagir com o usuário
para que ele escolha uma opção de ação entre várias disponíveis em uma determinada situação.
No próximo exemplo de aplicação, criaremos um novo projeto para implementar e
conhecer vários componentes da API Ionic, começando por um menu de navegação que aciona
a transição entre as páginas da aplicação.
Vamos criar o novo projeto baseado no template blank. O primeiro passo é gerar a pasta
com a estrutura do projeto. Para isso, vamos utilizar novamente o prompt de comando.
Abra o Terminal ou o prompt de comando e acesse a pasta de desenvolvimento dos
projetos Ionic. O comando para isso é:
cd dev
Agora que você está dentro da pasta dev, vamos utilizar o Ionic CLI para criar um novo
projeto. Para esse procedimento, seu computador deverá estar conectado à internet.
Para criar um novo projeto, digite o comando:
ionic start appmenu blank
Execute o seu projeto e aguarde alguns minutos, sua aplicação aparecerá na janela
do navegador web. É importante saber que o próximo comando só funciona se você estiver
dentro da pasta do projeto Ionic. O comando para executar a aplicação vem do Ionic CLI, digite
da seguinte forma:
ionic serve
Aguarde alguns minutos, o Ionic realizará o build da aplicação, ou seja, o aplicativo será
gerado por meio do projeto. O navegador padrão de seu sistema operacional será carregado
e mostrará a tela inicial da aplicação de acordo com o template blank. A Figura 1 mostra a tela
da aplicação.
Agora, vamos gerar novas páginas, serão nove páginas ao todo. Para isso vamos utilizar
novamente o prompt de comando. Verifique se está dentro da pasta do projeto e digite o
comando a seguir para gerar a página “alerts” (use apenas letras minúsculas para o nome das
páginas):
ionic g page alerts
Observe que dentro da pasta src/pages/ foi gerada uma nova pasta com o nome alerts,
dentro desta página foram gerados alguns arquivos, entre eles o alerts.html (view), e o alerts.
ts (controlador).
Repita o procedimento, digitando os comandos para criar as outras páginas.
ionic g page inputs
Menu
O componente menu é uma “gaveta” com opções de navegação que desliza a partir da
lateral da tela. Por padrão, ele desliza para a esquerda, mas o lado pode ser configurado e
deslizar para a direita. Com a aplicação rodando no navegador web, o menu pode ser acionado
com a seta do mouse no canto esquerdo da tela, clicando e arrastando. No dispositivo móvel,
o menu pode ser acionado arrastando o dedo no canto esquerdo da tela para “puxar” o menu.
O menu é uma forma de apresentar várias opções de escolha para o usuário realizar
transições entre várias telas do aplicativo; ele oferece uma forma de “Navegar pela aplicação”.
Pode ser apresentado também na forma de um menu lateral e pode ser arrastado para abrir ou
alternado para se mostrar ao usuário. O conteúdo de um menu será escondido quando o menu
estiver fechado e o seu formato visual se adapta de acordo com o estilo base da plataforma nativa
em uso.
Para implementar um menu, é necessário alterar o código dos arquivos app.module.ts,
app.html e app.component.ts, esses arquivos estão localizados na pasta src/app/.
Abra o arquivo app.module.ts e declare a importação dos componentes de todas as
páginas que foram criadas. Para esse procedimento, faça as alterações para que o código do
arquivo fique como o Código 1, mostrado a seguir.
Código 1 Arquivo app.module.ts
@NgModule({
declarations: [
MyApp,
HomePage,
AlertsPage,
InputsPage,
ListsPage,
CheckboxPage,
CardsPage,
RangePage,
ToastPage,
BadgesPage,
TogglesPage
],
imports: [
BrowserModule,
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
HomePage,
AlertsPage,
InputsPage,
ListsPage,
CheckboxPage,
CardsPage,
RangePage,
ToastPage,
BadgesPage,
TogglesPage
],
providers: [
StatusBar,
SplashScreen,
})
Fim código 1
Essa alteração ainda não é suficiente para que o menu funcione. Salve o arquivo,
aguarde o rebuild da aplicação e veja no navegador se a aplicação está funcionando sem erros
de compilação.
Observe que as modificações de código, além da declaração de importação das páginas
criadas, incluem também a inclusão delas nos arrays declarations e no array entry-
Components do arquivo.
É importante compreender que uma nova página é considerada como um novo compo-
nente na aplicação e deve ser incluída no arquivo app.module.ts, na forma como foi mostrado
no Código 1, para que a página possa ser utilizada.
A implementação deve ser feita no arquivo app.component.ts. Declare a importação dos
componentes de todas as páginas que foram criadas. Declare a variável de array com o nome
“pages” e dentro do construtor da classe preencha o array com os componentes das páginas.
Implemente o código do método openPage(). Para esses procedimentos, faça as alterações
para que o código do arquivo fique como o Código 2, mostrado a seguir.
Código 2 Arquivo app.component.ts
@Component({
templateUrl: ‘app.html’
})
rootPage:any = HomePage;
platform.ready().then(() => {
// Here you can do any higher level native things you might
need.
statusBar.styleDefault();
splashScreen.hide();
});
this.pages = [
];
this.nav.push(page.component);
Fim código 2
Essa alteração ainda não é suficiente para que o menu funcione, mas salve o arquivo, aguarde
o rebuild da aplicação e veja no navegador se a aplicação está funcionando sem erros de compilação.
Observe, logo nas primeiras duas linhas do código 2, que também foram incluídas
as importações dos componentes ViewChild e Nav da API Ionic. Esses componentes são
utilizados para realizar a transição entre páginas no método openPage().
As alterações de código nos componentes estão prontas, mas para o menu funcionar
efetivamente é necessário fazer as alterações na página app.html. Modifique o arquivo para
que fique como o Código 3, mostrado a seguir.
Código 3 Página app.html
<ion-menu [content]=”content”>
<ion-header>
<ion-toolbar>
<ion-title>Menu</ion-title>
</ion-toolbar>
</ion-header>
<ion-content>
<ion-list>
{{page.title}}
</button>
</ion-list>
</ion-content>
</ion-menu>
Fim código 3
Observe no código 3, que o menu começa na tag <ion-menu> e as opções do menu estão
em uma lista começando pela tag <ion-list>. A lista é construída dinamicamente a partir do
array pages que é percorrido iterativamente por meio da diretiva *ngFor. Dessa forma, cada
linha do array pages se transforma em um item da lista. Cada item possui um título que será
exibido nas opções do menu e um evento “click” que aciona o método openPage passando o
nome da página que será aberta.
Abra o arquivo home.html e modifique-o, incluindo apenas o código realçado em azul da
parte superior em destaque, conforme é mostrado no trecho de código a seguir.
<ion-header>
<ion-navbar color=”primary”>
</button>
<ion-title>
Exemplos Componentes
</ion-title>
</ion-navbar>
</ion-header>
...
...
Antes de dar continuidade aos seus estudos, para saber mais sobre o componente
Menu, sugerimos que acesse a documentação do componente no site do Ionic Framework
disponível em: <https://ionicframework.com/docs/components/#menus>. Acesso em: 21
ago. 2018.
Alerts
Alerts são uma ótima forma de oferecer ao usuário a capacidade de escolher uma ação
específica. Podem ser utilizados para fornecer informações importantes ao usuário ou exigir
que eles tomem uma decisão. Em uma perspectiva de interação com o usuário, os Alerts
podem ser pensados como uma apresentação visual de um “quadro flutuante” que cobre
apenas uma parte da tela. Isso significa que os Alerts só devem ser usados para ações rápidas,
como verificação de senha, notificações de pequenas aplicações ou opções rápidas.
Feche todas as abas de arquivos abertos que estão no editor Visual Studio Code. Abra
o arquivo alert.ts que está na pasta pages/alerts/. Faça as alterações para que fique como é
mostrado no Código 4.
Código 4 Arquivo alert.ts.
@IonicPage()
@Component({
selector: ‘page-alerts’,
templateUrl: ‘alerts.html’,
})
ionViewDidLoad() {
console.log(‘ionViewDidLoad AlertsPage’);
mostrarAlert() {
title: ‘Prompt’,
inputs: [
name: ‘nome’,
placeholder: ‘Nome’
},
],
buttons: [
text: ‘Cancelar’,
console.log(‘Clicou no Cancelar’);
},
text: ‘Entrar’,
console.log(‘Clicou no Entrar’);
});
prompt.present();
Fim código 4
<ion-header>
<ion-navbar>
<ion-title>Componente Alert</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
</ion-content>
Fim código 5
Inputs
Os inputs (Campo de entrada de dados) são essenciais para coletar e manipular a entrada
de dados de forma segura. Eles devem ser apresentados de maneira intuitiva para os usuários
interagirem. Cada campo de entrada em um formulário possui um controle, uma função que
se liga ao valor no campo e executa a validação. Um grupo de campos é uma coleção de
controles que manipulam o envio de formulários e fornecem uma ligação de alto nível que
pode ser usada para determinar se o formulário inteiro é válido.
@IonicPage()
@Component({
selector: ‘page-inputs’,
templateUrl: ‘inputs.html’,
})
ionViewDidLoad() {
console.log(‘ionViewDidLoad InputsPage’);
enviar(campoLogin, campoSenha){
this.login = campoLogin;
this.senha = campoSenha;
Fim código 6
<ion-header>
<ion-navbar>
<ion-title>inputs</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-item>
</ion-item>
<ion-item>
</ion-item>
</ion-list>
<p>{{campoLogin}}</p>
<p>{{mensagem}}</p>
</ion-content>
Fim código 7
Antes de dar continuidade aos seus estudos, certifique-se de que entendeu como
funciona o compomente input e obtenha mais informações sobre esse componente,
acessando o site do Ionic Framework disponível em: <https://ionicframework.com/docs/
components/#inputs>. Acesso em: 21 ago. 2018.
Lists
As lists são usadas para exibir linhas de informações, como lista de contatos, lista de
reprodução ou menu de opções. As listas são os elementos mais populares de qualquer aplicação
web ou móvel. Geralmente, são usadas para exibir várias informações separadas em linhas e podem
ser combinadas com outros elementos HTML, como imagens, ícones etc., para criar diferentes
apresentações. O framework Ionic oferece diferentes tipos de listas para facilitar seu uso.
Vamos à implementação do componente list. Para isso, feche todas as abas de arquivos
abertos que estão no editor Visual Studio Code. Abra o arquivo lists.ts que está na pasta pages/
lists/. Faça as alterações conforme é mostrado no Código 8.
@IonicPage()
@Component({
selector: ‘page-lists’,
templateUrl: ‘lists.html’,
})
ionViewDidLoad() {
console.log(‘ionViewDidLoad ListsPage’);
enviar(item: string){
Fim código 8
<ion-header>
<ion-navbar>
<ion-title>lists</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-icon name=’planet’></ion-icon>
Saturno Planet
</ion-item>
<ion-item (click)=”enviar(‘Alarme’)”>
<ion-icon name=’alarm’></ion-icon>
Alarme
</ion-item>
<ion-item (click)=”enviar(‘Android’)”>
<ion-icon name=’logo-android’></ion-icon>
Android
</ion-item>
<ion-item (click)=”enviar(‘Apple’)”>
<ion-icon name=’logo-apple’></ion-icon>
Apple
</ion-item>
<ion-item (click)=”enviar(‘Contatos’)”>
<ion-icon name=’contacts’></ion-icon>
Contatos
</ion-item>
<ion-item (click)=”enviar(‘Bicicleta’)”>
<ion-icon name=’bicycle’></ion-icon>
Bicicleta
</ion-item>
</ion-list>
</ion-content>
Fim código 9
Checkbox
Um checkbox (caixa de seleção) é um componente de entrada que contém um valor
booleano. As caixas de seleção são iguais aos componentes de caixa de seleção da linguagem
HTML. No entanto, a plataforma Ionic oferece várias formas de configurações para caixas de
seleção diferentes. Um atributo pode ser utilizado para definir o valor padrão do checkbox
e o atributo poderá ser ativado ou desativado pela ação do usuário quando interage com o
checkbox.
Vamos à implementação do componente checkbox. Para tanto, feche todas as abas
de arquivos abertos que estão no editor Visual Studio Code. Abra o arquivo checkbox.ts que
está na pasta pages/checkbox/. Faça as alterações para que a implementação fique como é
mostrado no Código 10.
Código 10 Arquivo checkbox.ts
@IonicPage()
@Component({
selector: ‘page-checkbox’,
templateUrl: ‘checkbox.html’,
})
azeitona: boolean;
martini: boolean;
manhattan: boolean;
ionViewDidLoad() {
console.log(‘ionViewDidLoad CheckboxPage’);
updateAzeitona() {
updateMartini() {
updateManhattan() {
Fim código 10
<ion-header>
<ion-navbar>
<ion-title>checkbox</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-item>
<ion-label>Azeitona</ion-label>
</ion-item>
<ion-item>
<ion-label>Martini</ion-label>
<ion-checkbox [(ngModel)]=”martini”
(ionChange)=”updateMartini()”></ion-checkbox>
</ion-item>
<ion-item>
<ion-label>Manhattan</ion-label>
</ion-item>
</ion-list>
</ion-content>
Fim código 11
Cards
Os cards (cartões) são uma ótima forma de exibir partes importantes de conteúdo. Eles
são relativamente mais novos que os outros componentes, mas estão emergindo rapidamente
como um padrão de design para aplicativos. Além disso, eles possibilitam conter e organizar
informações para destacar de forma visual e melhorar as expectativas do usuário.
Os cartões facilitam a exibição visual da mesma informação em vários tamanhos de tela
diferentes quando utilizados em aplicativos móveis. Eles também permitem mais controle,
são flexíveis e podem até ser animados. Os cartões, geralmente, são colocados uns sobre os
outros, mas eles também podem ser usados como uma “página” e deslocados entre esquerda
e direita na tela.
Para implementar o componente cards, você deverá fechar todas as abas de arquivos
abertos no editor, abrir o arquivo cards.html que está na pasta pages/cards/ e fazer as
alterações para que a implementação fique como é mostrado no Código 12.
<ion-header>
<ion-navbar>
<ion-title>cards</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-card>
<ion-card-header>
Pink Floyd
</ion-card-header>
<ion-card-content>
— the band’s last show with Waters was at Earls Court in London on
17 June 1981.
</ion-card-content>
</ion-card>
</ion-content>
Fim código 12
Antes de prosseguir seus estudos sobre o componente range, sugerimos que aprofunde
seus conhecimentos referentes ao componente cards, acessando a documentação do
componente no site do Ionic Framework. Disponível em: <https://ionicframework.com/
docs/components/#cards>. Acesso em: 22 ago. 2018.
Range
O range (alcance) é um componente que permite aos usuários selecionar diversos valores
movendo um botão deslizante ao longo da barra ou faixa. Além disso, ele permite o uso de
etiquetas de escala colocadas em ambos os lados do intervalo que adicionam propriedades
de início e fim ao intervalo. Valores mínimo e máximo também podem ser passados para o
intervalo por meio das propriedades min e max, respectivamente. Por padrão, o intervalo
define o valor mínimo para 0 e o máximo para 100.
Para implementar o componente range, você deverá fechar todas as abas de arquivos
abertos, abrir o arquivo range.html e fazer as alterações para que a implementação fique como
é mostrado no Código 13.
Código 13 Arquivo range.html
<ion-header>
<ion-navbar>
<ion-title>range</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-list-header>
Ajuste os controles
</ion-list-header>
<ion-item>
<ion-range [(ngModel)]=”brightness”>
</ion-range>
</ion-item>
<ion-item>
</ion-range>
</ion-item>
<ion-item>
</ion-range>
</ion-item>
<ion-item>
</ion-range>
</ion-item>
</ion-list>
</ion-content>
Fim código 13
Toast
Um toast (torrada) é uma notificação sutil comumente usada como mensagem de
interação com o usuário. Pode ser usado para fornecer comentários sobre uma operação ou
para exibir uma mensagem do sistema. A mensagem aparece sobre o conteúdo do aplicativo e
pode ser fechada pelo aplicativo para retomar a interação do usuário com a tela. A mensagem
a ser exibida deve ser passada na propriedade message. A opção showCloseButton pode ser
definida como verdadeira para exibir um botão de fechamento no Toast.
Vamos à implementação do componente toast. Feche todas as abas de arquivos abertos
no editor. Abra o arquivo toast.ts e faça as alterações para que a implementação fique como é
mostrado no Código 14.
Código 14 Código do arquivo toast.ts
@IonicPage()
@Component({
selector: ‘page-toast’,
templateUrl: ‘toast.html’,
})
ionViewDidLoad() {
console.log(‘ionViewDidLoad ToastPage’);
showToast(position: string) {
duration: 2000,
position: position
});
toast.present(toast);
showToastWithCloseButton() {
showCloseButton: true,
closeButtonText: ‘Ok’
});
toast.present();
showLongToast() {
duration: 2000,
});
toast.present();
Fim código 14
<ion-header>
<ion-navbar>
<ion-title>toast</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
</ion-content>
Fim código 15
Badge
O badge (distintivo) é um componente simples que apresenta números, texto ou ícones em
um formato visual distintivo. São componentes pequenos que se destacam na tela do aplicativo e
tipicamente comunicam um valor visual ao usuário. Um badge geralmente é usado para exibir uma
combinação de imagem, textos e números associados a um item que está em destaque na tela.
Vamos à implementação do componente badge. Para tanto, feche todas as abas
de arquivos abertos no editor. Abra o arquivo badges.html e faça as alterações para que a
implementação fique como é mostrado no Código 16.
Código 16 Arquivo badge.html
<ion-header>
<ion-navbar>
<ion-title>badges</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-card>
<ion-card-content>
<ion-card-title>
Claude Debussy
</ion-card-title>
<p>
</p>
</ion-card-content>
<ion-item>
Albums
<ion-badge item-end>9</ion-badge>
</ion-item>
<ion-item>
Followers
<ion-badge item-end>260k</ion-badge>
</ion-item>
</ion-card>
</ion-content>
Fim código 16
Toggle
O toggle (alternar) é um componente de entrada a ser utilizado com a função booleana de
liga ou desliga. Como o componente de caixa de seleção, as ações de alternância entre valores
são frequentemente usadas para permitir ao usuário ativar ou desativar uma configuração.
Atributos com as propriedades de desabilitado ou verificado também podem ser aplicados ao
toggle para controlar seu comportamento.
Para implementar o componente toggle, você deverá fechar todas as abas de arquivos
abertos no editor. Abrir o arquivo toggles.html e fazer as alterações para que a implementação
fique como é mostrado no Código 17.
<ion-header>
<ion-navbar>
<ion-title>toggles</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-list-header>
Configuração
</ion-list-header>
<ion-item>
</ion-item>
<ion-item>
<ion-label>Teto Solar</ion-label>
<ion-toggle color=”energized”></ion-toggle>
</ion-item>
<ion-item>
<ion-label>Freios ABS</ion-label>
</ion-item>
<ion-item>
<ion-label>Airbag Cortina</ion-label>
</ion-item>
<ion-item>
<ion-label>Frigobar</ion-label>
<ion-toggle color=”danger”></ion-toggle>
</ion-item>
</ion-list>
</ion-content>
Fim código 17
Acesse a documentação do componente no site do Ionic Framework para saber mais sobre:
• o componente Toggle. Disponível em: <https://ionicframework.com/docs/
components/#toggle>. Acesso em: 22 ago. 2018.a API de componentes. Disponível
em: <https://ionicframework.com/docs/api/>. Acesso em: 22 ago. 2018.
Navigation
Navigation não é um componente propriamente dito, mas é a forma como os usuários
se movem entre diferentes páginas em um aplicativo.
A navegação na plataforma Ionic pode ser realizada de várias formas e com um conjunto
de componentes. Para habilitar a navegação, a API Ionic fornece a classe NavController para
ser instanciada e servir como componente base para controlar a navegação no aplicativo.
O NavController tem a funcionalidade de controlador de navegação. Basicamente, um
controlador de navegação é um vetor de páginas que representam um histórico de navegação
em particular. Esse vetor pode ser manipulado para navegar em todo o aplicativo, pressionando
e exibindo páginas ou inserindo e removendo-as no vetor do histórico. A página atual, ou seja,
aquela que está sendo exibida no momento, é a última que está no topo do vetor. Podemos
comparar o vetor a uma estrutura de dados do tipo pilha, a página a ser exibida é colocada no
topo da pilha; para voltar à página anterior, basta remover a página atual que está no topo.
Já vimos anteriormente como navegar pela aplicação utilizando um menu de opções que
realiza a transição para várias páginas no aplicativo. Agora, vamos implementar um exemplo
de navegação utilizando a classe NavController e também as diretivas navPush e navPop.
Conforme exemplos anteriores, no prompt de comando, crie uma nova página com
o nome “principal”. Abra o arquivo app.module.ts, faça a importação da página principal e
declare a página nos arrays declarations e entryComponents. Em seguida, abra o
arquivo home.ts e faça as modificações de acordo com o Código 18.
Código 18 Arquivo home.ts
@Component({
selector: ‘page-home’,
templateUrl: ‘home.html’
})
params: Object;
pushPage: any;
this.pushPage = PrincipalPage;
novaPagina(){
this.navCtrl.push(PrincipalPage);
Fim código 18
<ion-header>
<ion-navbar color=”primary”>
<ion-icon name=”menu”></ion-icon>
</button>
<ion-title>
Componentes
</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<p>Teste de Navegação</p>
<br>
<br>
</ion-content>
<ion-footer>
<ion-toolbar color=”secondary”>
<ion-title>Rodapé</ion-title>
</ion-toolbar>
</ion-footer>
Fim código 19
@IonicPage()
@Component({
selector: ‘page-principal’,
templateUrl: ‘principal.html’,
})
ionViewDidLoad() {
console.log(‘ionViewDidLoad PrincipalPage’);
voltar(){
this.navCtrl.pop();
Fim código 20
<ion-navbar>
<ion-title>principal</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<br>
</ion-content>
Fim código 21
3. QUESTÕES AUTOAVALIATIVAS
Sugerimos que você faça as questões autoavaliativas propostas a seguir para verificar o
seu aprendizado.
1) Entre os componentes do framework Ionic, qual é útil quando queremos interagir com o usuário para que ele
escolha uma opção de ação entre várias disponíveis em uma determinada situação.
a) Listas
b) Badges
c) Toasts
d) Action Sheets
e) Alerts
2) Qual das alternativas apresenta o comando CLI que tem como efeito executar o projeto Ionic.
a) Ionic start meuprojeto
b) Ionic serve
c) Ionic generate meuprojeto
d) Ionic -g meuprojeto
e) Ionic md meuprojeto
Gabarito
Confira, a seguir, as respostas corretas para as questões autoavaliativas propostas:
1) Alternativa D.
2) Alternativa b.
4. CONSIDERAÇÕES
Com o estudo desta unidade você teve a oportunidade de conhecer e implementar vários
componentes de API do framework Ionic, além disso pôde utilizar e testar as funcionalidades
de cada um deles.
Também teve a oportunidade de conhecer a estrutura do projeto Ionic, alguns comandos
da linguagem Typescript e outras já conhecidas como HTML, Javascript.
Esperamos que você aprofunde seus conhecimentos com as leituras indicadas sobre
esses assuntos. Conhecer bem os componentes do framework Ionic e saber utilizá-los
no desenvolvimento de software para dispositivos móveis pode ajudá-lo futuramente no
desempenho de suas atividades.
5. E-REFERÊNCIAS
IONIC Framework, Componentes. Site do desenvolvedor, documentão técnica. Disponível em: <https://ionicframework.com/
docs/components/>. Acesso em: 22 ago. 2018.
IONIC Framework, API. Site do desenvolvedor, documentão técnica. Disponível em: < https://ionicframework.com/docs/
api/>. Acesso em: 22 ago. 2018.
Objetivos
• Criar e configurar projeto com a utilização de plugin para armazenamento de dados.
• Preparar o projeto para dar suporte a aplicações nativas.
• Compreender conceitos de armazenamento de dados em dispositivos móveis.
• Executar e testar o aplicativo.
• Gerar e construir o aplicativo para ser instalado na plataforma nativa Android.
Conteúdos
• Preparação de projetos para trabalhar com banco de dados.
• Armazenamento e gerenciamento de dados.
• Banco de dados SQLite.
• Componentes de entrada de dados.
1) É importante revisar os conceitos de bancos de dados SQL, assim como os comandos da linguagem SQL
utilizados para essa finalidade; acesse os sites indicados no tópico e-referências.
2) Nas instruções para criar e configurar novos projetos, siga exatamente as orientações, em especial a que se
refere ao nome do projeto e de componentes, pois esses nomes são utilizados no código-fonte da aplicação.
3) Nas atividades de codificação, altere um arquivo de cada vez e acompanhe sempre no browser o funcionamento
correto de sua aplicação.
4) Procure corrigir erros de código logo no início, evite acúmulo de linhas com erros.
5) Ao concluir a codificação da aplicação, instale um dos SDKs, Android ou iOS para poder realizar a geração do
aplicativo e testar diretamente no dispositivo.
95
© Desenvolvimento para Dispositivos Móveis com Ionic
UNIDADE 3 – DESENVOLVIMENTO DE APLICAÇÃO COM GERENCIAMENTO DE DADOS
1. INTRODUÇÃO
O objetivo do estudo desta terceira unidade é estabelecer os conceitos e as práticas
relacionadas ao armazenamento e ao gerenciamento de dados em aplicações para dispositivos
móveis, além disso, no decorrer deste estudo, você terá a oportunidade de compreender
as práticas e os métodos utilizados quando os requisitos desejados pelo usuário se referem
a aplicativos que utilizam armazenamento e recuperação de dados. E terá, também, a
oportunidade de conhecer quais são os componentes do framework Ionic utilizados para o
gerenciamento de dados, incluindo sua forma correta de utilização.
Os objetivos a serem alcançados, nesta unidade, fundamentam-se na compreensão das
técnicas de armazenamento interno e externo ao dispositivo móvel.
Armazenamento Interno
O armazenamento interno refere-se a armazenar dados no próprio dispositivo, ou seja,
utilizar a infraestrutura interna do dispositivo e os recursos de armazenamento instalados no
sistema operacional. Esse tipo de armazenamento permite que seus aplicativos funcionem
efetivamente quando não há conexão, além de oferecer funcionalidades mais avançadas e,
muitas vezes, mais rápidas do que o armazenamento no lado do servidor.
O armazenamento interno pode ser realizado também por meio de arquivos em
cache temporário. Um cache é um armazenamento temporário que pode ser mantido para
armazenar dados e transações recentemente acessados pela aplicação evitando que sejam
perdidos devido a falha de conexão.
Por padrão, os arquivos salvos no armazenamento interno de cache são privados do
aplicativo e não podem ser acessados por outros aplicativos (nem pelo usuário do dispositivo).
Quando o usuário desinstalar um aplicativo, esses arquivos serão removidos. Quando houver
pouco espaço de armazenamento interno no dispositivo, o sistema operacional poderá
excluir esses arquivos de cache para liberar espaço. No entanto, não dependa do sistema
para limpar esses arquivos. Mantenha sempre você mesmo os arquivos de cache e respeite
um limite razoável de espaço consumido (ANDROID Developers “Data-Storage”, 2017). Para
preservar o espaço de arquivos e manter o desempenho do aplicativo, é importante gerenciar
cuidadosamente os arquivos de cache durante todo o ciclo de vida do aplicativo, para isso é
recomendado ir removendo os que não forem mais necessários.
O armazenamento interno pode ainda ser realizado utilizando armazenamento local
(local storage). O armazenamento local é um padrão HTML5 que oferece armazenamento
de dados offline persistente. Ele é seguro por origem (domínio e protocolo), os dados nunca
são transferidos para o servidor e grandes quantidades de dados podem ser armazenadas
localmente (5MB), sem afetar o desempenho da aplicação (W3SCHOOLS “HTML5 Webstorage”,
2017). É muito fácil de usar e permite que qualquer tipo de dados, incluindo objetos e arrays,
seja rapidamente armazenado no dispositivo móvel.
Imagine uma situação em que seja necessário implementar uma aplicação simples como
um cadastro com nomes de contatos de clientes. Nesse caso, pode-se usar uma abordagem
simples de armazenamento local. Uma boa prática muito comum para esse tipo de abordagem
é carregar todos os seus dados de contatos em uma matriz javascript e mantê-la ali mesmo.
Você pode adicionar, atualizar ou excluir contatos realizando operações de dados em sua
matriz. Em pontos estratégicos, ao longo de determinados procedimentos da aplicação, você
pode optar por gravar seus dados no armazenamento local utilizando uma operação simples
de código.
Essa não é a abordagem mais sofisticada, mas para muitas aplicações funciona
perfeitamente, é rápida o suficiente, mantém o código de forma realmente simples e, a menos
que seja necessário lidar com grandes quantidades de dados, é a ferramenta certa para a
situação. Se suas necessidades de armazenamento de dados forem mais complexas, com
muitas tabelas de dados e relacionamentos envolvendo regras de negócios com restrições,
pode ser o caso de se examinar a utilização de um banco de dados SQL tradicional.
O armazenamento interno pode ser realizado também utilizando banco de dados. Muitas
aplicações exigem a capacidade de acessar e baixar informação de um repositório de dados
e operar sobre essas informações, estando conectado ou mesmo quando está desconectado.
Dependendo da quantidade de espaço para armazenar dados, esse repositório poderá ser um
banco de dados, que pode estar disponível através da rede ou da internet, ou poderá ser um
aplicativo de banco de dados executado no próprio dispositivo móvel.
Você sabe em quais situações podemos optar por um aplicativo de banco de dados
executando no próprio dispositivo móvel?
São nas seguintes situações:
• Quando o aplicativo que utiliza os dados armazenados depende apenas de dados
offline.
• Quando a largura de banda de rede não é ideal e o aplicativo depende de dados
armazenados.
• Quando o desempenho da aplicação é estável e previsível independentemente da
disponibilidade da conexão com a rede.
Armazenamento Externo
O Armazenamento externo pode ser implementado por meio de mídia de dados,
cartão SD, pendrive, HD-externo etc. Qualquer função da aplicação ligada ao armazenamento
externo deve verificar se a mídia está disponível, antes de executar procedimentos de leitura
ou gravação de dados. A mídia pode estar montada no dispositivo, ausente, somente para
leitura ou em algum outro estado. Por exemplo, a mídia pode ter sido removida ou pode estar
sendo compartilhada com outro aplicativo e estar em uso no momento.
Este tipo de armazenamento pode ser por meio da rede ou internet. Você pode usar
a rede ou a internet para armazenar e recuperar dados em seus próprios serviços baseados
em aplicações na web. Esse é um outro cenário de armazenamento de dados bem típico, um
aplicativo móvel usa um banco de dados hospedado na nuvem e se conecta remotamente
a ele para acessar e armazenar seus dados. Isso, é claro, implica que, para ter um bom
desempenho, um aplicativo móvel precisa de uma conexão de rede ativa e bastante rápida. A
parte do sistema que fornece um serviço de armazenamento para ser acessado remotamente
por outros aplicativos recebe o nome de back-end.
Geralmente esse tipo de aplicação utiliza uma arquitetura de software orientada
a serviços. Nesse cenário temos a aplicação dividida em duas partes distintas, que são o
aplicativo, que é executado no dispositivo móvel, representa o front-end e está no lado Cliente
da arquitetura, e o serviço web, que representa o back-end e é executado do lado do servidor
na arquitetura.
Os serviços web são implementados em linguagens como Java, C#, PHP e utilizam SOA
(Service Oriented Architecture – Arquitetura Orientada a Serviços); é um estilo de arquitetura
de software que utiliza um protocolo de troca de mensagens, cujo princípio fundamental
determina que as funcionalidades implementadas pelas aplicações devam ser disponibilizadas
na forma de serviços.
Os serviços também podem ser implementados utilizando REST (Representational State
Transfer – Transferência de Estado Representacional), estilo arquitetural de construção de
software para implementação de serviços web. O REST se tornou um padrão para softwares que
fornecem interoperabilidade entre sistemas na internet. O estilo descreve qualquer interface
web simples que utiliza XML, JSON, ou texto, e utiliza o protocolo HTTP para comunicação de
dados.
Para maiores informações sobre o plugin SQLite, acesse o site do desenvolvedor Ionic
e leia as instruções disponíveis em: <https://ionicframework.com/docs/native/sqlite/>.
Acesso em: 23 ago. 2018.
Essa aplicação deverá ser instalada no dispositivo móvel para realizar os testes quando
estiver concluída. Para habilitar a instalação do seu aplicativo diretamente no dispositivo
Android ou iOS, é necessário instalar o suporte à plataforma nativa. No caso da plataforma
Android, isso é feito com o seguinte comando:
ionic cordova platform add android
Outras instruções sobre como instalar o aplicativo no dispositivo móvel serão abordadas
no decorrer dos seus estudos.
Antes de começar com a implementação de código, vamos aprender um pouco mais
sobre o framework Ionic conhecendo o componente provider.
Os providers (provedores) permitem que você crie um componente independente para
fornecer algum tipo de funcionalidade específica ao seu aplicativo. O papel de um provedor
pode incluir funções, como buscar dados de um servidor, realizar operações em dados,
compartilhar dados, fornecer um conjunto específico de operações etc.
Em geral, usamos provedores para separar funcionalidades reutilizáveis em nossas
aplicações. Ao implementar um provedor, abstraímos o componente que fornece uma
funcionalidade específica; isso torna o código mais sustentável e nos permite reutilizar sua
funcionalidade em vários locais diferentes na aplicação.
Continuando com o projeto, ainda dentro da pasta appDados, crie três providers com os
comandos:
ionic g provider basedados
Ainda no prompt de comando, crie uma nova página com o nome editproduto:
@NgModule({
declarations: [
MyApp,
HomePage,
EditprodutosPage
],
imports: [
BrowserModule,
IonicModule.forRoot(MyApp)
],
bootstrap: [IonicApp],
entryComponents: [
MyApp,
HomePage,
EditprodutosPage
],
providers: [
StatusBar,
SplashScreen,
SQLite,
BasedadosProvider,
ProdutosProvider,
CategoriasProvider
})
Fim código 1
import ‘rxjs/add/operator/map’;
@Injectable()
public getDB() {
return this.sqlite.create({
name: ‘products.db’,
location: ‘default’
});
public createDatabase() {
return this.getDB()
// Criando as tabelas
this.createTables(db);
this.insertDefaultItems(db);
})
db.sqlBatch([
])
if (data.rows.item(0).qtd == 0) {
db.sqlBatch([
])
})
Fim código 2
Para conhecer mais ou relembrar sobre a programação com SQL, acesse o site da
W3Schools. Disponível em: <https://www.w3schools.com/sql/default.asp>. Acesso em: 23
ago. 2018.
@Component({
templateUrl: ‘app.html’
})
platform.ready().then(() => {
// Plataforma pronta.
// Plugins carregados.
statusBar.styleDefault();
dbProvider.createDatabase()
.then(() => {
this.openHomePage(splashScreen);
})
.catch(() => {
this.openHomePage(splashScreen);
});
});
splashScreen.hide();
this.rootPage = HomePage;
Fim código 3
import ‘rxjs/add/operator/map’;
@Injectable()
return this.dbProvider.getDB()
})
return this.dbProvider.getDB()
})
return this.dbProvider.getDB()
})
return this.dbProvider.getDB()
if (data.rows.length > 0) {
product.id = item.id;
product.name = item.name;
product.price = item.price;
product.duedate = item.duedate;
product.active = item.active;
product.category_id = item.category_id;
return product;
return null;
})
})
return this.dbProvider.getDB()
if (name) {
if (data.rows.length > 0) {
products.push(product);
return products;
} else {
return [];
})
})
id: number;
name: string;
price: number;
duedate: Date;
active: boolean;
category_id: number;
Fim código 4
getAll(), implementados no Código 4, veja que todos os métodos utilizam código SQL,
observe também, no final do arquivo, a classe de modelagem de dados Products.
Abra o arquivo do provider categorias.ts e faça as alterações para que a implementação
fique como é mostrado no Código 5.
Código 5 Código do arquivo categorias.ts
import ‘rxjs/add/operator/map’;
@Injectable()
public getAll() {
return this.dbProvider.getDB()
if (data.rows.length > 0) {
categories.push(category);
return categories;
} else {
return [];
})
})
Fim código 5
@IonicPage()
@Component({
selector: ‘page-editprodutos’,
templateUrl: ‘editprodutos.html’,
})
model: Product;
categories: any[];
constructor(
if (this.navParams.data.id) {
this.productProvider.get(this.navParams.data.id)
this.model = result;
})
ionViewDidLoad() {
this.categoryProvider.getAll()
this.categories = result;
})
.catch(() => {
});
save() {
this.saveProduct()
.then(() => {
this.navCtrl.pop();
})
.catch(() => {
});
private saveProduct() {
if (this.model.id) {
return this.productProvider.update(this.model);
} else {
return this.productProvider.insert(this.model);
Fim código 6
<ion-header>
<ion-navbar>
<ion-title>Cadastro Produtos</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-list>
<ion-item>
<ion-label stacked>Descrição</ion-label>
</ion-item>
<ion-item>
<ion-label stacked>Preço</ion-label>
</ion-item>
<ion-item>
<ion-label stacked>Inclusão</ion-label>
</ion-item>
<ion-item>
<ion-label stacked>Categoria</ion-label>
</ion-select>
</ion-item>
<ion-item>
<ion-label>Ativo</ion-label>
</ion-item>
</ion-list>
</ion-content>
Fim código 7
@IonicPage()
@Component({
selector: ‘page-home’,
templateUrl: ‘home.html’
})
ionViewDidEnter() {
this.getAllProducts();
getAllProducts() {
this.productProvider.getAll(!this.onlyInactives, this.searchText)
this.products = result;
});
addProduct() {
this.navCtrl.push(EditprodutosPage);
editProduct(id: number) {
removeProduct(product: Product) {
this.productProvider.remove(product.id)
.then(() => {
this.products.splice(index, 1);
})
filterProducts(ev: any) {
this.getAllProducts();
Fim código 8
<ion-header>
<ion-navbar>
<ion-title>Exemplo SQLite</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<ion-searchbar (ionInput)=”filterProducts($event)”
[(ngModel)]=”searchText”></ion-searchbar>
<ion-list>
</button>
<ion-item-options side=”left”>
<ion-icon name=”trash”></ion-icon>
Excluir
</button>
</ion-item-options>
</ion-item-sliding>
</ion-list>
</ion-fab>
</ion-content>
<ion-footer>
<ion-toolbar>
<ion-list>
<ion-item no-lines>
<ion-label>Listar inativos</ion-label>
</ion-item>
</ion-list>
</ion-toolbar>
</ion-footer>
Fim código 9
Esse processo vai demorar alguns minutos e será necessário estar conectado à internet.
Ao final do processo, o arquivo APK do seu aplicativo será gerado nesta pasta:
Dev/appDados/platforms/android/build/outputs/apk/android-debug.apk
5. QUESTÕES AUTOAVALIATIVAS
Agora é o momento ideal para que você faça uma revisão dos estudos realizados nesta
unidade. Lembre-se de que, na Educação a Distância, a construção do conhecimento ocorre
de forma cooperativa e colaborativa; compartilhe, portanto, as suas descobertas com seus
colegas.
Confira, a seguir, as questões propostas para verificar o seu desempenho no estudo
desta unidade.
1) Qual diretiva Ionic (Angular) é utilizada para fazer a transferência de valores das variáveis entre a View e o
Controlador?
a) {{ion-item}}
b) *ngFor
c) ngApp
d) {{ngShow}}
e) ngModel
2) Componentes do framework Ionic como Page e Provider, após gerados, devem ser incluídos no arquivo app.
modules.ts. Quais os nomes dos arrays que devem receber a inclusão desses componentes?
a) Imports, ngModels e providers
Gabarito
Confira, a seguir, as respostas corretas para as questões autoavaliativas propostas:
1) Alternativa E.
2) Alternativa B.
6. CONSIDERAÇÕES
Nesta unidade, você teve a oportunidade de aprofundar seus conhecimentos relacionados
aos conceitos e práticas de armazenamento de dados em aplicações para dispositivos
móveis. Você pôde perceber que existem boas opções como estratégias de armazenamento
e gerenciamento de dados, seja internamente ou externamente ao dispositivo móvel, mas
tudo dependerá da conexão com a internet, da quantidade de dados e do desempenho da
aplicação.
Você pôde acompanhar e implementar um exemplo prático de aplicativo que utiliza o
banco de dados SQLite para armazenar e gerenciar os dados. Com esse exemplo de aplicação,
adotamos a estratégia de armazenamento local, assim você pôde conferir na prática que este
tipo de armazenamento permite que seus aplicativos funcionem efetivamente quando não há
conexão, além de oferecer funcionalidades mais avançadas e, muitas vezes, mais rápidas do
que o armazenamento no lado do servidor.
Na próxima unidade, veremos um exemplo de aplicação que utiliza um serviço na
nuvem para armazenar e gerenciar dados. O objetivo é que você complemente seus estudos
de maneira que compreenda os conceitos necessários ao estudo de interoperabilidade de
sistemas utilizando as tecnologias de Web Services.
7. E-REFERÊNCIAS
ANDROID Developers. Data-Storage. Disponível em: <https://developer.android.com/guide/topics/data/index.html>. Acesso
em: 23 ago. 2018.
ANDROID STUDIO. Site do desenvolvedor Android. Disponível em: <https://developer.android.com/studio/index.html>.
Acesso em: 23 ago. 2018.
IONIC Framework, Deployng. Disponível em: <http://ionicframework.com/docs/intro/deploying/>. Acesso em: 23 ago. 2018.
IONIC Framework, Storage. Disponível em: <https://ionicframework.com/docs/storage/>. Acesso em: 23 ago. 2018.
IONIC, SQLite plugin. Site do desenvolvedor, documentão técnica. Disponível em: <https://ionicframework.com/docs/native/
sqlite/>. Acesso em: 23 ago. 2018.
Java SDK Oracle. Site do desenvolvedor, documentão técnica. Disponível em: <http://www.oracle.com/technetwork/java/
javase/downloads/index-jsp-138363.html>. Acesso em: 23 ago. 2018.
SQLITE Database. Site do desenvolvedor, documentão técnica. Disponível em: <https://www.sqlite.org/>. Acesso em: Acesso
em: 23 ago. 2018.
W3SCHOOLS. HTML5 Webstorage. Site do desenvolvedor, documentão técnica. Disponível em: <https://www.w3schools.
com/html/html5_webstorage.asp>. Acesso em: 23 ago. 2018.
W3Schools, SQL. Site do desenvolvedor, documentão técnica. Disponível em: <https://www.w3schools.com/sql/default.asp>.
Acesso em: 23 ago. 2018.
Objetivos
• Compreender conceitos de armazenamentos de dados na Web.
• Compreender conceitos de aplicação orientada a serviços.
• Conhecer conceitos da tecnologia Restful para utilização de Web Services.
• Desenvolver um projeto utilizando a tecnologia REST para utilizar serviço de gerenciamento de dados na web.
• Entender a importância da utilização de Web Services em aplicações para dispositivos móveis.
Conteúdos
• Armazenamentos de dados na nuvem.
• Restful Web Services.
1) Nas instruções para criar e configurar novos projetos, siga exatamente as orientações, em especial a que se
refere ao nome do projeto e de componentes, pois esses nomes são utilizados no código-fonte da aplicação.
2) Pesquise mais sobre as tecnologias REST e SOA, procure entender bem suas características, vantagens e
desvantagens.
3) Não se limite a implementar apenas as funcionalidades abordadas no exemplo desta unidade, procure
melhorar a aplicação observando a necessidade de novas funções e a utilização de outros componentes da
plataforma Ionic.
127
© Desenvolvimento para Dispositivos Móveis com Ionic
UNIDADE 4 – CONSUMINDO WEB SERVICE RESTFUL COM APLICATIVO IONIC
1. INTRODUÇÃO
Na unidade anterior, você teve a oportunidade de compreender o armazenamento de
dados local utilizando o banco de dados SQLite.
Nesta unidade, você terá a possibilidade de aprender a utilizar a tecnologia Restful
para realizar integração de dados com serviços web na nuvem. O objetivo desta unidade
é estabelecer os conceitos necessários para o estudo de interoperabilidade de sistemas
utilizando as tecnologias de Web Services. Para isso, inicialmente abordamos os termos
de interoperabilidade e Web Service, em seguida explicamos os fundamentos básicos da
tecnologia Restful, e, ao final, implementamos um exemplo de aplicação com Ionic que se
interliga com um serviço Restful para troca de dados.
Caso você já tenha estudado a disciplina Engenharia de Software, deve estar lembrado
que o termo interoperabilidade é usado para descrever a capacidade de diferentes sistemas de
software em realizar trocas de dados por meio de protocolos. Na verdade, a interoperabilidade
permite a integração de dados entre sistemas diferentes. De acordo com a normativa ISO/
IEC 2382-01, o termo interoperabilidade é definido como: “A capacidade de se comunicar,
executar programas ou transferir dados entre várias unidades funcionais de uma maneira que
exige que o usuário tenha pouco ou nenhum conhecimento das características únicas dessas
unidades”.
Como vimos anteriormente, no caso de aplicativos para dispositivos móveis, o uso de
Web Service é considerado como armazenamento externo.
Neste caso, os serviços baseados em aplicações web disponibilizados na internet para
armazenar e recuperar dados é um cenário de gerenciamento de dados bem típico nos
aplicativos atuais. Um aplicativo móvel, por sua vez, se conecta remotamente a uma aplicação
(serviço) hospedada na nuvem e utiliza seus recursos para acessar e armazenar dados. Isso
implica que, para ter um bom desempenho, o aplicativo móvel precisa de uma conexão de rede
relativamente rápida. A parte do sistema que fornece um serviço de web para ser acessado
remotamente por outros aplicativos pode utilizar tecnologias como SOA ou Restful e recebe o
nome de back-end.
Quando dois sistemas interagem por meio de uma camada de serviços, dizemos que
utilizam arquitetura de software orientada a serviços. Nesse cenário, temos a aplicação
dividida em duas partes distintas, aquela em que o aplicativo executado no dispositivo móvel
representa o front-end e está no lado Cliente da arquitetura e aquela em que o serviço web
representa o back-end e é executado do lado do servidor na arquitetura.
Para darmos continuidade aos nossos estudo, nessa unidade implementaremos
um projeto Ionic que se comunica com um serviço web por meio da tecnologia REST
(Representational State Transfer – transferência de estado representacional).
A tecnologia REST se refere a um conjunto coordenado de restrições arquiteturais
aplicadas a componentes, conectores e elementos de dados dentro de um sistema de
hipermídia distribuído, descreve qualquer interface web simples que utiliza XML, JSON, ou
texto e utiliza o protocolo HTTP para comunicação de dados.
Para saber mais sobre esse assunto, leia o Capítulo 19 da obra Engenharia de Software.
Ian Sommerville, 9. ed., disponível na biblioteca Pearson.
Os formatos para transmitir os objetos de dados podem ser JSON, XML etc. Observe, a
seguir, a descrição de cada um deles.
JSON (JavaScript Object Notation) é um formato de dados de padrão aberto criado para
transmitir objetos de dados na internet.
Ao trocar dados entre um navegador e um servidor web, os dados só podem trafegar
pela rede em formato texto. Em alguns casos é necessário transmitir objetos pela rede, assim
é necessário converter objeto em texto e vice-versa. Utilizando o formato JSON, podemos
converter qualquer objeto JavaScript em JSON e enviar JSON para o servidor. Também podemos
converter qualquer JSON recebido do servidor em objetos JavaScript.
Já o XML (Extensible Markup Language) é uma linguagem padronizada de marcação
capaz de descrever diversos tipos de dados. Ela foi criada para facilitar o compartilhamento de
informações na internet.
Esses são os fundamentos básicos da tecnologia Restful. Na sequência, estudaremos o
web service como aplicativo Ionic.
Para saber mais sobre os conceitos da tecnologia Restful, pesquise pelo termo Restful
na web.
Sugerimos que aprofunde seus conhecimentos sobre JSON e XML, acessando os links
a seguir:
• W3Schools. JSON – Introduction. Disponível em: <https://www.w3schools.com/
js/js_json_intro.asp>. Acesso em: 27 ago. 2018.
• W3Schools. XML Tutorial. Disponível em: <https://www.w3schools.com/xml/
default.asp>. Acesso em: 27 ago. 2018.
Após concluído e configurado o projeto, é hora de fazer uma chamada de API REST no
provedor de serviços web. Para tornar esse exemplo mais prático, usaremos a API de REST
gratuita disponível para testes na internet.
Veremos a declaração da URL do provedor de teste na implementação do Código 1.
Abra o arquivo restful-service.ts e faça as alterações para que a implementação fique
como é mostrado no Código 1.
Código 1 Código do arquivo restful-service.ts
import ‘rxjs/add/operator/map’;
@Injectable()
data: any;
apiUrl = ‘https://jsonplaceholder.typicode.com’;
getUsers() {
if (this.data) {
return Promise.resolve(this.data);
this.http.get(this.apiUrl+’/users’)
.subscribe(data => {
this.data = data;
resolve(this.data);
});
});
saveUser(data) {
this.http.post(this.apiUrl+’/users’, JSON.stringify(data))
.subscribe(res => {
resolve(res);
}, (err) => {
reject(err);
});
});
Fim código 1
Como você pôde observar no Código 1, o Web Service Restful responde às requisições do
cliente URI declarada na variável: apiUrl = ‘https://jsonplaceholder.typicode.
com’. O método getUsers() recebe os dados que representam a coleção de usuários por
meio do método GET no comando: this.http.get(this.apiUrl+’/users’). Esse
comando faz uma concatenação juntando o endereço global do Web Service com o endereço
específico da coleção de usuários.
Os dados da coleção de usuários são obtidos, na resposta da requisição, no formato
JSON, conforme o comando: map(res => res.json() e, em seguida, são transferidos para
a variável “data”.
O método saveUser() realiza o processo no sentido oposto, cliente para o servidor,
ou seja, envia os dados para serem armazenados por meio do método POST, no comando:
this.http.post(this.apiUrl+’/users’, JSON.stringify(data)). Os dados são
enviados no format JSON.
Salve o arquivo e verifique se não ocorreram erros de código. Abra o arquivo home.ts e
faça as alterações para que a implementação fique como é mostrado no Código 2.
@IonicPage()
@Component({
selector: ‘page-home’,
templateUrl: ‘home.html’
})
users: any;
this.getUsers();
ionViewDidLoad() {
console.log(‘ionViewDidLoad UsersPage’);
getUsers() {
this.restServ.getUsers()
.then(data => {
this.users = data;
console.log(this.users);
});
userSelected(user: any){
this.navCtrl.push(EditusersPage, user);
Fim código 2
<ion-header>
<ion-navbar>
<ion-title>users</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<h2>Lista de Usuários</h2>
<ion-list>
{{user.name}}
</button>
</ion-list>
</ion-content>
Fim código 3
Observe no Código 3 que a página home.html mostra uma lista (List) de usuários que
vem do Web Service. Cada item da lista é um botão (button) e contém dados de um usuário
em particular, como nome, email etc.
Quando uma pessoa que usa esse aplicativo clica em uma linha da lista, ela está
selecionando a linha. Lembrando que se trata de uma lista de usuários, e cada linha contém
dados de um usuário em particular, na verdade a pessoa está selecionando o usuário, e os
dados do usuário são passados no método (click)=”userSelected(user)”.
Salve o arquivo e verifique se não ocorreram erros de código. Abra o arquivo editusers.ts
e faça as alterações para que a implementação fique como é mostrado no Código 4.
Código 4 Código do arquivo editusers.ts
@IonicPage()
@Component({
selector: ‘page-editusers’,
templateUrl: ‘editusers.html’,
})
user = { name: ‘’, username: ‘’, email: ‘’, phone: ‘’, website: ‘’,
address: { street: ‘’, suite: ‘’, city: ‘’, zipcode: ‘’, geo: { lat: ‘’,
lng: ‘’ } }, company: { name: ‘’, bs: ‘’, catchPhrase: ‘’ }};
this.user = this.navParams.data;
ionViewDidLoad() {
console.log(‘ionViewDidLoad EditusersPage’);
saveUser() {
this.restServ.saveUser(this.user).then((result) => {
console.log(result);
}, (err) => {
console.log(err);
});
Fim código 4
Observe a variável “user” no código 4; ela foi declarada no formato JavaScript object
para receber dados do formato JSON. Essa variável recebe os dados do usuário por meio do
comando: this.user = this.navParams.data.
Salve o arquivo e verifique se não ocorreram erros de código.
Em seguida, abra o arquivo editusers.html e faça as alterações para que a implementação
fique como é mostrado no Código 5.
Código 5 Código do arquivo editusers.html
<ion-header>
<ion-navbar>
<ion-title>editusers</ion-title>
</ion-navbar>
</ion-header>
<ion-content padding>
<h2>Adicionar Usuário</h2>
<ion-item>
<ion-label>Name</ion-label>
</ion-item>
<ion-item>
<ion-label>Username</ion-label>
</ion-item>
<ion-item>
<ion-label>Email</ion-label>
</ion-item>
<ion-item>
<ion-label>Phone</ion-label>
</ion-item>
<ion-item>
<ion-label>Website</ion-label>
</ion-item>
<ion-item-divider color=”light”>Address</ion-item-divider>
<ion-item>
<ion-label>Street</ion-label>
</ion-item>
<ion-item>
<ion-label>Suite</ion-label>
</ion-item>
<ion-item>
<ion-label>City</ion-label>
</ion-item>
<ion-item>
<ion-label>Zip Code</ion-label>
</ion-item>
<ion-item>
<ion-label>Geo</ion-label>
</ion-item>
<ion-item-divider color=”light”>Company</ion-item-divider>
<ion-item>
<ion-label>Name</ion-label>
</ion-item>
<ion-item>
<ion-label>Business</ion-label>
</ion-item>
<ion-item>
<ion-label>Catch Phrase</ion-label>
</ion-item>
</ion-content>
Fim código 5
Concluímos nossos estudos com a criação de um projeto Ionic. Esperamos que tenha
compreendido todos os conteúdos abordados nesta unidade e sugerimos que retome os
conteúdos estudados sempre que surgirem dúvidas. Agora, realize as questões autoavaliativas
para testar seus conhecimentos.
4. QUESTÕES AUTOAVALIATIVAS
Revise o conteúdo estudado e realize as questões propostas para fixar o seu aprendizado.
1) Em aplicações que fornecem serviços web por meio da tecnologia REST, qual comando do protocolo HTTP é
utilizado para se realizar atualização de dados?
a) DELETE
b) POST
c) GET
d) PUT
e) UPDATE
2) Qual o nome do formato de dados baseado na notação Javascript e de padrão aberto, criado para transmitir
objetos de dados na internet?
a) XML
b) HTML
c) MIME
d) JSON
e) XHTML
Gabarito
Confira, a seguir, as respostas corretas para as questões autoavaliativas propostas:
1) Alternativa D.
2) Alternativa D.
5. CONSIDERAÇÕES
Chegamos ao final da quarta unidade e com isso concluímos os estudos introdutórios
relacionados ao desenvolvimento de aplicações móveis com Ionic.
Nesta unidade, apresentamos conceitos fundamentais para a utilização de Serviços Web
baseados na tecnologia REST, e você pôde acompanhar e implementar um exemplo prático de
aplicativo que utiliza essa tecnologia, com isso pôde entender as vantagens e as desvantagens
dessa estratégia de armazenamento externo e comparar com as estratégias de armazenamento
interno abordadas na Unidade 3.
É fundamental que você dê continuidade em seus estudos e experimente construir uma
aplicação que combine as duas estratégias, ou seja, armazenar e gerenciar dados internamente
e na nuvem. Isso ajudará a ampliar seus conhecimentos em uma área muito pesquisada no
meio acadêmico, que envolve o sincronismo de dados entre sistemas de armazenamento.
Outros exemplos de aplicação são aqueles que utilizam os sensores e a câmera do
dispositivo. Geralmente, as aplicações que utilizam esses recursos são aplicativos de jogos,
de mapas etc. Existem muitos exemplos e tutoriais de aplicações para Ionic nessas áreas
disponíveis na internet, basta uma pesquisa para encontrá-los.
Esperamos que você tenha aproveitado os estudos abordados neste material e que os
conteúdos aqui apresentados sejam úteis na construção do seu conhecimento. Desejamos
que você tenha sucesso em sua carreira profissional.
6. E-REFERÊNCIAS
JSONPlaceholder. REST API for Testing and Prototyping. Disponível em: <https://jsonplaceholder.typicode.com/>. Acesso em:
17 nov. 2017.
W3Schools. Tutoriais para estudo e treinamento JSON. Disponível em: <https://www.w3schools.com/js/js_json_intro.asp>.
Acesso em: 27 ago. 2018.
W3Schools. Tutoriais para estudo e treinamento XML. Disponível em: <https://www.w3schools.com/xml/default.asp>.
Acesso em: 27 ago. 2018.