Apps Híbridas com Cordova e Ionic - Parte 1 TI
 
 Nessa série divida em 3 partes vou falar um pouco mais a fundo
 sobre desenvolvimento híbrido. Nessa primeira parte
 entenderemos o que são exatamente o cordova e o ionic, e onde
 cada um se encaixa na construção de uma app híbrida.
 
 Desenvolvimento híbrido mais a fundo
 Uma mobile app nativa é aquela desenvolvida
 com as linguagens padrão da SDK do dispositivo. No caso do
 Android o Java e no caso do iOS o Objective-C, e mais
 recentemente o Swift. Já uma app híbrida é
 aquela que é toda desenvolvida com HTML, CSS e
 Javascript e que mesmo assim pode ser empacotada e
 distribuída nas app stores como uma app nativa. Isso só é
 possível pois, assim que a app é aberta pelo usuário, todo esse
 código roda dentro de algo chamado webview.
 
"http://s.profissionaisti.com.br/wp-content/uploads/2015/04/apps-mobile-desenvolvimento.png"
alt="Imagem via Shutterstock" width="720" height="380">
 Imagem via 
 "http://www.shutterstock.com/pt/pic-248776741/stock-photo-hand-holding-smartphone-with-hand-drawn-media-icons-and-symbols-concept.html"
 target="_blank">Shutterstock
 
 Webview é o nome dado a um tipo especial de browser que começa
 a rodar assim que a app híbrida é aberta pelo usuário. É dentro
 desse browser que a app é executada. É claro que o usuário não
 sabe que está dentro de um browser, pois essa webview não
 contém componentes característicos de um, como a barra de
 endereço e barra de favoritos, por exemplo. A webview contém
 apenas o necessário para que o HTML, CSS e
 Javascript funcionem. Ela se comporta como a engine de
 renderização da app.
 
 Por isso o nome híbrido: uma parte da app é feita em código
 nativo para ser empacotada e distribuída nas app stores, e a
 outra parte é feita de código não nativo (html, css e
 javascript) que implementa todo o visual e o comportamento da
 app.
 
 A grande sacada de uma webview é que ela não se limita à
 renderização da app. Ela também consegue acessar recursos
 nativos do dispositivo como a camera, microfone,
 acelerômetro, etc… Isso é possível graças a uma
 interface Javascript que torna a webview apta a executar código
 nativo nos dispositivos.
 
 Ou seja, no desenvolvimento híbrido é possível usar apenas
Javascript para acessar os recursos
 nativos do dispositivo, coisa que nenhum browser comum
 instalado no aparelho seria capaz de acessar.
 
 Apps Híbridas vs Apps Nativas
 A principal limitação de uma app híbrida se dá em termos de
 performance e fluidez. Atualmente uma app híbrida não consegue
 ser tão fluída e performática quanto uma app nativa, já que a
 renderização nativa ainda está muito a frente do poder de
 renderização de uma webview.
 
 Quanto a isso, porém, trago uma boa notícia: em testes que fiz
 com apps híbridas no iphone 5S e no iphone 6, não consegui
 notar praticamente nenhuma diferença para as apps nativas. Isso
 me trouxe uma certa esperança que esse gap de performance e
 fluidez diminuia e talvez se torne imperceptível para apps
 híbridas que não façam uso de renderizações muito complexas.
 
 Já a principal vantagem de uma app híbrida é, sem dúvida, ter
 uma única base de código capaz de rodar em diversos sistemas
 diferentes. Ao invés de dar manuntenção para uma base em Java
 para Android, em outra em Objective-C para iOS e mais uma em C#
 para windows phone, por exemplo, em uma app híbrida só é
 necessário dar manutenção em única base de código que, por sua
 vez, poderá ser empacotada e distribuída para todas as
 plataformas disponíveis.
 
 Além da vantagem que temos com uma única base de código, existe
 outra tão importante quanto: um bom desenvolvedor web é capaz
 de usar experiência que já possui para a construção de uma app
 híbrida, e de um modo geral pessoas assim são bem mais fáceis
 de serem encontradas do que desenvolvedores focados em
 plataformas específicas.
 
 Cordova e Phonegap
 Atualmente o desenvolvimento híbrido possui 2 plataformas
 principais, o cordova e o
