Escolar Documentos
Profissional Documentos
Cultura Documentos
Multiplataforma Mobile
1.1 Introdução
O iOS, muito utilizado, principalmente nas classes sociais mais altas, desenvolvida e
mantida pela Apple. Para desenvolver aplicativos nativos para essa plataforma, o
desenvolvedor precisa de uma experiência com as linguagens Objective-C ou Swift e
com o ambiente de desenvolvimento do Xcode, para auxiliar na construção das
aplicações.
Como foi explanado, para o desenvolvimento de um aplicativo móvel nativo nos dias
de hoje, é necessário um conhecimento em várias linguagens de programação e
ferramentas de desenvolvimento. Mas, com isso, surgem alguns questionamentos
importantes: e se não tivermos uma equipe de desenvolvimento multidiciplinar? se
quisermos construir o nosso aplicativo para todas as plataformas, será necessário
desenvolver um aplicativo para cada uma delas?
Para responder esses questionamentos, entra a ideia de Aplicações Híbridas. Com esse
tipo de aplicações é possível criar aplicativos multiplataformas. Nos dias de hoje,
existem dois frameworks que ajudam bastante nesse tipo de desenvolvimento, são
eles: o Cordova/Phonegap e o Xamarim.
Mesmo comprando a Nitobi, a Adobe doou todo o código do projeto do Phonegap para
a Apache Fondation, mantendo dessa forma o código do framework em uma
comunidade de desenvolvimento ativa e facilitando, assim, o processo de melhoria do
produto, deixando que outras empresas pudessem contribuir para o projeto.
Por motivo de direitos autorais e interesse da Adobe pelo nome comercial que o
Phonegap já havia ganho, o projeto ganhou o nome de Apache Cordova.
Com tudo isso, o Phonegap passou a ser apenas uma distribuição do projeto Apache
Cordova. E o principal produto referente ao Phonegap passou a ser o Adobe build e o
Adobe App que abordaremos nas próximas aulas.
Durante o nosso curso iremos abordar o Apache Cordova diretamente, pois como o
Phonegap é uma distribuição do Cordova, as novidades, como novos plug-ins e
funcionalidades tendem a ser inseridas primeiro no Apache Cordova.
No próximo tópico, iremos abordar um pouco mais as diferenças entre aplicativo nativo
e aplicativo híbrido.
Outra coisa que precisamos considerar quando formos construir um aplicativo é o custo
de desenvolvimento. Com Cordova, um único código serve todas as plataformas e não
é necessário ter equipes específicas desenvolvendo com a linguagem Java no Android,
a linguagem Objective-C ou Swift no iOS e C# no Windows Phone.
Mas se você estiver em uma empresa grande e possuir recursos para ter uma equipe
de desenvolvimento para cada plataforma, com certeza é melhor manter dessa forma,
pois a API do Cordova nos dá acesso a muitos recursos nativos; no entanto, a API
nativa é que possui todas as possibilidades à disposição.
Na próxima seção iremos revisar um pouco das tecnologias Web, como HTML 5/ CSS
e Javascript, além das bibliotecas JQuery e JQuery Mobile, afim de facilitar o
entendimento das demais aulas.
As três principais tecnologias que utilizaremos para desenvolver aplicativos web são
HTML, CSS e Javascript. Nesta seção revisaremos essas tecnologias para garantir que
não pairem dúvidas quando avançarmos no material.
As páginas visualizadas na Web são apenas documentos de texto. Esses textos são
encapsulados em tags HTML ou linguagem de marcação, que informam ao seu
navegador sobre a estrutura do documento. Com essas informações, o navegador
pode formatar e exibir as informações da sua página web.
Pode ser observado no trecho da página web mostrado no exemplo 1, a seguir, que
na primeira linha, a tag <h1> encapsula o texto “Olá usuário”. É importante observar
que existe uma tag de abertura e uma tag de fechamento. A tag de fechamento possui
uma barra (/) como segundo caractere, enquanto a de abertura não tem.
Abertura: <nome_tag>
Fechamento: </nome_tag>
<h1>Olá Usuário</h1>
<p>Obrigado por visitar a minha página Web.</p>
<p>Espero que goste.</p>
Exemplo 1 – Trecho documento HTML
Também é possível colocar tags HTML dentro de outras tags HTML. É possível observar
a seguir, no exemplo 2, a tag de lista não ordenada <ul> que contém três itens de
lista <li>. No navegador, essa composição cria uma lista não ordenada com cada item
na sua própria linha. Quando uma tag está dentro de outra, as internas são chamadas
de elementos filhos da tag mãe, que é quem encapsula essa tag. Com isso, as tags
<li> são filhas de <ul>.
<ul>
<li>Maçã</li>
<li>Laranja</li>
<li>Kiwi</li>
</ul>
Também é importante destacar que as tags podem possuir atributos. Esses atributos
podem ser definidos como as propriedades de uma tag (elemento).
O HTML possui diversas tags, e cada uma delas possui o seu significado e a sua
funcionalidade para a inserção de um novo elemento na página web. É possível
visualizar na lista abaixo algumas dessas tags e as suas funcionalidades.
Pula Linha (<br/>): Essa tag quebra uma linha, porém não encerra o parágrafo. Essa
é uma tag simples, ou seja, não existe tag de fechamento </br>.
Criação de formulários:
Os elementos que compõem um formulário são encapsulados dentro das tag composta
<form></form>
Esses elementos podem ser: caixa de texto, botões, radio buttons, check box. Todos
eles podem ser criados a partir da tag simples <input/>. O que define cada elemento
é o atributo type.
<input type=”nome_elemento”/>
Ex. <input type=”button”/>, <input type=”text”/>
Inserção de links
Os links em páginas HTML servem para ligar conteúdos, para que sua página seja
dinamizada, possibilitando a navegação.
A tag utilizada para a criação de links é <a></a> com o atributo href: serve para
indicar a página a ser carregada.
Conforme explanado, no HTML existem várias tags para definição de conteúdo. Além
das tags citadas, existem várias outras que iremos estudar durante o nosso curso para
que possamos criar aplicativos com mais funcionalidades.
No próximo tópico vamos revisar um pouco do CSS (Cascading Style Sheet), também
conhecido como folha de estilo. Com ele é possível estilizar os elementos do
documento HTML.
Para atribuir estilos mais avançados nos elementos da página HTML, é necessário
utilizar o CSS, ou folha de estilo em cascata. O CSS é uma linguagem de folhas de
estilo usada para definir a apresentação visual de um documento HTML. Pode-se usá-
lo para definir propriedades simples como a cor de um texto, seu tamanho e estilo
Pode ser observada no exemplo 4, a seguir, uma regra CSS que informa ao navegador
para exibir qualquer texto encapsulado no elemento body a ser da cor vermelha. Neste
exemplo, é importante destacar que body é o seletor (especifica o que foi afetado pela
regra). A declaração possui um conjunto de propriedade e seus valores. Sendo neste
exemplo color a propriedade e red o valor da propriedade color.
As propriedades em CSS são predefinidas, o que significa que você não pode
simplesmente inventá-las. Cada propriedade espera receber um valor apropriado e
podem existir diversos valores para uma determinada propriedade.
No exemplo 5 que veremos a seguir podem ser observadas algumas das propriedades
mais comuns do CSS. As propriedades que armazenam cores podem receber esses
valores pré-definidos, como red, green, gray, ou usando uma notação de código
hexadecimal do HTML, que usa uma (#) cerquilha no início e três pares de dígitos
hexadecimais (0-F), representando da esquerda para direita os valores vermelho,
verde e azul (cor verde #00FF00). Para propriedades que recebem medidas, os valores
atribuídos são 10px, 75% ou 1em.
body{
color:red;
background-color: #808080; //cinza
font-size: 12px;
font-style: italic;
font-weight: bold;
font-family: Arial;
No CSS os seletores mais comuns são: o seletor universal representado por um (*), o
seletor de classe representado por um (.), o seletor de id representado por (#) e o
seletor de tag representado pelo (nome_tag). No Exemplo 6 pode ser visualizados
todos eles.
*{color: red}
li {font-style: italic}
.classe1{font-style: italic; font-size: 10px}
#idP{background-color: yellow}
No exemplo 6 acima, podemos verificar que o seletor (*) irá alterar toda a estética dos
elementos da página HTML, modificando as cores para vermelho. O seletor (li) irá
alterar apenas os elementos <li> da lista não-ordenada, para o estilo de fonte italic.
O seletor (.) irá alterar a estética do elemento que estiver com o atributo class para o
estilo de fonte italic e tamanho de fonte 10 pixels. Por fim, a estética da tag que estiver
com o atributo idP será alterada pelo seletor (#) para uma cor de fundo amarela.
Observando todos esses seletores é possível pensar no seguinte questionamento: e se
tivermos mais de um seletor para um mesmo elemento?
Para aplicar as regras CSS, é necessário criar uma folha de estilo e referenciá-la dentro
do documento HTML. No exemplo 7, a seguir, é possível observar o encapsulamento
da tag link com o atributo href, que irá referenciar o arquivo do documento CSS, que
neste caso é efeitosVisuais.css.
<html>
<head>
<title>Minha Página</title>
<link rel=”stylesheet” href=”efeitosVisuais.css” type=”text/css”/>
</head>
<body>
<h1 class=”classe1”>Olá Usuário</h1>
<p id=”idP”>Obrigado por visitar a minha página Web.</p>
<p>Espero que goste.</p>
<ul>
<li class=”classe1”>Maçã</li>
<li>Laranja</li>
<li>Kiwi</li>
</ul>
</body>
16. </html>
Vimos nesta seção alguns dos principais fundamentos do CSS. É importante que você
pesquise mais um pouco e se aprofunde mais no assunto.
Na próxima seção, vamos estudar um pouco da linguagem Javascript e observar como
ela fornece um pouco de dinâmica para sites estáticos que apenas possuem o código
HTML.
Até este ponto do nosso estudo, sabemos estruturar documentos HTML e modificar a
estrutura visual com CSS. Agora vamos aprender a realizar tarefas na web, deixando
a interação com o usuário de forma mais dinâmica.
O Javascript é uma linguagem de script que pode ser adicionada a uma página HTML.
Uma página com essa linguagem se torna mais interativa para o usuário, pois é
possível verificar os valores digitados em formulários web para garantir a sua
validação, verificar o clique do botão, criar animações de elementos nos navegadores,
esconder ou mostrar informações ao usuário de acordo com o que ele clica, enviar
mensagens para um servidor web para executar alterações no banco de dados sem
atualizar a página atual e muito mais.
Na linha 2, observamos um laço for que inicializa uma variável com identificador i com
o valor 0; a saída do laço ocorre quando i chegar ao valor do tamanho do array, ou
seja, a quantidade de elementos do vetor.
Para criar uma maior dinâmica com o usuário, precisamos manipular o DOM
(Document Object Model) do HTML através do javascript. O HTML DOM é um padrão
para recuperação, alteração, adição ou remoção de elementos HTML e suas
propriedades.
Sobre o DOM:
Todos os elementos são representados como uma estrutura de árvore na memória;
O documento inteiro é um nó;
Cada elemento HTML é um nó;
O texto dos elementos HTML são nós;
Cada atributo do HTML é um atributo de um nó;
Comentários são nós de comentário.
<html>
Linha 6, uma instrução javascript que acessa o DOM do HTML a partir do comando
document, e com a função getElementById(“id”) tem acesso ao elemento do Id que
está sendo passado como parâmetro. O comando innerHTML atribui ao texto do
elemento pego o valor da string “Hello World”;
Linha 13, criação de um botão no HTML a partir da tag <input/> e definição do evento
onClick, que executará a função helloWorld quando o botão for clicado.
Usar JQuery durante o desenvolvimento web possui algumas vantagens, entre elas
estão: diminuição da quantidade de códigos gerados pela linguagem javascript,
tornando o código mais compacto e fácil de ler; compatibilidade e portabilidade do seu
código entre diversos navegadores, pois antigamente diferentes navegadores tinham
diferentes suportes a javascript, o que poderia gerar vários erros na execução de
código entre vários navegadores (Internet Explorer 6, Safari, Firefox). O JQuery já tem
funções prontas que tratam essa compatibilidade para você.
<html>
<head>
<title>Minha Página</title>
}
</script>
</head>
<body>
<h1 id=”idElemento”></h1><br/>
<input type=”button” onClick=”helloWorld()”/>
</body>
</html>
A linha 4 inclui a biblioteca jquery.js. Usando o atributo src da tag <script>, ela usa o
caminho relativo, o que significa que o arquivo fica na mesma pasta (diretório) da
página que a está usando. No entanto, vários domínios deixam-na disponível para você
acessá-la a partir de url, um deles é o da google.
Na linha 7, pode ser visualizado que a quantidade de código para acessar o elemento
no DOM diminui bastante. A partir de agora, usamos o cifrão ($) seguido de parênteses
$() para definir qual elemento acessar a partir do id passado por parâmetro. E ao invés
de usarmos o innerHTML, usamos a função text() para atribuir o texto ao elemento.
O código da aplicação está dividido em três arquivos e pode ser visualizado nos
exemplos 12, 13 e 14; o primeiro é o código HTML, com nome de arquivo index.html;
o segundo é o código em CSS, com nome de arquivo index.css; e o último, o arquivo
javascript chamado de index.js.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="user-scalable=no, initial-scale=1,
maximum-scale=1, minimum-scale=1, width=device-width">
<link rel="stylesheet" type="text/css" href="css/index.css">
<title>Hello World</title>
</head>
<body>
<div id="idDiario">
<h1 onClick="mensagem()">Diário</h1>
</div>
<script type="text/javascript" src="js/index.js"></script>
#idDiario
{
font-family: Arial;
font-size: 16;
position: absolute;
left: 50%;
top: 50%;
margin-left: -50px;
margin-top: -23px;
}
body{
background-color: #00ffff;
}
Na linha 1 está a definição da função mensagem que será chamada quando a string
“Diário” for clicada.
3. Phonegap
Nesta apostila vamos estudar o Apache Cordova para criar nossos aplicativos. Já foi
explicado que o Phonegap é uma distribuição do Cordova. O Cordova possui uma
comunidade ativa de desenvolvedores; com isso, as novidades tendem a sair
primeiramente para esse framework.
Como nesta seção será estudado o Phonegap, precisamos conhecer alguns dos seus
serviços, que ajudam no desenvolvimento da aplicação, principalmente na sua fase
inicial. Esses serviços são:
Nesse contexto entra o Phonegap Build. Este é um serviço da Adobe na nuvem, que
converte uma aplicação criada em HTML, CSS e Javascript em um aplicativo nativo, ou
seja, ele é um compilador na nuvem. O serviço possui toda a infraestrutura de Android,
iOS, e Windows Phone instalada para você. Essa explicação pode ser visualizada na
figura 1, onde as aplicações criadas em HTML5, CSS e Javascript passam pelo
Phonegap build e sai a aplicação nativa da plataforma.
Como pode ser visualizado na Figura 2, o Phonegap build pode ser acessado no site
https://build.phonegp.com.
É um serviço pago. Mas possui um acesso gratuito com algumas restrições. Se você já
possuir a assinatura creative cloud da Adobe, terá acesso ao plano máximo do build;
senão, é necessário pagar uma quantia de 10 dólares por mês. No plano gratuito,
possuímos quase todas as vantagens do plano pago, no entanto, só podemos criar um
aplicativo privado e todos os aplicativos têm um tamanho máximo. Na figura 3,
podemos visualizar o plano mensal e as vantagens e desvantagens entre os planos
pago e gratuito.
Depois de realizar o upload, clique para fazer o build, ele lhe direcionará para uma tela
de configurações do aplicativo; nessa janela coloque o nome a descrição do aplicativo
e clique em gerar aplicativo, ele irá demorar um pouco e irá lhe direcionar para uma
janela para realizar o download da aplicação recém-criada.
Na figura 5, pode ser observada a janela após o build ser criado. Nela podemos
observar no canto inferior esquerdo as plataformas em que podemos realizar o
download. Também é possível fazer o download do aplicativo a partir do QRCode.
3. 2.
1.
4.
É importante destacar que a plataforma mais amigável para realizarmos nossos testes
é o Android, pois podemos gerar seu código de forma simples e instalar em qualquer
dispositivo, sem burocracia.
Para testarmos, vamos criar dentro da pasta onde estão os códigos de HTML, CSS e
Javascript do nosso projeto, e criamos o arquivo xml config.xml, colando todo o código
do exemplo acima dentro dele.
Com o arquivo XML criado dentro da pasta do projeto, basta recriar o arquivo ZIP da
aplicação e realizar o update da build no Adobe Phonegap Build. Na figura 6, pode ser
visualizado onde podemos realizar o update no serviço da Adobe.
A tag <icon/> irá adicionar um ícone na aplicação. O ícone deve ser um arquivo PNG,
com o tamanho dependendo do dispositivo. Exemplo: <icon src=”icon.png”/>, o
atributo src define o caminho relativo no arquivo PNG.
A tag <gap:splash/> irá adicionar uma tela de splash na aplicação. A tela de splash é
também um PNG e pode possuir vários tamanhos, dependendo da resolução do
aparelho. Se a plataforma for Android podemos usar um arquivo de 720x1280.
Exemplo: <gap:splash src=”splash.png”/>
O Phonegap APP você instala no aparelho e faz o link através da rede com o projeto
em sua máquina. Ele puxa a versão mais recente do código e abre no aplicativo, como
se fosse o App final. Com isso, você instala o App uma vez no aparelho e sempre que
atualizar na máquina, realiza acesso ao código de forma remota.
Depois de instalar a aplicação, execute-a e clique no botão “+” para criar um novo
projeto, informe o local onde o projeto será salvo, o nome do projeto e seu id. O passo
a passo da criação do projeto pode ser visualizado na figura 7.
3.
4.
5.
Depois que o projeto for criado, ele gera um endereço que aparece embaixo da janela
– um IP na porta 3000. Esse endereço deve ser anotado, pois vamos usá-lo no Adobe
Phonegap App, no aparelho para executar o aplicativo remotamente. Na figura 8, pode
ser visualizada a tela do projeto criado e com o endereço dele criado na rede.
Abra a pasta onde você mandou criar o projeto e veja o seu conteúdo. Você verá que
possui várias subpastas: cordova, hooks, platforms, plug-ins, www e um arquivo
config.xml. Mais adiante no nosso estudo, estas pastas serão estudadas com mais
detalhe.
No momento precisamos saber que todo o nosso código está na pasta www. Todo o
nosso código HTML, CSS e Javascript criado deve ser colocado dentro dessa pasta.
Veja que dentro dela já tem um arquivo index.html e subpastas contendo o código
javascript e css.
DESENVOLVIMENTO MULTIPLATAFORMA MOBILE 34
Pegue todos os arquivos criados no nosso diário e jogue dentro dessa pasta.
Nesta seção, foi compreendido como funcionam os serviços da Adobe que auxiliam no
desenvolvimento de um aplicativo Phonegap. Foi estudado o Adobe Phonegap Build,
o Adobe Phonegap Desktop e o Adobe Phonegap App. Mesmo estudando todos esses
serviços, pode ser visualizado que não temos ainda um ambiente de desenvolvimento
na nossa máquina e se quisermos realmente desenvolver aplicativos profissionais,
precisaremos de alguns recursos que esses serviços não nos proporcionam, como
acesso a uma depuração mais detalhada do código e os plug-ins que nos vão dar
acesso a elementos nativos do dispositivo, como câmera e microfone.
Como vamos utilizar a JDK do Android para ativar o seu emulador e testar as nossas
aplicações, precisamos instalar a JDK no nosso computador. Para baixá-la é
necessário acessar o site da Oracle
http://www.oracle.com/technetwork/java/javase/downloads/index.html e clicar em
Java Plataform, como pode ser visualizado na figura 10 a seguir.
Como pode ser observado na figura 11, depois de ter clicado em Java Platform, aceite
os termos e baixe a versão que corresponda ao seu sistema operacional.
Como observado na figura 12, quando a janela abrir, clique na opção Configurações
avançadas do sistema para abrir a janela de propriedades do sistema.
Depois de clicar no botão novo, irá abrir a caixa de diálogo Nova Variável de Usuário.
Nessa caixa de diálogo adicione a variável JAVA_PATH, figura 15.
Variável PATH
Nome da Variável: PATH
Valor da Variável: C:\Program
Files\Java\jdk1.8.0_92\bin;C:\Users\Thiago\AppData\Roaming\npm
Variável CLASSPATH
Nome da Variável: CLASSPATH
Valor da Variável: .;JAVA_PATH
Variável JAVA_HOME
Nome da Variável: JAVA_HOME
Valor da Variável: C:\Program Files\Java\jdk1.8.0_92
Variável ANT_HOME
Nome da Variável: ANT_HOME
Valor da Variável: C:\Android\apache-ant
Variável ANDROID_HOME
Nome da Variável: ANDROID_HOME
Valor da Variável: C:\Android\sdk
É importante perceber que essa variável já possui conteúdo. Não apague o conteúdo
já existente, apenas posicione o cursor na última posição do texto e adicione a seguinte
informação:
;C:\Android\sdk\platform tools;C:\Android\sdk\tools;C:\Android\apache-ant\bin
Você será direcionado para as opções de download. Baixe a versão Zip do Command
Line tools, figura 18.
Próximo passo que devemos realizar é configurar o Android SDK Manager. Depois de
extrair os arquivos, clique duas vezes no SDK Manager.exe para executá-lo. Ele
permite gerenciar as várias versões disponíveis no SDK do Android e nele estão listadas
todas as versões disponíveis, como pode ser visualizado na figura 20
Como pode ser observado na figura 21, primeiro é necessário selecionar os pacotes
de ferramentas básicas.
Para compilar o projeto, o Cordova utiliza a versão do Android 5.1.1 (API 22) do SDK.
Então, é de extrema importância que o emulador seja criado nessa versão. Com isso,
selecione a versão 5.1.1 (API 22) e os pacotes, SDK Platform, ARM EABI v7a System
Image, Intel x86 Atom System Image, como pode ser observado na figura 22.
Como pode ser observado na figura 24, clique em Install x Packages, para instalar
todos os pacotes selecionados.
Por fim, aceite as licenças clicando em Accept Licence e depois em Install, como pode
ser visualizado na figura 25.
Depois que a instalação dos pacotes terminar, selecione o menu e escolha a opção
TOOL->AVD Manager, para exibir a janela Android Virtual Device Manager.
Depois clique em create, para criar o emulador, como pode ser observado na figura
26.
Configuração do Emulador:
AVD Name: AVD
Device: Nexus 4 (4.7”, 768 x 1280:xhdpi)
Target: Android 5.1.1 – API Level 22
CPU ABI: ARM (armeabi-v7a)
Para tornar a emulação mais rápida você pode verificar se o seu processador possui
suporte à tecnologia HAXM, para isso é só realizar o download e instalar o utilitário da
intel https://downloadcenter.intel.com/download/7838 e verificar se as opções
Intel(R) Virtualization Technology e Intel VT-x with Extended Page Tables estão
marcadas com yes, na aba CPU Technologies.
Se tiver suporte a esta tecnologia, realize o download HAXM for Windows nesse link:
https://software.intel.com/en-us/android/articles/intel-hardware-accelerated-
execution-manager-end-user-license-agreement e instale na sua máquina.
Depois selecione a opção: CPU ABI: Intel Atom x86
Keyboard: checkbox selecionado.
DESENVOLVIMENTO MULTIPLATAFORMA MOBILE 48
Back Câmera: Emulated.
Assim que a instalação terminar, o Prompt ficará de acordo com a figura 31 abaixo:
Agora execute novamente o Prompt de comando. Ele pode ser executado a partir do
atalho (tecla Windows + r e digitar cmd) ou o menu iniciar no Windows 8.1, pesquisar
por cmd, como pode ser visualizado na figura 32.
cd C:\Phonegap\Projetos
Assim que você digitar esse comando no Prompt, aperte Enter. Se tudo der certo, o
caminho do Prompt estará como a imagem da figura 33.
Se tudo estiver correto, a mensagem que pode ser visualizada na figura 34 será
exibida.
cd hello_world
Para compilar o projeto e ver sua execução no Emulador Android, execute o comando
abaixo:
Espere o emulador carregar e, se tudo der certo, você verá a página padrão do projeto
Apache Cordova, como pode ser visualizado na figura 36.
Como pode ser visualizado na figura 37, é criada a mesma arquitetura de pasta que
foi criada quando criamos nosso projeto Phonegap com o Adobe Phonegap Desktop.
Só que agora podemos manipular toda a arquitetura de uma maneira mais
independente.
Você pode testar o projeto com o Adobe Phonegap Desktop e o Adobe Phonegap App,
como pode ser observado na figura 38.
Como explanado anteriormente nosso código pode ser criado em um editor de texto.
No entanto, é melhor criá-lo utilizado uma ferramenta que forneça recursos que
ajudem no desenvolvimento. Com isso, podemos utilizar o Editor Sublime. Seu
download pode ser encontrado no link: http://www.sublimetext.com/2.
Para desenvolver na plataforma iOS, é necessário ter um Mac. Suas etapas são
divididas na lista abaixo:
Desenvolvimento: Xcode;
Publicar: exige Xcode e uma conta de desenvolvedor que custa 99 dólares anuais;
Durante nossas aulas vamos testar nossas aplicações no Android. Mas é importante
destacar que, como estamos criando aplicativos multiplataforma, qualquer ambiente
pode desenvolvê-los.
Nessa seção, estudaremos alguns dos plug-ins que o Cordova fornece para dar acesso
a alguns recursos nativos dos dispositivos.
<!DOCTYPE html>
<html>
<head>
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="user-scalable=no, initial-
scale=1, maximum-scale=1, minimum-scale=1, width=device-
width">
<title>Hello World</title>
</head>
<body>
<script type="text/javascript" src="js/index.js"></script>
</body>
</html>
Para testar a aplicação com alguma funcionalidade, siga os passos da lista abaixo:
<!DOCTYPE html>
<html>
<head>
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="user-scalable=no, initial-
scale=1, maximum-scale=1, minimum-scale=1, width=device-
width">
<title>Hello World</title>
</head>
<body>
<input type=”button” onClick=”mensagem()” value=”Clique Aqui”/><br/>
<script type="text/javascript" src="js/index.js"></script>
</body>
</html>
function mensagem(){
alert(‘Hello World!’);
}
Como pode ser observado na figura 39, assim que o projeto for executado, você
visualizará a tela da aplicação com um botão; se você clicar no botão, irá aparecer a
mensagem, “Hello World!”.
Um plug-in fornece o acesso a um recurso nativo do dispositivo, seja esse recurso uma
câmera, a lista de contatos, o microfone, o acelerômetro, o gravador, o controle de
mídia e muito mais.
Como visualizado na figura 40, esse comando irá adicionar o recurso de câmera ao
projeto. É de extrema importância que você esteja dentro da pasta do projeto para
adicionar os plug-ins.
3.21 Alert
title: Título da caixa de diálogo, essa opção é opcional, sendo o padrão o texto “Alert”;
buttonName: nome para exibir no botão, essa opção é opcional, o padrão é “Ok”.
cd notificacaoTeste
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="user-scalable=no, initial-scale=1,
maximum-scale=1, minimum-scale=1, width=device-width">
<title>Hello World</title>
</head>
<body>
<input type="button" value="Clique Aqui" onClick="mensagem()"/>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
</body>
</html>
Também é necessário acessar o arquivo index.js, que está dentro da pasta js, que se
localiza dentro da pasta www do projeto; apague todo o conteúdo e escreva o que
está no exemplo 20.
function mensagem(){
navigator.notification.alert(
'Bem Vindos',
Por fim, execute o comando abaixo para ver a execução da aplicação no simulador:
Na figura 41, pode ser observado o projeto depois de executado, aperte o botão e
verifique o resultado.
3.22 Confirm
title: Título da caixa de diálogo, essa opção é opcional, sendo o padrão Confirm;
buttonName: os nomes para exibir nos botões a serem exibidos, separados por vírgula,
essa opção é opcional, o padrão é “Ok, Cancel”.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="user-scalable=no, initial-scale=1,
maximum-scale=1, minimum-scale=1, width=device-width">
DESENVOLVIMENTO MULTIPLATAFORMA MOBILE 67
<title>Hello World</title>
</head>
<body>
<input type="button" value="Alerta" onClick="mensagem()"/><br/>
<input type=”button” value=”Confirmacão” onClick=”confirmacao()”/>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
</body>
</html>
Também é necessário adicionar mais uma função no exemplo 20, esse código é
referente ao arquivo index.js, do projeto notificaoTeste. Adicione mais duas funções,
confirmação() e respostaSim(numBotao). O código deverá ficar de acordo com o
exemplo 22, seguinte:
function mensagem(){
navigator.notification.alert(
'Bem Vindos',
function(){},
'Primeiro Programa',
'Fechar');
}
function confirmacao(){
navigator.notification.confirm(
'Deseja exibir uma mensagem?',
simResposta,
'Mensagem',
['Sim','Não','Talvez']);
}
Se o botão Confirmação for clicado, aparecerá uma caixa de diálogo; e se o botão Sim
for clicado, aparecerá outra caixa de diálogo, como pode ser visualizado na figura 43.
3.23 Prompt
A janela de diálogo Prompt, possui uma caixa de texto, permitindo que o usuário insira
uma string. Sua sintaxe é:
title: Título da caixa de diálogo, essa opção é opcional, sendo o padrão Prompt;
buttonName: os nomes para exibir nos botões a serem exibidos, separados por vírgula,
essa opção é opcional, o padrão é “Ok, Cancel”;
DefaultText: Texto padrão para ser exibido na caixa de texto quando ela estiver vazia.
DESENVOLVIMENTO MULTIPLATAFORMA MOBILE 70
Vamos criar um exemplo. No código do exemplo 21, referente ao arquivo index.html
do projeto notificacaoTeste, adicione mais um botão. O código deverá ficar de acordo
com o exemplo 23, a seguir:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="user-scalable=no, initial-scale=1,
maximum-scale=1, minimum-scale=1, width=device-width">
<title>Hello World</title>
</head>
<body>
<input type="button" value="Alerta" onClick="mensagem()"/><br/>
<input type=”button” value=”Confirmacão”
onClick=”confirmacao()”/><br/>
<input type=”button” value=”Prompt” onClick=”prompt()”/>
<script type="text/javascript" src="cordova.js"></script>
<script type="text/javascript" src="js/index.js"></script>
</body>
</html>
Também é necessário adicionar mais uma função no exemplo 22; esse código é
referente ao arquivo index.js, do projeto notificaoTeste. Adicione mais duas funções
prompt() e promptPressionado(resultado), o código deverá ficar de acordo com o
exemplo 24, a seguir:
function simResposta(numBotao){
if(numBotao==1){
navigator.notification.alert(
'Mensagem Exibida',
function(){},
'Teste Mensagem',
'Fechar');
}
}
function prompt(){
navigator.notification.prompt(
'Digite o seu nome',
promptPressionado,
'Nome',
['Ok', 'Cancelar'],
'Nome');
function promptPressionado(resultado){
navigator.notification.alert(
"Você digitou o texto: " + resultado.input1,
function(){},
'Mensagem',
'Fechar');
}
Se o botão Prompt for clicado, aparecerá uma caixa de diálogo, e se a string “Nome”
for digitada no campo de texto e o botão Ok for clicado, aparecerá outra caixa de
diálogo. Como pode ser visualizado na figura 45.
3.24 Câmera
Sua sintaxe é:
destinationType: o tipo de retorno da imagem, que pode ser DATA_URL para retornar
uma imagem encodada em base64, e FILE_URL que retorna o caminho da imagem;
DESENVOLVIMENTO MULTIPLATAFORMA MOBILE 74
sourceType: fonte da imagem;
cd cameraTeste
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="format-detection" content="telephone=no">
Também é necessário acessar o arquivo index.js, que está dentro da pasta js, que se
encontra dentro da pasta www do projeto; apague todo o conteúdo e escreva o que
está no exemplo 26.
function imagem(){
navigator.camera.getPicture(
sucesso,
falha,
{destinationType: Camera.DestinationType.FILE_URI,
sourceType: Camera.PictureSourceType.CAMERA});
}
function sucesso(imagemUrl){
var image = document.getElementById('idImagem');
image.src = imagemUrl;
}
Na figura 46, pode ser observado o projeto depois de executado; aperte o botão e
verifique o resultado.
Como pode ser observado na figura 47, se o botão Capturar Imagem for pressionado,
o aplicativo irá ativar a câmera; se você tirar uma foto e apertar o botão de Ok (V), a
aplicação voltará para a página anterior e exibirá abaixo do botão a imagem
fotografada.
SQLite
localStorage
Nas nossas aulas iremos estudar o SQLite. Ele é uma versão reduzida de um banco de
dados relacional e pode ser encontrado em quase todos os sistemas operacionais
móveis.
Vamos criar um exemplo: uma agenda de endereços. Com ela poderemos adicionar
um contato com seu respectivo endereço, será possível listar os contatos e por fim
deletá-los.
cd sqliteTeste
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<meta name="format-detection" content="telephone=no">
<meta name="viewport" content="user-scalable=no, initial-
scale=1, maximum-scale=1, minimum-scale=1, width=device-
width">
<title>SQLite Teste</title>
<link rel="stylesheet" type="text/css" href="css/index.css"/>
</head>
<body>
<h1>Cadastrar Contatos</h1>
<input id="nome" type="text" placeholder="Nome"/><br/>
<input id="endereco" type="text"
placeholder="Endereco"/><br/>
<input type="button" value="Adicionar"
onClick="adicionarValoresNoBanco()"/>
<input type="button" value="Atualizar"
onClick="listarValoresDoBanco()"/><br/><br/>
<span id="listaRegistro">Contatos Cadastrados</span>
<span id="contatos"></span>
<script type="text/javascript" src="cordova.js"></script>
Também é necessário acessar o arquivo index.js, que está dentro da pasta js, que se
encontra dentro da pasta www do projeto; apague todo o conteúdo e escreva o que
está no exemplo 28.
document.addEventListener("deviceready", inicializarBanco,
false);
var db;
var shortName = 'WebSQLite';
var version = '1.0';
var displayName = 'WebSQLite';
var maxSize = 65535;
function inicializarBanco(){
if (!window.openDatabase) {
alert('O navegador não suporta SQLite.');
return;
}
db = openDatabase(shortName, version,
displayName,maxSize);
db.transaction(function(query){
query.executeSql( 'CREATE TABLE IF NOT EXISTS
Contato(ContatoId INTEGER NOT NULL PRIMARY KEY
AUTOINCREMENT, Nome TEXT NOT NULL, Endereco TEXT NOT
listarValoresDoBanco();
}
Da linha 4 à linha 8, são criadas algumas variáveis com parâmetros para criar o banco;
Na linha 10, iniciamos a função inicializarBanco;
Na linha 19, com o método executeSql, uma tabela contato é criada, se ainda não
existir. Essa função recebe como parâmetro:
arguments: parâmetro opcional, argumentos que devem ser passados para o script
function listarValoresDoBanco() {
if (!window.openDatabase) {
alert('O navegador não suporta SQLite.');
return;
}
db.transaction(function(transaction) {
transaction.executeSql('SELECT * FROM Contato;', [],
exibirContatos ,errorHandler);
});
return;
}
Na linha 48, podemos observar a inserção de uma imagem. Essa imagem irá aparecer
ao lado dos contatos listados, para que você possa clicar e deletar um contato. Você
pode baixar qualquer imagem a sua escolha, de tamanho 24x24 pixels e inseri-la na
pasta img, que se encontra na pasta www do projeto.
A inserção de novos contatos também é bem simples, para isso usamos os métodos
transaction e executeSQL. Para isso, iremos adicionar no nosso código index.js a
função adicionarValoresNoBanco(), que será responsável por executar a consulta dos
function adicionarValoresNoBanco() {
if (!window.openDatabase) {
alert('O navegador não suporta SQLite.');
return;
}
db.transaction(function(transaction) {
transaction.executeSql('INSERT INTO Contato(Nome, Endereco)
VALUES (?,?)', [nome, endereco], nullHandler,errorHandler);
},errorHandler,successCallBack);
listarValoresDoBanco();
return false;
}
Exemplo 30 - Exemplo do arquivo index.js do projeto sqliteTeste com a função de
inserir
Por fim, para que a aplicação consiga deletar os contatos já existentes, iremos
adicionar no nosso código index.js a função apagarContato(dado), que será
responsável por apagar um registro existente no banco. Adicione as funções do
exemplo 31, no código index.js, abaixo do código já criado.
function apagarContato(dado){
if (!window.openDatabase) {
alert('O navegador não suporta SQLite.');
function successCallBack() {
alert("Operação realizada com sucesso");
}
function errorHandler(error) {
alert('Código do erro: ' + error.code);
}
function nullHandler(){};
Exemplo 31 - Exemplo do arquivo index.js do projeto sqliteTeste com a função de
apagar, seccess, error e nullHandler
Antes de executar a aplicação e ver como ela funciona, é necessário alterar o conteúdo
do arquivo index.css que está na pasta css dentro da pasta www do projeto
sqliteTeste. Acesse o seu conteúdo com o sublime, apague todo o conteúdo e escreva
o código do exemplo 32.
#listaRegistro{
font-weight: bold;
}
Como pode ser observado na figura 48, assim que executarmos o projeto, irá aparecer
uma mensagem de operação realizada com sucesso, confirmando que o banco foi
criado; logo depois poderemos visualizar dois campos de texto e dois botões: um para
cadastrar e outro para atualizar a lista de contatos.
Quando for digitado um nome e um endereço nas caixas de texto e o botão Adicionar
for clicado, as duas strings são salvas no banco e listadas logo abaixo, na parte de
Contatos Cadastrados, como pode ser visualizado na figura 49.
Nesta seção, iremos estudar como realmente o cordova funciona. Já fizemos diversas
aplicações com ele, mas ainda não compreendemos muito bem como funciona sua
arquitetura, como funcionam realmente as WebViews e como todo o código HTML,
CSS e Javascript se integram com a WebView para formar um aplicativo nativo para
cada plataforma.
Um componente WebView é uma espécie de navegador sem interface que pode ser
usado pelos aplicativos para exibir páginas HTML, CSS e Javascript. Ele só renderiza a
página, mas não possui uma interface de navegador, pois não possui botões, barra de
endereço e menus.
Uma WebView comum não pode acessar recursos nativos das plataformas, pois ela
possui a mesma funcionalidade de um navegador padrão. O Cordova é mais que um
navegador, ele possui uma API Javascript que integra a WebView aos recursos nativos
de cada plataforma.
Todos os plug-ins possuem todo o código nativo necessário para acessar os contatos
nas plataformas Android com Java, iOS, com objective-C ou Swift e C# com Windows.
Na figura 50, pode ser visualizado como o framework cordova funciona.
Como pode ser visualizado na figura 50, a aplicação cordova encapsula todo o código
HTML, CSS e Javascript, na WebView nativa da plataforma e os plug-ins que estiverem
sendo usados na aplicação. Os plug-ins são ativados a partir da API javascript, que faz
essa comunicação entre a WebView e os plug-ins e que acabam se comunicando com
o sistema operacional de forma nativa.
www – pasta onde deve ficar todo o seu código HTML, CSS, Javascript, além das
imagens.
DESENVOLVIMENTO MULTIPLATAFORMA MOBILE 89
config.xml – é o arquivo de configuração do cordova, deve ficar na pasta raiz do
projeto.
platforms – pasta onde ficam os arquivos dos projetos nativos de cada plataforma.
hooks – pasta que pode incluir scripts que podem ser usados pelos nossos aplicativos.
Geralmente acessamos mais a pasta www, pois contém todo o nosso código da
aplicação e editamos o arquivo config.xml para alterar algumas configurações, como
ícone e tela de splash.
O JQuery Mobile é uma biblioteca que utiliza a linguagem javascript para criação de
aplicações mobile web.
A biblioteca deixa uma página HTML com cara de aplicativo mobile, pois ela fornece
uma estrutura de temas que permite definir o estilo do seu aplicativo. Também é
Vamos criar nosso projeto final. Para isso, abra o Prompt de comando e digite o
comando abaixo:
cd C:\Phonegap\Projetos
Esse comando dará acesso à pasta Projetos. Depois de acessar a pasta, crie um novo
projeto Cordova com o comando:
cd Projeto_Final
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Anotação</title>
<link rel="stylesheet"
A linha 7 está adicionada à chamada de arquivo css, que contém o estilo para os temas
do JQuery Mobile;
Nas linhas 16, 17 e 18 estão os arquivos que vão conter os códigos javascript da nossa
aplicação:
Crie os três arquivos na pasta js, que está na pasta www do projeto.
Ela possui um atributo data-role, que serve para verificar qual é a função da div, que
nesse caso será o contêiner principal, pois contém o valor “page” e o atributo id que
identifica a tag.
Entre as linhas 20 e 24, está definida a div que indica ao JQuery o cabeçalho da nossa
aplicação;
Entre as linhas 25 e 29, está definida a div que indica ao Jquery o conteúdo da página
e uma lista onde serão colocadas as anotações.
Como podemos visualizar no exemplo 35, o documento contém uma estrutura básica
do JQuery Mobile. No entanto, não possui a estrutura básica do HTML, como as tags
<html>, <head> e <body>. Isso é possível porque o JQuery Mobile carrega as
páginas usando a tecnologia AJAX, mantendo assim a estrutura HTML da página
principal. O conteúdo que vai alterando a cada interação é a da tag <div>, com
atributo data-hole de valor page.
Para criar e se conectar com o banco de dados, escreva o código do exemplo 36, no
arquivo model.js.
var db;
var shortName = 'Anotacao';
var version = '1.0';
var displayName = 'Anotacao';
var maxSize = 65535;
function inicializarBanco(){
if (!window.openDatabase) {
alert('O Navegator não possui suporte a SQL');
return;
}
db = openDatabase(shortName, version, displayName,maxSize);
db.transaction(function(tx){
tx.executeSql( 'CREATE TABLE IF NOT EXISTS Anotacoes(id INTEGER NOT
NULL PRIMARY KEY AUTOINCREMENT, conteudo TEXT NOT NULL, published
DATE)',
[],function(){},errorHandler);
},errorHandler,function(){});
}
Exemplo 36 – Criando conexão com o banco de dados
Banco: Anotação
Tabela: Anotações
Campo: id, inteiro, chave primária, autoincremento;
Campo: conteúdo, texto não nulo;
Campo: published, data.
function gravarAnotacao(){
anotacao = new Object();
anotacao.conteudo = document.getElementById('conteudo').value;
function gravarNoBanco(anotacao) {
inicializarBanco();
db.transaction(function(transaction) {
transaction.executeSql('INSERT INTO Anotacoes(conteudo, published)
VALUES (?,?)',
[anotacao.conteudo, anotacao.published], function(){},
errorHandler);
},errorHandler,successCallBackInserir);
}
function successCallBackInserir(){
alert("Anotação inserida no banco com sucesso!");
VoltarIndex();
}
function errorHandler(error){
alert('Código do erro: ' + error.code);
}
function voltarPagina(){
location.href="index.html";
}
Exemplo 39 – Função voltarPagina() projeto final.
function listaDeValores() {
inicializarBanco();
db.transaction(function(transaction) {
transaction.executeSql('SELECT * FROM Anotacoes;', [],
mostrarRegistros ,errorHandler);
});
return;
}
Exemplo 40 – Consultar anotações no banco de dados
Na linha 4 é verificado se existem anotações no banco. Se existirem, ele irá criar a lista
de anotações; senão, não será listado nada.
Entre as linhas 2 e 8, são criados no cabeçalho do JQuery Mobile da página dois botões,
um para voltar e o outro para deletar a anotação. Também é inserido o texto Visualizar.
No arquivo model.js adicione o código do exemplo 43, para que seja possível visualizar
os detalhes da anotação.
function visualizarAnotacao(id){
db.transaction(function(transaction) {
transaction.executeSql('SELECT * FROM Anotacoes WHERE id = ?', [id],
mostrarAnotacao ,errorHandler);
});
}
Na linha 4 é possível observar que, se tudo der certo na consulta SQL para consultar
uma anotação a partir do seu id no banco, será chamada a função mostrarAnotacao.
Como pode ser visualizado no exemplo 44, a função recebe como parâmetro o
resultado da transação com o banco de dados e monta o HTML para exibir os dados
ao usuário.
Outra funcionalidade que é necessário criar é listar as anotações toda vez que a
aplicação estiver na página de index.html ou voltar para ela. Para isso, escreva o
código do exemplo 45 no arquivo de controller.js.
$(document).on("pageshow", function(){
var url = $("#visualizarAnotacao").attr("data-url");
if (_GET("id", url) != null)
visualizarAnotacao(_GET("id", url));
else
listaDeValores();
});
Note que na linha 3 do exemplo 45 é possível visualizar a função _GET que retira a
string “id” da tag com o id “visualizarAnotacao”, para que no momento em que o
usuário clique na anotação a aplicação possa redirecionar para suas propriedades. Para
criar a função _GET, adicione o código do exemplo 46 no arquivo index.js.
Antes de testar a nossa aplicação, é necessário criar a última interação do usuário com
a aplicação: a remoção de uma anotação. O exemplo 47 possui o código para deletar
uma anotação. Esse código deve ser escrito dentro do arquivo model.js.
function apagarAnotacao(){
var url = $("#visualizarAnotacao").attr("data-url");
var id = _GET("id", url);
if (!window.openDatabase) {
alert('O navegador não suporta SQLite.');
return;
}
db.transaction(function(transaction) {
transaction.executeSql('DELETE FROM Anotacoes WHERE id = ?', [id],
successCallBackDeletar ,errorHandler);
},errorHandler,nullHandler);
listaDeValores();
return false;
}
function successCallBackDeletar(){
function nullHandler(){};
Exemplo 47 – Funções que auxiliam da remoção de uma anotação
É possível visualizar na figura 51, que a aplicação possui um campo de cabeçalho que
inclui o nome Anotação e um botão para criar novas anotações. O campo de corpo
ainda não possui nenhuma anotação listada.
Se o botão for clicado, a aplicação irá direcionar o usuário para a tela que pode ser
visualizada na figura 52.
Se alguma anotação for digitada e o botão for clicado, a aplicação voltará para a página
inicial e listará as anotações inseridas, como pode ser visualizado na figura 53.
Clicando no item da lista, o aplicativo irá direcionar o usuário para a página de detalhes
da anotação, que pode ser analisada na figura 54.
BIBLIOGRAFIA
GHATOL, R.; PATEL, Y. Beginning PhoneGap. New York: Apress Media, 2012.
GIFFORD, Matt. PhoneGap mobile application development cookbook. Packt Publishing
Ltda, 2012.
LOPES, Sérgio. Aplicações mobile híbridas com Cordova e Phonegap. Vila
Mariana: Casa do Código, 2016.
WARGO, John M. Apache Cordova API Cookbook. Pearson Education, 2014.