phonegap. Os dois servem ao mesmo propósito,
 que é de um modo transparente para o desenvolvedor, criar uma
 app nativa capaz de abrir uma webview para a execução do html,
 css e javascript criados pelo desenvolvedor. Paralelo a isso,
 eles também tem o conceito de plugins que são
 usados para acessar os recursos do dispositivo. Por motivos que
 serão expostos mais adiante, daqui pra frente farei referência
 apenas ao Cordova, embora tudo que for dito funcione da mesma
 maneira em ambos.
 
 Através do comando build do cordova, o código
 não nativo (html, css e javascript) da app é empacotado dentro
 de uma app nativa. O build pode ser considerado a principal
 funcionalidade do cordova e do phonegap. O input do build
 são os arquivos html, css e javascript, além de alguns arquivos
 de configuração do seu projeto, e o output é uma app nativa
 que, ao ser executada, abre a webview que vai renderizar a app.
 
 Outro comando muito importante do Cordova é o
plugin. Através do plugin add
 e do plugin rm os plugins que acessam os
 recursos nativos da app podem ser adicionados e removidos. O
 repositório de plugins do cordova se encontra em 
 "http://plugins.cordova.io" target=
 "_blank">http://plugins.cordova.io. Lá é possível buscar
 por qualquer plugin registrado. É importante notar que o
 cordova por padrão não vem com nenhum plugin instalado. Isso é
 feito para que o build final da sua app não fique
 sobrecarregado com plugins que você não vai precisar.
 
 Algo interessante sobre os plugins do cordova é que, dado que
 você tenha algum domínio das linguagens nativas, você pode
 criar o seu próprio plugin customizado. Um projeto recente que
 trabalhei exigiu a criação de um plugin para capturar os dados
 da operadora do dispositivo. Como ainda não existia um plugin
 do cordova para esse fim, acabei criando um tanto para Android
 quanto para iOS. O código é open source e se encontra no
 target="_blank">github da DTM.
 
 Se tanto o Cordova quanto o Phonegap servem para a
 mesma coisa, então qual a diferença?
 
 Tudo começou quando uma empresa chamada Nitobi criou o
phonegap em 2009. Em 2011 a Adobe comprou a
 Nitobi e pouco tempo depois doou para a Apache o core desse
 projeto. Entre outros motivos a Adobe queria se certificar que
 outras empresas pudessem contribuir com o projeto. A Apache,
 então, foi uma escolha natural para a Adobe, pois muitas
 grandes empresas já confiavam na Apache e estavam confortáveis
 com as suas licenças. Por fim, para evitar problemas com o nome
 phonegap, que é uma marca registrada da Adobe, debaixo da
 Apache o projeto recebeu o nome de cordova.
 
 Dessa forma, o phonegap pode ser considerado uma distribuição
 do cordova. Tanto um quanto o outro são projetos opensource,
 mas ao redor do phonegap a Adobe já lançou e deve continuar
 lançando alguns serviços, como o Phonegap Build. Uma boa
 maneira de entender isso é enxergar o phonegap como sendo o
 cordova cercado por alguns serviços extras (e possivelmente
 pagos) da Adobe.
 
 Como não utilizo os serviços da Adobe, eu escolho o cordova
 para desenvolvimento híbrido. Como veremos mais a frente, por
 motivos semelhantes as bibliotecas open source como Ionic,
 que de alguma maneira constroem algo para apps híbridas, também
 costumam se basear no cordova.
 
 Independente da plataforma escolhida, grande parte do trabalho
 de construir de uma app híbrida se concentra na construção da
 interface. Em uma mobile app é necessário não só construir
 componentes como menus, tabs e formulários responsivos, mas
 também é necessário garantir a performance e o bom
 comportamento desses componentes diversos em sistemas,
 dispositivos e tamanhos de tela diferentes.
 
 A complexidade na construção desses componentes se tornou um
 sério problema. Tempo e dinheiro que deveriam estar
 centralizados nas funcionalidades do modelo de negócios estavam
 indo parar na construção dos componentes mais básicos da app.
 
 Ionic
 Para resolver esse problema, surgiu no final de 2013 um projeto
 chamado ionic. O ionic é uma SDK de
 componentes visuais focados em mobile apps híbridas. Seus
 diversos componentes html e css e funcionalidades javascript
 são bastante simples de usar e livram o desenvolvedor de ter
 que codificar tudo a partir do zero.
 
 O ionic precisa do cordova instalado para conseguir rodar nos
 dispositivos. Como o ionic é uma SDK javascript, sem o cordova
 o ionic também funciona, mas o resultado só pode ser visto
 através de um browser de um desktop ou do próprio dispositivo.
 O cordova é necessário para que a app consiga ser instalada e
 executada nos dispositivos.
 
 A atenção com a performance é um dos fatores que diferenciam o
 ionic de seus rivais mais como o 
 "https://jquerymobile.com/" target="_blank">jQuery Mobile e
 o 
 "_blank">Sencha Touch. A equipe por trás do ionic
 procura otimizar a performance de todas os componentes que eles
 criam, pois eles sabem que a fluidez e a responsividade de uma
 app híbrida são fatores chaves, pois quanto mais próximo de um
 feeling nativo eles conseguirem chegar, melhor recebida serão
 as apps e o próprio ionic.
 
 Um outro fator diferencial do ionic é fato dele ser baseado no
angular, que é um framework javascript
 aplamente adotado pela comunidade e que traz um enorme ganho de
 produtividade para os desenvolvedores. Ser baseado em angular
 também signfica que quem já trabalha com ele vai conseguir
 reutilizar no ionic todo o conhecimento previamente adquirido.
 
 O ionic também conta com uma excelente 
 "http://www.ionicframework.com/docs" target=
 "_blank">documentação e com um 
 "http://www.ionicframework.com/docs" target="_blank">fórum
 próprio bastante ativo onde perguntas são respondidas em
 poucos dias. Recentemente o ionic começou a oferecer também
 alguns serviços que no momento em que escrevo esse post ainda
 estão em beta, como o 
 target="_blank">Ionic Creator, 
 "http://view.ionic.io/" target="_blank">Ionic View e as
 "_blank">Push Notifications.
 
 Um último recurso do ionic que faltou falar é o
 "_blank">ngCordova. O objetivo do ngCordova é
 empacotar os plugins do cordova para dentro de serviços
 angular, facilitando assim a utilização desses plugins dentro
 de um projeto ionic. É importante entender que o ngCordova não
 é obrigatório para o uso de plugins, ele é apenas um
 facilitador para integrar melhor com o angular os plugins do
 cordova.
 
 Caso queira ver uma app híbrida feita com ionic e cordova no
 mundo real, recentemente trabalhei em um projeto para a Vivo
 onde ela queria criar o aplicativo para o evento Vivo Open Air
 que aconteceu em Belo Horizonte. O projeto foi todo construído
 com ionic e está disponível na 
 "https://itunes.apple.com/us/app/vivo-open-air/id940039537?mt=8"
 target="_blank">App Store e no 
 "https://play.google.com/store/apps/details?id=com.vivoopenair"
 target="_blank">Google Play para download.
 
 Baseado nesse projeto da Vivo, compilei as técnicas que aprendi
 em um projeto starter que você pode usar para começar suas apps
 em ionic. Entre elas temos testes e2e com
protractor e um build system com
gulp. Esse projeto se chama ionic-starter-app
 e 
 target="_blank">está disponível no meu github.
 
 Fim
 Essa foi a primeira parte da série de artigos sobre
 desenvolvimento híbrido. Na segunda parte vou mostrar como
 instalar e configurar o ambiente para desenvolver uma aplicação
 cordova utilizando ionic e consumindo dados de uma API REST.
 Assine os feeds do blog ou siga 
 "http://twitter.com/vasconcelloslf" target=
 "_blank">@vasconcelloslf no twitter para acompanhar o
 lançamento das próximas partes.
 
0 comments:
Post a Comment