SlideShare une entreprise Scribd logo
1  sur  109
Desenvolvimento de Aplicativos Móveis
Abordagem Híbrida: Aproveitando seus
conhecimentos WEB junto com PhoneGap,
Cordova, Angular e com foco no Ionic
Felipe Blini
- Tecnólogo em Desenvolvimento de Sistemas para Internet
- Formado em 2006 pela Unoeste - Presidente Prudente/SP
- Desenvolvendo Softwares desde 2004
- Experiência como dono de agência de TI de 2006 a 2009
- Experiência em uma Multinacional e no Governo
- Experiência em diversas startups, sendo uma premiada
internacionalmente
- Experiência internacional no Chile, Alemanha, Espanha, Hungria e
Híbrido?
Aplicativos Híbridos = Aplicativo Web com Acesso Nativo
Tipos de Aplicativos Móveis
- Aplicativos Nativos
- Online
- Offline
- HTML5 (Web App)
- Site normal - acessa usando uma url
- Progressive Web Apps
- Web App Instalável
- Aplicativos Híbridos
- Site normal empacotado pelo Cordova, roda em uma WebView com
acesso nativo a funcionalidades do SO
Nativo, Web App ou Híbrido?
Fonte (imagem): http://blog.bravi.com.br/comparativo-as-diferencas-entre-desenvolvimento-nativo-hibrido-e-web-app/
WEB APP
Parcial
Nativo (1 plataforma)
- Aprendizagem
- Investimento
- Prazo
Nativo (+ de 1
plataforma)- Manutenção
- Versionamento
- Evolução
- Detecção e Correção bugs
- Add e Remover Funcionalidades
Híbrido
- Aprendizagem (você já sabe)
- Investimento
- Prazo
- Mão de Obra
- Write once, run anywhere
- Performance???
Web App
- Engajamento
- Desoretencioso
- PWA
Aplicativos híbridos são lentos?
http://venturebeat.com/2012/12/13/facebook-android/#s:fb-android-3
Nop!
Porque HTML5? - Importância da web
- Principal tecnologia
- Mais popular
- APIs e recursos mobile
Estilizar Inteligência
A WeLoveStarWars
- Cliente: Loja física especializada em intens da série Star Wars
- Querem um app que será instalado em tablets Android espalhados pela loja
- Usuários do app: visitantes da loja que querem conhecer mais sobre todos os
filmes do Star Wars:
- Lista dos filmes
- Para cada filme:
- Personagens
- Veículos
Qual seria a melhor solução?
- Não acessa recursos nativo
- Não precisa de ultra performance
- Deve ser instalado nativamente em tablets
- Rodar apenas no Android
- Prazo apertado
- Orçamento baixo
- Dados disponíveis em uma api web
- Web App instalável para Android (PhoneGap)
Requisitos:
Resposta:
Workflow - Aplicativo Móvel
1)Mockup das Telas
2)Protótipo
3)Desenvolvimento
4)Testes no Browser*
5)Testes em Emuladores
6)Testes em Devices
7)Entrega (instalar nos tablets)
Workflow de Teste App PhoneGap
1) Teste o tanto que der no navegador (ambiente limitado)
2) Teste no PhoneGap Developer App
3) Use PhoneGap Build online e instale o app no device
Debug
- Chrome e Safari
- Weinre (http://docs.phonegap.com/references/developer-app/debugging)
Aparência e Comportamento de App
- Aplicativos móveis têm que ter
- Navbar
- Statusbar customizada
- Botão voltar
- Área de renderização de conteúdo
- Ícone e Splash Screen
- Componentes UI otimizados para Touch Screen
- Aplicativos móveis são
- SPA (Single Page Aplications) com transições entre telas
- Aplicativos móveis híbridos
- Respeitam essas regras
+
Desenvolver o Protótipo
PhoneGap Build
Mockup
Pencil (desktop - free) - Ionic Creator (web - freemium) - Moqup (web - freemium)
Testar e Entregar
PhoneGap Build
Mão na massa - Protótipo
testar - empacotar - instalar - entregar
Fixando o Aprendizado 1
1)Em um editor de texto, crie o projeto e estrutura de pastas usada]
2)Crie um arquivo index.html com a estrutura mostrada em estrutura.txt
3)Adicione as marcações HTML do index.html de exemplo
4)Referencie as bibliotecas de terceiros da pasta vendors
5)Instale o PhoneGap Desktop na sua máquina
6)Crie um novo projeto PhoneGap e copie os arquivos na pasta www
7)Rode o servidor do PhoneGap
O cliente gostou! Bora desenvolver, mas espera!
Mundo WEB != Mundo Mobile
Estude Mobile e prepare-se
Mundo Mobile Híbrido == Mundo Mobile
Mesmo ambiente de desenvolvimento, UX deve ser a mesma
Mundo do Carro Híbrido == Mundo do Carro Normal
O ambiente de desenvolvimento é o mesmo, mesma UX
Ambiente de Desenvolvimento Mobile
- Java Development Kit (JDK)
- Android SDK
- SDK Packages
- Android Studio
- Genymotion
- MAC e um device com iOS 8
- iOS SDK
- Xcode
- Windows 8 Pro 64 bits
- WP8
- Windows Phone SDK
- Visual Studio 2012
Ambiente de Desenvolvimento Mobile
Preparando o Ambiente para Desenvolvimento Android
https://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html
- Java Development Kit (JDK)
- Android SDK - Android Studio
- Adicionar o Pacote SDK para a versão da API desejada
- Genymotion (alternativa para o emulador do Android Studio)
- Configurar Variáveis de Ambiente JAVA_HOME e ANDROID_HOME e
diretórios 'tools' e 'platform-tools' do Android SDK
- java -version
Preparando o Ambiente para Desenvolvimento iOS
https://cordova.apache.org/docs/en/latest/guide/platforms/ios/index.html
- Mac rodando OS X 10.9 ou superior
- iOS 8 SDK (incluído OS X)
- Xcode 6.0 ou superior (gratuito)
- iPhone 4s ou superior ou iPad 3 ou iPod Touch geração 5
- Publicar na App Store: exige Xcode e uma conta de desenvolvedor que
custa $99 anuais.
Preparando o Ambiente para Desenvolvimento Windows Phone
https://cordova.apache.org/docs/en/latest/guide/platforms/wp8/index.html
- Windows 8.1 ou superior, na versão Pro 64 bits.
- Visual Studio
- Para emular: processador Intel moderno com suporte a Hyper-V;
- Windows Phone 8 registrado na SDK e intalar o app pelo Desktop
- Publicar na WP Store: via Web, exige uma conta de desenvolvedor, custa
$19 por ano.
Mão na massa: Integrar o app à API Web
PhoneGap CLI
- $ phonegap create
- $ phonegap serve
- $ phonegap plugin
- $ phonegap platform
- $ phonegap build
- $ phonegap run
- $ phonegap run --emulator
- $ phonegap emulate
Fixando o Aprendizado 2
1) Configure o Ambiente Java e Android e o teste o ambiente
2) Instale o Node e o NPM e teste a instalação
3) Instale e teste o Git
4) Instale o PhoneGap CLI e teste
5) Crie um novo projeto PhoneGap através do CLI e rode e visualize no Browser
6) Abra o projeto em um editor de texto e teste o Livereload do PhoneGap
7) Pare o servidor, exclua o conteúdo da pasta www e transfira os arquivos do projeto
8) Exclua os plugins e plataformas adicionados pelo PhoneGap e adicione o plugin whitelist e a
plataforma Browser (sempre registrando no config.xml)
9) Integre o código à API web (cole o codigo js e comente onde a api está sendo consultada)
Nova Funcionalidade para a WeLoveStarWars
- Cliente gostou e deseja agora um leitor de QR Code para ler o código de
baras dos itens e mostrar uma descrição de cada personagem à venda na
loja. App em fullscreen e apenas modo retrato
Requisitos Funcionais:
- O cliente vai gerar QR Codes com os IDs dos personagens que estão no
BD e colar nos itens
- Os clientes da loja vão levar esses items até o tablet, escolher a opção
‘escanear personagem’
- O app vai ler o QR Code e abrir uma tela com a descrição do personagem
Requisitos
- Acessar a funcionalidade nativa de leitor de código de barras
- Criar nova View e novo código consultando a API web
- Apenas para Android e apenas para os tablets da loja
Considerações:
- Funcionalidade simples e o Cordova tem um plugin pronto
- Já temos o projeto integrado no Cordova
- Nosso código já está bem complexo com apenas 2 views
Qual seria a melhor solução??
- Continuar no híbrido?
- Partir pro nativo?
- Aplicativo Híbrido
- SPA com Angular
- Acesso nativo com o Cordova
- Gerenciar as dependências com Bower e Gulp ou
Grunt
Aplicativo Híbrido - Relembrando o Conceito
Código web rodando de maneira embarcada dentro de
uma plataforma nativa, COM ACESSO a recursos e
funcionalidades nativas.
O que a gente vai precisar?
- Acesso às APIs nativas - Cordova
- Acesso à API Web - $http Angular
- Sistema de SPA - Angular
- Aparência de app Android - Materialize
Acesso às APIs nativas: Obrigado Cordova!
https://cordova.apache.org/docs
PhoneGap e Cordova - História e Eliminando Confusão
Código Open-Source Produto e Serviços 1 dos serviços do PhoneGap
PhoneGap: Distribuição Open Source do Cordova (http://phonegap.com)
1 código-fonte Rodando em todas
plataformas
Write Once, Run Anywhere
Cordova
Cordova: Arquitetura
Cordova: Arquitetura > Webview
- Componente Nativo
- Navegador enxuto (sem interface)
- Tem acesso as APIs nativas do device
- Invólucro da nossa app
- Cordova app = são Embedding WebViews
- Cordova cria e chama uma nova WebView com poderes especiais para
cada plataforma
- Android WebViews
Cordova: Arquitetura > Webview
Motor de Renderização
de HTML
Cordova
Mistura tecnologias web (JavaScript) com componentes
nativos (WebView) que pode acessar APIs do nível do
device.
Acesso nativo ao device com JavaScript:
- Battery Status
- Camera
- Contacts
- File
- Geolocation
- Media Capture
- Vibration
- Network Information
- etc
JavaScript
Cordova
Interpretador Código Nativo
(Ponte)
Cordova: Arquitetura > Web App
- Onde o código reside
- Criado como uma página web
- Executado dentro de uma WebView
- config.xml
Cordova: Arquitetura > Plugins
- Parte integral do Ecossistema do Cordova
- Encapsula código JavaScript que acessa as APIs nativas
- Interface de comunicação entre o Cordova e componentes nativos
- Permite invocar código nativo através de JavaScript
- Provê plugins principais e vários outros criados pela comunidade
(https://cordova.apache.org/plugins/)
- Pode criar seus próprios plugins
- Todo plugin deve ser explicitamente adicionado no projeto
Cordova: API
Ciclo de Vida da Aplicação Cordova
- Igual às Activities Lifecycle
- Apps contém diversas Activities
- Webview: é um activity
Activity
O Arquivo config.xml
Configurações globais do app e para plataformas específicas
- Nome do app, ícone, splash screen, autor, descriçao do app
- Permissoes do app, versões das plataformas
- Preferências (globais ou por plataforma):
- Orientação, fullscreen, cor de fundo, overscroll.
- <preference name=”Orientation” value=”portrait” /> (global)
- <platform name=”android”>
<preference name=”Overscroll” value=”false” />
</platform
http://docs.build.phonegap.com/en_US/configuring_preferences.md.html (configurando preferências)
O Arquivo config.xml > ícone e splash screen
- Criar os arquivos e apontar o caminho no config.xml
- <icon src=”resources/icon.png” width=”” height=”” />
- <splash src=”resources/spash.png” width=”” height=”” />
- Adicionar plugin Splash Screen
- <preference name="SplashScreenDelay" value="2000" />
- <preference name="FadeSplashScreenDuration" value="2000" />
- Criar, exportar e registrar TODAS imagens para as diversas plataformas,
Ícones e Splash Screen > Arquivo base
icon.png splash.psd
Mão na massa: Ionic Resources
Fixando o aprendizado 3 - Ionic Resources
1)Exclua os icones e splash do config.xml
2)Instale o Ionic
3)Converta o projeto para um projeto Ionic
4)Exclua a pasta www/res
5)Crie a pasta ./resources
6)Crie os arquivos base icon.png e splash.psd
7)Gere os arquivos com o Ionic Resources
O Arquivo config.xml > engines
- Plataformas que o app dá suporte
- Controla a pasta platforms
- Útil para outros desenvolvedores da equipe
- Importante para versionadores como o Git (não deve ser versionada)
- <engine name=”android” spec=”5.0.0” />
- <engine name=”ios” spec=”4.0.1” />
$ cordova platform add android --save
$ cordova prepare
O Arquivo config.xml > plugins
- Plugins que o app depende
- Controla a pasta plugins
- Útil para outros desenvolvedores da equipe
- Importante para versionadores como o Git (não deve ser versionada)
- <plugin name=”cordova-plugin-whitelist” spec=”~1.2.2” />
$ cordova plugin add cordova-plugin-whitelist --save
$ cordova plugin rm cordova-plugin-whitelist --save
$ cordova plugin ls
Mais sobre o Cordova - Plataformas
https://cordova.apache.org/docs
“É muito importante
conhecer bem como
funciona o Cordova na
plataforma que vc
está desenvolvendo”
Angular - O Framework Font-end da Google
- Muito mais que um simples SPA
- Framework Front-end Completo
- Manipulação do DOM (foco na RN)
- Separação de Interesses no Front-end (MVC), testes de unidades
- Concistência entre a Visão e o Modelo
- Injeção de Dependências
- Services e Factory
- Diretivas
Porque Angular?
- Google e Microsoft
- Comunidade
- Curva de Aprendizado
- MVC feito do jeito certo
- Pronto pra testes de unidade
- Integração com bibliotecas
- Material Design (Angular Material)
- Bootstrap (angular.bootstrap)
- Google Maps (NgMap)
Porque Angular?
Separação de Interesses
Angular: MVC
Modelo = objeto $scope
Visão = HTML
Controlador = Angular Controller
Service/Factory
Dados
Trata os Dados
Angular: Controller
$scope busca os dados em um -> Factory -> Controller manipula e envia ->
View onde o conteúdo (dados) e injetado
Executado apenas quando necessário
$scope = two-way data binding
Caminho inverso:
View recebe dados do usuário ($scope) -> Controller valida e trata -> envia
para um Service (Factory)
Angular: View
HTML, recebe dados do usuário e é “colada” (binding) com o Controller
através do objeto $scope
- Habitat das Diretivas do Angular
Angular: Model e Angular Expression (AE)
Model é o objeto $scope: a “cola” entre a view e o controller
- Two-way Data Binding
- POJO
Angular Expression (AE) é representada por {{ }}, então:
No Controller: $scope.nomeFruta = “banana”;
No HTML: <p>Fruta: {{ nomeFruta }}</p>
Angular: Directives
- HTML (atributos ng-*)
- ng-app
- ng-model
- ng-controller
- ng-repeat
- filter
Demo
Angular: Directives
- HTML (atributos ng-*)
- ng-hide
- ng-show
- ng-if
- ng-click, ng-blur, ng-mouseover…. (e todos os outros
eventos do JavaScript)
Demo
Angular: Factory
modulo.factory('myFactory', function() {
// factory sempre retorna um objeto
// pode executar código antes
var someText = “How are you?”;
return {
sayHello : function(name) {
return "Hi " + name + "!" + someText;
}
}
});
Angular: Services
app.service('myService', function() {
// service é um objeto que quando injetado é instanciado
implicitamente com a palavra-chave new
this.sayHello = function(name) {
return "Hi " + name + "!";
};
});
Serviços prontos pra uso: $http, $timeout, $interval, $log ...
Pedaços de lógica de negócios reutilizáveis por toda a aplicação
O Serviço $http
- Injetado como qualquer outro artefato do Angular
- Recebe como parâmetro um objeto:
- {
method: método utilizado, pode ser GET, POST, PUT ou DELETE
url: endereço do recurso acessado
data: objeto no qual cada propriedade será um parâmetro na requisição
}
- $http({method: 'GET', url: '/filmes/'});
- $http.get(‘url’) e $http.post(‘url’)
O Serviço $http não retorna dados
O que seria isso:
$http({method: 'GET', url: '/filmes'}, function(resposta) {
var dados = resposta; // dados é um array pronto pra ser usado
});
É isso:
var dados = $http({method: 'GET', url: '/filmes'});
console.log(dados); // exibe undefined
A variável dados é uma promise e tem a promessa de conter dados em um futuro
próximo, assim podemos seguir em frente sabendo que ele vai cumprir a promessa
O Padrão Promise
Como na vida real, ao receber uma promessa de alguém, seguimos nossa vida
sabendo que ela pode ser cumprida ou não, por isso a promise tem estados:
- Fullfiled: a promessa foi cumprida
- Rejected: promessa rejeitada (fudeu, a pessoa disse que não vai cumprir)
- Failed: nem cumprida e nem rejeitada (fudeu, deu um erro e a pessoa
morreu)
Promises têm um método then() e catch();
Funções Catch, Success e Error do $http
promise.success(function(data, status, headers, config) {})
.error(function(statusText, status, headers, config) {});
Fullfiled Rejected ou Failed
var promise = $http({method: 'GET', url: '/filmes'});
promise.then(function() {}, function() {});
Fullfiled Rejected ou Failed
promise.then(function() {}).then(function() {}).then(function() {}).catch(function() {});
Fullfiled Fullfiled
Rejected ou Failed
Demo
ngAnimate
- Adiciona ou remove classes pré-definidas para um conjunto de diretivas,
sendo elas:
- ng-show
- ng-hide
- ng-class
- ng-view
- ng-include
- ng-repeat
- ng-if
- ng-switch
https://docs.angularjs.org/api/ngAnimate
http://www.w3schools.com/angular/angular_animations.asp
Adiciona ou remove a classe ng-hide
Adiciona a classe ng-enter quanto entra no DOM
E a classe ng-leave quanto sai no DOM
Use essa funcionalidade para adicionar propriedades
de animação no CSS
Angular: Custom Directives
modulo.directive(“minhaDiretiva”, function() {
return {
templateUrl: “estrelas.html”,
restrict: [“ACEM”],
link: function(scope, iElement,
iAttrs) { }
}
});
“A” <div minha-diretiva />
“E” <minha-diretiva />
“C” <div class=”minha-diretiva”>
“M” <!-- minha-diretiva -->
https://docs.angularjs.org/guide/directive
Demo
App Mobile sem CDN, por favor!
- Entrar nos sites de cada biblioteca
- Fazer download
- Descompactar
- Adicionar em uma pasta dentro do projeto
- Referenciar no HTML
- Identificar dependências e adicioná-las também
- E depois pra minificar e juntar como o nosso
JavaScript’s e CSSs??
- Toda tarefa repetitiva e sem criatividade, robôs podem fazer pra nós
Gulp
1) Define tarefas com gulp.task()
2) Procura por mudanças em arquivos com gulp.watch()
3) Abre arquivos/diretório com gulp.src()
4) Cospe arquivos/diretorios com gulp.dest()
Usa sequências de pipe()
O Ionic usa o Gulp!
Com ajuda do Bower
1) Instalar e remover dependência com o Bower
2) Toda vez que o bower.json mudar, atualizar as referências no HTML
3) Separar arquivos de Desenvolvimento dos de Deploy
4) Integrar essas mudanças com o Livereload do Ionic Serve
a) Sempre que alterar um arquivo Dev fazer o deploy na hora
5) Achar todos arquivos JavaScript referenciados no HTML
a) Minificar (Uglify)
b) Juntar em 1 arquivo só
c) Salvar em algum lugar
Demo
Rotas
Conectam Views e Controllers através de URLs e/ou Estados
- Rota padrão do Angular: ngRoute
- Organizadas por URLs
- A View é sempre injetada no mesmo lugar pré-definido
- Ionic usa uma rota mais flexível: UI-Router
- Organizada por states da aplicação e opcionalmente por URLl, e comportamentos
- Pode conter mais de 1 view na mesma rota que são injetadas em lugares distintos
- Um state é como a UI se parece e o que ela está fazendo em um certo momento
UI Router - Padrão do Ionic
UI-Router is a client-side
router for single page web
applications.
Roteador client-side atualiza
a URL do browser assim
que o cliente navega pela
SPA e mapeia
funcionalidades em states
e URLs (opcional)
UI Router - Trabalha com states
<!-- na index.html -->
<body ng-controller="MainCtrl">
<section ui-view></section>
</body>
// no arquivo de coniguração de rotas
$stateProvider.state('contacts', {
template: '<h1>My Contacts</h1>'
})
Templates são injetados nos estados pais (<ui-view>).
Um state é ativado com o comando $state.go() , em um links dentro de ui-sref=”” ou navegando pra
uma url com um estado associado
Top level state
UI Router
Assinando um Controller a um template:
$stateProvider.state('contacts', {
template: ...,
Controller: function($scope) { $scope.title = ‘Contacts’ }
})
Alternativamente pode-se adicionar a sintaxe ‘controller as’
$stateProvider.state('contacts', {
template: ...,
controller: 'ContactsCtrl',
controllerAs: 'contact'
})
$stateProvider.state('contacts', {
template: ...,
controller: 'ContactsCtrl as contact'
})
ou
UI Router > Resolve Objects e Custom Datas
- Data: Injeta no Controller dados específicos do state
- Resolve: Resolve dependências (objetos) e injeta no Controller
- Devem ser resolvidos - bloqueiam acesso
$stateProvider.state('contacts', {
template: ...,
controller: 'ContactsCtrl',
resolve: { autentica: function($http){
// $http returns a promise for the url data
return $http({method: 'GET', url: '/someUrl'});
}
},
data: { customData1: 44 }
})
controller: function($scope, $state, autentica) {
$scope.autenticado = autentica.data;
console.log($state.current.data.customData1)
}
UI Router > Eventos onEnter e onExit
$stateProvider.state('contacts', {
template: ...,
controller: 'ContactsCtrl',
resolve: { autentica: function($http){
// $http returns a promise for the url data
return $http({method: 'GET', url: '/someUrl'});
}
}
onEnter: function(title){
if(autentica.data){ ... do something ... }
},
onExit: function(title){
if(autentica.data){ ... do something ... }
}
})
Outros eventos:https://github.com/angular-ui/ui-router/wiki#state-change-events
- Chamados antes de entrar ou sair de um state
- Têm acesso a todas às dependências do
Resolve
UI Router > Nested States e Nested Views
States podem ser aninhados com outros states
.state('contacts.list', {}) ou parent: 'contacts'
O state list é filho do state contacts e herda apenas os resolvers e custom datas
http://goo.gl/kOG3je. Quando o list é ativado o contacts é implicitamente ativado também
<ui-view>
<ui-view>
Template da list
Template da contacts
index
Contacts.list é ativado
UI Router > Abstract States
Usado nos starters Sidemenu e Tabs do Ionic
Ativados implicitamente quando quando ativamos filhos
Não podem ser ativados sozinhos
Úteis para qualquer tipo de herança entre todos os filhos:
- Templates
- Resolvers
- Custom Datas
- Controller
- $scope
UI Router > Multiple Named Views
https://github.com/angular-ui/ui-router/wiki/Multiple-Named-Views
<!-- index.html -->
<body>
<div ui-view="filters"></div>
<div ui-view="tabledata"></div>
<div ui-view="graph"></div>
</body>
$stateProvider
.state('report',{
views: {
'filters': { templateUrl: 'report-filters.html',controller: ‘RCtrl’ },
'tabledata': { templateUrl: 'report-table.html', controller: ‘TRCtrl’ },
'graph': { templateUrl: 'report-graph.html', controller: ‘GRCtrl’ }
}
});
Usado no
starter Tabs
do Ionic
UI Router > URL Routing
Ideal para passar parâmetros:
$stateProvider
.state('contacts.detail', {
url: "/contacts/:contactId", ou url: "/contacts/{contactId}" e ainda url:
"/contacts/{contactId:int}"
templateUrl: 'contacts.detail.html',
controller: function ($stateParams) {
// If we got here from a url of /contacts/42
expect($stateParams).toBe({contactId: "42"});
}
})
https://github.com/angular-ui/ui-router/wiki/URL-Routing
UI Router > URL Routing e Nested Views juntos
Combina a URL do filho com a do pai
$stateProvider
.state('contacts', {
url: '/contacts',
...
})
.state('contacts.list', {
url: '/list',
...
});
https://github.com/angular-ui/ui-router/wiki/URL-Routing
'contacts' state é acessado com "/contacts"
'contacts.list' state é acessado com "/contacts/list".
UI Router > Organizando States
var contactState = {
name: 'contacts',
url: "/contacts/:contactId"
templateUrl: 'contacts.detail.html',
Controller: ContactController
};
$stateProvider.state(contactState);
UI Router > Principais Componentes e Documentação
$state / $stateProvider: Gerencia as definições e comportamentos dos states
Diretiva ui-sref: Equivalente ao href ou ng-href dos elementos <a /> com excessão que o valor será o
nome de um state. Adiciona implicitamente o href de acordo com a URL associada no state.
<ui-view />: Renderiza a view definida no state atual. Pode se dizer que são Placeholders.
- Ionic: <ion-nav-view />
- Angular (ngRoute): <ngview />
$urlRouter / $urlRouterProvider: Gerencia a lista de rotas e regras de rotas procurando em todas qual é
a que combina com a que está sendo requisitada. Executa sempre que há uma mudança de state.
https://github.com/angular-ui/ui-router/wiki/The-Components (descrição dos componentes)
http://angular-ui.github.io/ui-router/site/#/api/ui.router (documentação do UI Router)
Angular Methods: Run e Config
- Config é executado antes de tudo (um ótimo lugar para
configurar rotas)
- Run é executado depois do config() e antes do resto
Mão na massa: Adicionando Rotas
Opções de Desenvolvimento com Cordova
1) PhoneGap
- Instale o PhoneGap
- Cria as telas HTML
- Referencia o script do cordova
<script src=’cordava.js’ />
- Criar seus próprios CSS e JS
- Adiciona plugins do Cordova no JS
- Faz o build online no PhoneGap Build ou
pela linha de comando
1.2) Adicione bibliotecas
2) Ou use Frameworks
Alternativas para Desenvolvimento Nativo com JS
http://felipeblini.net/Desenvolvimento-de-Aplicativos-Moveis-com-Javascript-Ionic-React-Native-e-NativeScript
UI em Aplicativos Híbridos Multi-plataforma
Platform Agnostic!
http://ionicframework.com
Free and open source, Ionic offers a library of mobile-optimized HTML, CSS and JS
components and tools for building highly interactive native and progressive web apps.
Built with Sass, optimized for AngularJS.
Ambiente Necessário
- Escrito em cima do Angular (MVC, SPA, $http, ID, etc)
- Performance (animações UI)
- Componentes visuais focados em mobile e touch screen
- Documentação completa
- Suporte da comunidade e individual para empresas
- Muito fácil de aprender e começar
Ionic Bundle
ionic.bundle.js
Concatenação do
- ionic.js
- Angular.js
- Angular-animate.js
- Angular-sanitize.js
- Angular-ui-router.js
- Ecossistema (Ionic Platform)
- Ionic View
- Ionic Creator
- Ionic Market
- Ionic CLI
- Cordova CLI
- Sistema de Grid em FlexBox
- Botões
- Listas
- Cards
- Ícones (http://ionicframework.com/docs/v2/ionicons/)
- Formulários e muitos outros...
- Disponíveis em SASShttp://ionicframework.com/docs/components/
Componentes do Ionic
Componentes do Ionic
<ul class="list">
<li class="item">
…
</li>
</ul>
<ion-list>
<ion-item>
…
</ion-item>
</ion-list>
ou
http://ionicframework.com/docs/components/
São diretivas criadas com Angular, como qualquer outra
Diretivas de navegação
<ion-header-bar>: Header fixo. Título e dois botões <ion-nav-button>
<ion-nav-bar>: Navegação no header. Ela que muda o título da <ion-nav-bar> e cuida
dos headers das Views injetadas. Define o(s) <ion-nav-button> do header
<ion-nav-button>: Adiciona-se 2 na <ion-nav-bar>. O primeiro vai pra esquerda e o
segundo pra direita (back-button e toggle menu por exemplo)
<ion-nav-back-button>: Botão voltar. Deve estar dentro da <ion-nav-bar>
<ion-refresher> Atualiza o <ion-content > quando ocorre um overscroll
<ion-infinite-scroll> Atualia o <ion-content> quando o limite de scroll for atingido
<ion-pane>: Similar a uma <div>
<ion-view>: Define uma nova View. Será injetado no <ion-nav-view>
- hide-nav-bar: Propriedade da <ion-view> que esconde ou não a <ion-nav-bar>
- hide-back-button: Propriedade da <ion-view> que esconde ou não o <ion-nav-back-
button>
<ion-nav-view>: Extensão da <ui-view> do UI Router. Semelhante ao <ng-view> do Angular.
Onde o conteúdo da <ion-view> é injetado
<ion-content>: Conteúdo da View. Gerencia conteúdos. Possui uma classe CSS "has-header"
que é adicionada automaticamente caso exista uma <ion-header-bar> por perto
Diretivas de navegação
Nosso primeiro app com Ionic
- Instalando o Ionic
- Ionic CLI
- Scaffolding de Templates
- Códigos Boilerplates do Ionic
- Gerenciador de aps (https://apps.ionic.io/apps)
- O Ionic View (http://docs.ionic.io/tools/view/)
- O Ionic Creator (https://creator.ionic.io)
Mão na massa: Enfim Ionic...

Contenu connexe

Tendances

Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Wennder Santos
 
Ionic + Cordova para Desenvolvimento Mobile
Ionic + Cordova para Desenvolvimento MobileIonic + Cordova para Desenvolvimento Mobile
Ionic + Cordova para Desenvolvimento MobileWaldyr Felix
 
SESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao AndroidSESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao AndroidRafael Sakurai
 
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGapAplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGapThiago Colares
 
Desenvolvimento de aplicativos Mobile com HTML5 e Javascript com Phonegap (Te...
Desenvolvimento de aplicativos Mobile com HTML5 e Javascript com Phonegap (Te...Desenvolvimento de aplicativos Mobile com HTML5 e Javascript com Phonegap (Te...
Desenvolvimento de aplicativos Mobile com HTML5 e Javascript com Phonegap (Te...Cássio Nandi Citadin
 
instalação do phonegap(cordova) no windows 8.1
instalação do phonegap(cordova) no windows 8.1instalação do phonegap(cordova) no windows 8.1
instalação do phonegap(cordova) no windows 8.1Afonso Fernandes
 
Phonegap, muito além dos nativos!
Phonegap, muito além dos nativos!Phonegap, muito além dos nativos!
Phonegap, muito além dos nativos!Luiz Gavinho
 
Phonegap autorefresh - app direto no celular sem emulador
Phonegap autorefresh - app direto no celular sem emuladorPhonegap autorefresh - app direto no celular sem emulador
Phonegap autorefresh - app direto no celular sem emuladorAfonso Fernandes
 
Mini curso - Ionic Framework
Mini curso - Ionic FrameworkMini curso - Ionic Framework
Mini curso - Ionic Frameworkjuniorschroder
 
Introdução ao desenvolvimento de aplicativos com PhoneGap e Sencha Touch
Introdução ao desenvolvimento de aplicativos com PhoneGap e Sencha TouchIntrodução ao desenvolvimento de aplicativos com PhoneGap e Sencha Touch
Introdução ao desenvolvimento de aplicativos com PhoneGap e Sencha TouchLeonardo Soares
 
Introdução ao PhoneGap e Sencha Touch
Introdução ao PhoneGap e Sencha TouchIntrodução ao PhoneGap e Sencha Touch
Introdução ao PhoneGap e Sencha TouchRafael Neri
 
[Curso Phonegap / Cordova] Aula 01: Introdução ao Phonegap
[Curso Phonegap / Cordova] Aula 01: Introdução ao Phonegap[Curso Phonegap / Cordova] Aula 01: Introdução ao Phonegap
[Curso Phonegap / Cordova] Aula 01: Introdução ao PhonegapLoiane Groner
 
Descomplicando o Mobile com Ionic Framework
Descomplicando o Mobile com Ionic FrameworkDescomplicando o Mobile com Ionic Framework
Descomplicando o Mobile com Ionic FrameworkYan Borowski Machado
 
Hybrid app phonegap angular ionic
Hybrid app   phonegap angular ionicHybrid app   phonegap angular ionic
Hybrid app phonegap angular ionicJoelmir Ribacki
 
Palestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPressPalestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPressRômulo Zoch
 

Tendances (20)

Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)Curso: Desenvolvimento de aplicativos híbridos (dia 2)
Curso: Desenvolvimento de aplicativos híbridos (dia 2)
 
PhoneGap - Desenvolvimento mobile multiplataforma - SECCOMP 2014
PhoneGap - Desenvolvimento mobile multiplataforma - SECCOMP 2014PhoneGap - Desenvolvimento mobile multiplataforma - SECCOMP 2014
PhoneGap - Desenvolvimento mobile multiplataforma - SECCOMP 2014
 
Ionic + Cordova para Desenvolvimento Mobile
Ionic + Cordova para Desenvolvimento MobileIonic + Cordova para Desenvolvimento Mobile
Ionic + Cordova para Desenvolvimento Mobile
 
Phonegap
PhonegapPhonegap
Phonegap
 
SESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao AndroidSESTINFO 2011 Apresentacao Android
SESTINFO 2011 Apresentacao Android
 
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGapAplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
 
Desenvolvimento de aplicativos Mobile com HTML5 e Javascript com Phonegap (Te...
Desenvolvimento de aplicativos Mobile com HTML5 e Javascript com Phonegap (Te...Desenvolvimento de aplicativos Mobile com HTML5 e Javascript com Phonegap (Te...
Desenvolvimento de aplicativos Mobile com HTML5 e Javascript com Phonegap (Te...
 
instalação do phonegap(cordova) no windows 8.1
instalação do phonegap(cordova) no windows 8.1instalação do phonegap(cordova) no windows 8.1
instalação do phonegap(cordova) no windows 8.1
 
Phonegap, muito além dos nativos!
Phonegap, muito além dos nativos!Phonegap, muito além dos nativos!
Phonegap, muito além dos nativos!
 
Phonegap autorefresh - app direto no celular sem emulador
Phonegap autorefresh - app direto no celular sem emuladorPhonegap autorefresh - app direto no celular sem emulador
Phonegap autorefresh - app direto no celular sem emulador
 
Mini curso - Ionic Framework
Mini curso - Ionic FrameworkMini curso - Ionic Framework
Mini curso - Ionic Framework
 
Introdução ao desenvolvimento de aplicativos com PhoneGap e Sencha Touch
Introdução ao desenvolvimento de aplicativos com PhoneGap e Sencha TouchIntrodução ao desenvolvimento de aplicativos com PhoneGap e Sencha Touch
Introdução ao desenvolvimento de aplicativos com PhoneGap e Sencha Touch
 
Introdução ao PhoneGap e Sencha Touch
Introdução ao PhoneGap e Sencha TouchIntrodução ao PhoneGap e Sencha Touch
Introdução ao PhoneGap e Sencha Touch
 
Workshop - Ionic + firebase
Workshop - Ionic + firebaseWorkshop - Ionic + firebase
Workshop - Ionic + firebase
 
Firefox OS
Firefox OSFirefox OS
Firefox OS
 
Workshop - Cordova e Ionic
Workshop - Cordova e IonicWorkshop - Cordova e Ionic
Workshop - Cordova e Ionic
 
[Curso Phonegap / Cordova] Aula 01: Introdução ao Phonegap
[Curso Phonegap / Cordova] Aula 01: Introdução ao Phonegap[Curso Phonegap / Cordova] Aula 01: Introdução ao Phonegap
[Curso Phonegap / Cordova] Aula 01: Introdução ao Phonegap
 
Descomplicando o Mobile com Ionic Framework
Descomplicando o Mobile com Ionic FrameworkDescomplicando o Mobile com Ionic Framework
Descomplicando o Mobile com Ionic Framework
 
Hybrid app phonegap angular ionic
Hybrid app   phonegap angular ionicHybrid app   phonegap angular ionic
Hybrid app phonegap angular ionic
 
Palestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPressPalestra UFPR - Intro Ionic framework + WordPress
Palestra UFPR - Intro Ionic framework + WordPress
 

En vedette

Ionic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais RobustoIonic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais RobustoAlamo Saravali
 
Ionic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APPIonic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APPFabio Godoy
 
Contruindo Aplicações móveis com o Cordova e o Visual Studio
Contruindo Aplicações móveis com o Cordova e o Visual StudioContruindo Aplicações móveis com o Cordova e o Visual Studio
Contruindo Aplicações móveis com o Cordova e o Visual StudioWennder Santos
 
Usando PushWoosh com Ionic Framework
Usando PushWoosh com Ionic FrameworkUsando PushWoosh com Ionic Framework
Usando PushWoosh com Ionic FrameworkEmerson Thompson
 
Porque você deveria usar IONIC
Porque você deveria usar IONICPorque você deveria usar IONIC
Porque você deveria usar IONICDan Jesus
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Daniel Makiyama
 
Performance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsPerformance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsWaldyr Felix
 
Dafiti App Android: Um app robusto mas sem sair da moda!
Dafiti App Android: Um app robusto mas sem sair da moda!Dafiti App Android: Um app robusto mas sem sair da moda!
Dafiti App Android: Um app robusto mas sem sair da moda!Eduardo Lieuthier
 
Adobe phonegap / Cordova API
Adobe phonegap / Cordova APIAdobe phonegap / Cordova API
Adobe phonegap / Cordova APIYamil Lambert
 
Guia de sobrevivência: Edmodo para professores
Guia de sobrevivência: Edmodo para professoresGuia de sobrevivência: Edmodo para professores
Guia de sobrevivência: Edmodo para professoresEdgar Costa
 

En vedette (14)

Ionic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais RobustoIonic Framework - Parte 1 - Iniciando um Projeto mais Robusto
Ionic Framework - Parte 1 - Iniciando um Projeto mais Robusto
 
Ionic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APPIonic Framework - Configuração do ambiente e a criação da primeira APP
Ionic Framework - Configuração do ambiente e a criação da primeira APP
 
Contruindo Aplicações móveis com o Cordova e o Visual Studio
Contruindo Aplicações móveis com o Cordova e o Visual StudioContruindo Aplicações móveis com o Cordova e o Visual Studio
Contruindo Aplicações móveis com o Cordova e o Visual Studio
 
Usando PushWoosh com Ionic Framework
Usando PushWoosh com Ionic FrameworkUsando PushWoosh com Ionic Framework
Usando PushWoosh com Ionic Framework
 
Porque você deveria usar IONIC
Porque você deveria usar IONICPorque você deveria usar IONIC
Porque você deveria usar IONIC
 
Mobile Dev - Aplicativos
Mobile Dev - AplicativosMobile Dev - Aplicativos
Mobile Dev - Aplicativos
 
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
Aprendendo Na Prática: Aplicativos Web com HTML5, Angular.js, Twitter Bootstr...
 
Performance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.jsPerformance do ASP.NET Core, um comparativo com Node.js
Performance do ASP.NET Core, um comparativo com Node.js
 
Dafiti App Android: Um app robusto mas sem sair da moda!
Dafiti App Android: Um app robusto mas sem sair da moda!Dafiti App Android: Um app robusto mas sem sair da moda!
Dafiti App Android: Um app robusto mas sem sair da moda!
 
noSql - db4o
noSql - db4onoSql - db4o
noSql - db4o
 
Apps Android e Hibridas
Apps Android e HibridasApps Android e Hibridas
Apps Android e Hibridas
 
Adobe phonegap / Cordova API
Adobe phonegap / Cordova APIAdobe phonegap / Cordova API
Adobe phonegap / Cordova API
 
Cassandra Trip Brasil
Cassandra Trip BrasilCassandra Trip Brasil
Cassandra Trip Brasil
 
Guia de sobrevivência: Edmodo para professores
Guia de sobrevivência: Edmodo para professoresGuia de sobrevivência: Edmodo para professores
Guia de sobrevivência: Edmodo para professores
 

Similaire à Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic

Hands-on Cordova / Phonegap - GDG JF
Hands-on Cordova / Phonegap - GDG JFHands-on Cordova / Phonegap - GDG JF
Hands-on Cordova / Phonegap - GDG JFGiordano Bruno Vieira
 
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...Leonardo Melo Santos
 
Mobile Apps Cross-Platform
Mobile Apps Cross-PlatformMobile Apps Cross-Platform
Mobile Apps Cross-PlatformAdriel Café
 
Seminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec CafelândiaSeminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec CafelândiaDiego Cavalca
 
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Marcelo Marques Gonçalves
 
Adobe Phonegap
Adobe PhonegapAdobe Phonegap
Adobe Phonegapwlsilva
 
la 02Aula02 introdução phone_gap
la 02Aula02 introdução phone_gapla 02Aula02 introdução phone_gap
la 02Aula02 introdução phone_gapRoberson Alves
 
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile ServicesConstruindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile ServicesWilliam S. Rodriguez
 
Win302 daniel semedo_10 motivos para utilizar apache cordova (1)
Win302 daniel semedo_10 motivos para utilizar apache cordova (1)Win302 daniel semedo_10 motivos para utilizar apache cordova (1)
Win302 daniel semedo_10 motivos para utilizar apache cordova (1)Daniel Semedo
 
Oficina Intel XDK - VIII Semana de TI UNIVEM
Oficina Intel XDK - VIII Semana de TI UNIVEMOficina Intel XDK - VIII Semana de TI UNIVEM
Oficina Intel XDK - VIII Semana de TI UNIVEMDiego Cavalca
 
Dominando o Ionic Framework
Dominando o Ionic FrameworkDominando o Ionic Framework
Dominando o Ionic FrameworkJunior Abranches
 
Introdução a programação em Android
Introdução a programação em AndroidIntrodução a programação em Android
Introdução a programação em Androidilegra
 
Aplicativos Móveis: PWA, Instants Apps. Vamos entender?
Aplicativos Móveis: PWA, Instants Apps. Vamos entender?Aplicativos Móveis: PWA, Instants Apps. Vamos entender?
Aplicativos Móveis: PWA, Instants Apps. Vamos entender?Pedro Edson Silva Barros
 
Como integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testesComo integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testesMotorola Mobility - MOTODEV
 
Write once, run "everywhere"
Write once, run "everywhere"Write once, run "everywhere"
Write once, run "everywhere"Stefan Horochovec
 
Apresentação JAVOU 5
Apresentação JAVOU 5Apresentação JAVOU 5
Apresentação JAVOU 5Bruno Muniz
 
Hello world hybrid apps oportunidades com ionic framework v2
Hello world hybrid apps  oportunidades com ionic framework v2Hello world hybrid apps  oportunidades com ionic framework v2
Hello world hybrid apps oportunidades com ionic framework v2Ricardo Netto - MCP, MSP
 

Similaire à Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic (20)

Hands-on Cordova / Phonegap - GDG JF
Hands-on Cordova / Phonegap - GDG JFHands-on Cordova / Phonegap - GDG JF
Hands-on Cordova / Phonegap - GDG JF
 
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
Sencha Touch, RhoMobile, AppMobi e jQuery Mobile um comparativo entre platafo...
 
PhoneGap
PhoneGapPhoneGap
PhoneGap
 
Mobile Apps Cross-Platform
Mobile Apps Cross-PlatformMobile Apps Cross-Platform
Mobile Apps Cross-Platform
 
Seminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec CafelândiaSeminário de Desenvolvimento Mobile - Etec Cafelândia
Seminário de Desenvolvimento Mobile - Etec Cafelândia
 
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
Aplicativos hibridos-com-ionic-voce-tambem-pode-comecar-a-desenvolver-agora-t...
 
Adobe Phonegap
Adobe PhonegapAdobe Phonegap
Adobe Phonegap
 
React Native
React NativeReact Native
React Native
 
la 02Aula02 introdução phone_gap
la 02Aula02 introdução phone_gapla 02Aula02 introdução phone_gap
la 02Aula02 introdução phone_gap
 
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile ServicesConstruindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
Construindo Aplicativos móveis conectados com Xamarin e Azure Mobile Services
 
Win302 daniel semedo_10 motivos para utilizar apache cordova (1)
Win302 daniel semedo_10 motivos para utilizar apache cordova (1)Win302 daniel semedo_10 motivos para utilizar apache cordova (1)
Win302 daniel semedo_10 motivos para utilizar apache cordova (1)
 
Asso
AssoAsso
Asso
 
Oficina Intel XDK - VIII Semana de TI UNIVEM
Oficina Intel XDK - VIII Semana de TI UNIVEMOficina Intel XDK - VIII Semana de TI UNIVEM
Oficina Intel XDK - VIII Semana de TI UNIVEM
 
Dominando o Ionic Framework
Dominando o Ionic FrameworkDominando o Ionic Framework
Dominando o Ionic Framework
 
Introdução a programação em Android
Introdução a programação em AndroidIntrodução a programação em Android
Introdução a programação em Android
 
Aplicativos Móveis: PWA, Instants Apps. Vamos entender?
Aplicativos Móveis: PWA, Instants Apps. Vamos entender?Aplicativos Móveis: PWA, Instants Apps. Vamos entender?
Aplicativos Móveis: PWA, Instants Apps. Vamos entender?
 
Como integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testesComo integrar qualidade aos seus aplicativos através de testes
Como integrar qualidade aos seus aplicativos através de testes
 
Write once, run "everywhere"
Write once, run "everywhere"Write once, run "everywhere"
Write once, run "everywhere"
 
Apresentação JAVOU 5
Apresentação JAVOU 5Apresentação JAVOU 5
Apresentação JAVOU 5
 
Hello world hybrid apps oportunidades com ionic framework v2
Hello world hybrid apps  oportunidades com ionic framework v2Hello world hybrid apps  oportunidades com ionic framework v2
Hello world hybrid apps oportunidades com ionic framework v2
 

Curso de Desenvolvimento de Aplicativos Híbridos com PhoneGap/Cordova, e Ionic

  • 1. Desenvolvimento de Aplicativos Móveis Abordagem Híbrida: Aproveitando seus conhecimentos WEB junto com PhoneGap, Cordova, Angular e com foco no Ionic
  • 2. Felipe Blini - Tecnólogo em Desenvolvimento de Sistemas para Internet - Formado em 2006 pela Unoeste - Presidente Prudente/SP - Desenvolvendo Softwares desde 2004 - Experiência como dono de agência de TI de 2006 a 2009 - Experiência em uma Multinacional e no Governo - Experiência em diversas startups, sendo uma premiada internacionalmente - Experiência internacional no Chile, Alemanha, Espanha, Hungria e
  • 4. Aplicativos Híbridos = Aplicativo Web com Acesso Nativo
  • 5. Tipos de Aplicativos Móveis - Aplicativos Nativos - Online - Offline - HTML5 (Web App) - Site normal - acessa usando uma url - Progressive Web Apps - Web App Instalável - Aplicativos Híbridos - Site normal empacotado pelo Cordova, roda em uma WebView com acesso nativo a funcionalidades do SO
  • 6. Nativo, Web App ou Híbrido?
  • 8. Nativo (1 plataforma) - Aprendizagem - Investimento - Prazo Nativo (+ de 1 plataforma)- Manutenção - Versionamento - Evolução - Detecção e Correção bugs - Add e Remover Funcionalidades Híbrido - Aprendizagem (você já sabe) - Investimento - Prazo - Mão de Obra - Write once, run anywhere - Performance??? Web App - Engajamento - Desoretencioso - PWA
  • 9. Aplicativos híbridos são lentos? http://venturebeat.com/2012/12/13/facebook-android/#s:fb-android-3
  • 10. Nop!
  • 11. Porque HTML5? - Importância da web - Principal tecnologia - Mais popular - APIs e recursos mobile Estilizar Inteligência
  • 12. A WeLoveStarWars - Cliente: Loja física especializada em intens da série Star Wars - Querem um app que será instalado em tablets Android espalhados pela loja - Usuários do app: visitantes da loja que querem conhecer mais sobre todos os filmes do Star Wars: - Lista dos filmes - Para cada filme: - Personagens - Veículos
  • 13. Qual seria a melhor solução? - Não acessa recursos nativo - Não precisa de ultra performance - Deve ser instalado nativamente em tablets - Rodar apenas no Android - Prazo apertado - Orçamento baixo - Dados disponíveis em uma api web - Web App instalável para Android (PhoneGap) Requisitos: Resposta:
  • 14. Workflow - Aplicativo Móvel 1)Mockup das Telas 2)Protótipo 3)Desenvolvimento 4)Testes no Browser* 5)Testes em Emuladores 6)Testes em Devices 7)Entrega (instalar nos tablets)
  • 15. Workflow de Teste App PhoneGap 1) Teste o tanto que der no navegador (ambiente limitado) 2) Teste no PhoneGap Developer App 3) Use PhoneGap Build online e instale o app no device Debug - Chrome e Safari - Weinre (http://docs.phonegap.com/references/developer-app/debugging)
  • 16. Aparência e Comportamento de App - Aplicativos móveis têm que ter - Navbar - Statusbar customizada - Botão voltar - Área de renderização de conteúdo - Ícone e Splash Screen - Componentes UI otimizados para Touch Screen - Aplicativos móveis são - SPA (Single Page Aplications) com transições entre telas - Aplicativos móveis híbridos - Respeitam essas regras
  • 18. Mockup Pencil (desktop - free) - Ionic Creator (web - freemium) - Moqup (web - freemium)
  • 20. Mão na massa - Protótipo testar - empacotar - instalar - entregar
  • 21. Fixando o Aprendizado 1 1)Em um editor de texto, crie o projeto e estrutura de pastas usada] 2)Crie um arquivo index.html com a estrutura mostrada em estrutura.txt 3)Adicione as marcações HTML do index.html de exemplo 4)Referencie as bibliotecas de terceiros da pasta vendors 5)Instale o PhoneGap Desktop na sua máquina 6)Crie um novo projeto PhoneGap e copie os arquivos na pasta www 7)Rode o servidor do PhoneGap
  • 22. O cliente gostou! Bora desenvolver, mas espera! Mundo WEB != Mundo Mobile Estude Mobile e prepare-se Mundo Mobile Híbrido == Mundo Mobile Mesmo ambiente de desenvolvimento, UX deve ser a mesma Mundo do Carro Híbrido == Mundo do Carro Normal O ambiente de desenvolvimento é o mesmo, mesma UX
  • 24. - Java Development Kit (JDK) - Android SDK - SDK Packages - Android Studio - Genymotion - MAC e um device com iOS 8 - iOS SDK - Xcode - Windows 8 Pro 64 bits - WP8 - Windows Phone SDK - Visual Studio 2012 Ambiente de Desenvolvimento Mobile
  • 25. Preparando o Ambiente para Desenvolvimento Android https://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html - Java Development Kit (JDK) - Android SDK - Android Studio - Adicionar o Pacote SDK para a versão da API desejada - Genymotion (alternativa para o emulador do Android Studio) - Configurar Variáveis de Ambiente JAVA_HOME e ANDROID_HOME e diretórios 'tools' e 'platform-tools' do Android SDK - java -version
  • 26. Preparando o Ambiente para Desenvolvimento iOS https://cordova.apache.org/docs/en/latest/guide/platforms/ios/index.html - Mac rodando OS X 10.9 ou superior - iOS 8 SDK (incluído OS X) - Xcode 6.0 ou superior (gratuito) - iPhone 4s ou superior ou iPad 3 ou iPod Touch geração 5 - Publicar na App Store: exige Xcode e uma conta de desenvolvedor que custa $99 anuais.
  • 27. Preparando o Ambiente para Desenvolvimento Windows Phone https://cordova.apache.org/docs/en/latest/guide/platforms/wp8/index.html - Windows 8.1 ou superior, na versão Pro 64 bits. - Visual Studio - Para emular: processador Intel moderno com suporte a Hyper-V; - Windows Phone 8 registrado na SDK e intalar o app pelo Desktop - Publicar na WP Store: via Web, exige uma conta de desenvolvedor, custa $19 por ano.
  • 28. Mão na massa: Integrar o app à API Web PhoneGap CLI - $ phonegap create - $ phonegap serve - $ phonegap plugin - $ phonegap platform - $ phonegap build - $ phonegap run - $ phonegap run --emulator - $ phonegap emulate
  • 29. Fixando o Aprendizado 2 1) Configure o Ambiente Java e Android e o teste o ambiente 2) Instale o Node e o NPM e teste a instalação 3) Instale e teste o Git 4) Instale o PhoneGap CLI e teste 5) Crie um novo projeto PhoneGap através do CLI e rode e visualize no Browser 6) Abra o projeto em um editor de texto e teste o Livereload do PhoneGap 7) Pare o servidor, exclua o conteúdo da pasta www e transfira os arquivos do projeto 8) Exclua os plugins e plataformas adicionados pelo PhoneGap e adicione o plugin whitelist e a plataforma Browser (sempre registrando no config.xml) 9) Integre o código à API web (cole o codigo js e comente onde a api está sendo consultada)
  • 30. Nova Funcionalidade para a WeLoveStarWars - Cliente gostou e deseja agora um leitor de QR Code para ler o código de baras dos itens e mostrar uma descrição de cada personagem à venda na loja. App em fullscreen e apenas modo retrato Requisitos Funcionais: - O cliente vai gerar QR Codes com os IDs dos personagens que estão no BD e colar nos itens - Os clientes da loja vão levar esses items até o tablet, escolher a opção ‘escanear personagem’ - O app vai ler o QR Code e abrir uma tela com a descrição do personagem
  • 31. Requisitos - Acessar a funcionalidade nativa de leitor de código de barras - Criar nova View e novo código consultando a API web - Apenas para Android e apenas para os tablets da loja Considerações: - Funcionalidade simples e o Cordova tem um plugin pronto - Já temos o projeto integrado no Cordova - Nosso código já está bem complexo com apenas 2 views
  • 32. Qual seria a melhor solução?? - Continuar no híbrido? - Partir pro nativo?
  • 33. - Aplicativo Híbrido - SPA com Angular - Acesso nativo com o Cordova - Gerenciar as dependências com Bower e Gulp ou Grunt
  • 34. Aplicativo Híbrido - Relembrando o Conceito Código web rodando de maneira embarcada dentro de uma plataforma nativa, COM ACESSO a recursos e funcionalidades nativas. O que a gente vai precisar? - Acesso às APIs nativas - Cordova - Acesso à API Web - $http Angular - Sistema de SPA - Angular - Aparência de app Android - Materialize
  • 35. Acesso às APIs nativas: Obrigado Cordova! https://cordova.apache.org/docs
  • 36. PhoneGap e Cordova - História e Eliminando Confusão Código Open-Source Produto e Serviços 1 dos serviços do PhoneGap PhoneGap: Distribuição Open Source do Cordova (http://phonegap.com)
  • 37. 1 código-fonte Rodando em todas plataformas Write Once, Run Anywhere Cordova
  • 39. Cordova: Arquitetura > Webview - Componente Nativo - Navegador enxuto (sem interface) - Tem acesso as APIs nativas do device - Invólucro da nossa app - Cordova app = são Embedding WebViews - Cordova cria e chama uma nova WebView com poderes especiais para cada plataforma - Android WebViews
  • 40. Cordova: Arquitetura > Webview Motor de Renderização de HTML
  • 41. Cordova Mistura tecnologias web (JavaScript) com componentes nativos (WebView) que pode acessar APIs do nível do device. Acesso nativo ao device com JavaScript: - Battery Status - Camera - Contacts - File - Geolocation - Media Capture - Vibration - Network Information - etc JavaScript Cordova Interpretador Código Nativo (Ponte)
  • 42. Cordova: Arquitetura > Web App - Onde o código reside - Criado como uma página web - Executado dentro de uma WebView - config.xml
  • 43. Cordova: Arquitetura > Plugins - Parte integral do Ecossistema do Cordova - Encapsula código JavaScript que acessa as APIs nativas - Interface de comunicação entre o Cordova e componentes nativos - Permite invocar código nativo através de JavaScript - Provê plugins principais e vários outros criados pela comunidade (https://cordova.apache.org/plugins/) - Pode criar seus próprios plugins - Todo plugin deve ser explicitamente adicionado no projeto
  • 45. Ciclo de Vida da Aplicação Cordova - Igual às Activities Lifecycle - Apps contém diversas Activities - Webview: é um activity
  • 47. O Arquivo config.xml Configurações globais do app e para plataformas específicas - Nome do app, ícone, splash screen, autor, descriçao do app - Permissoes do app, versões das plataformas - Preferências (globais ou por plataforma): - Orientação, fullscreen, cor de fundo, overscroll. - <preference name=”Orientation” value=”portrait” /> (global) - <platform name=”android”> <preference name=”Overscroll” value=”false” /> </platform http://docs.build.phonegap.com/en_US/configuring_preferences.md.html (configurando preferências)
  • 48. O Arquivo config.xml > ícone e splash screen - Criar os arquivos e apontar o caminho no config.xml - <icon src=”resources/icon.png” width=”” height=”” /> - <splash src=”resources/spash.png” width=”” height=”” /> - Adicionar plugin Splash Screen - <preference name="SplashScreenDelay" value="2000" /> - <preference name="FadeSplashScreenDuration" value="2000" /> - Criar, exportar e registrar TODAS imagens para as diversas plataformas,
  • 49. Ícones e Splash Screen > Arquivo base icon.png splash.psd
  • 50. Mão na massa: Ionic Resources
  • 51. Fixando o aprendizado 3 - Ionic Resources 1)Exclua os icones e splash do config.xml 2)Instale o Ionic 3)Converta o projeto para um projeto Ionic 4)Exclua a pasta www/res 5)Crie a pasta ./resources 6)Crie os arquivos base icon.png e splash.psd 7)Gere os arquivos com o Ionic Resources
  • 52. O Arquivo config.xml > engines - Plataformas que o app dá suporte - Controla a pasta platforms - Útil para outros desenvolvedores da equipe - Importante para versionadores como o Git (não deve ser versionada) - <engine name=”android” spec=”5.0.0” /> - <engine name=”ios” spec=”4.0.1” /> $ cordova platform add android --save $ cordova prepare
  • 53. O Arquivo config.xml > plugins - Plugins que o app depende - Controla a pasta plugins - Útil para outros desenvolvedores da equipe - Importante para versionadores como o Git (não deve ser versionada) - <plugin name=”cordova-plugin-whitelist” spec=”~1.2.2” /> $ cordova plugin add cordova-plugin-whitelist --save $ cordova plugin rm cordova-plugin-whitelist --save $ cordova plugin ls
  • 54. Mais sobre o Cordova - Plataformas https://cordova.apache.org/docs “É muito importante conhecer bem como funciona o Cordova na plataforma que vc está desenvolvendo”
  • 55. Angular - O Framework Font-end da Google - Muito mais que um simples SPA - Framework Front-end Completo - Manipulação do DOM (foco na RN) - Separação de Interesses no Front-end (MVC), testes de unidades - Concistência entre a Visão e o Modelo - Injeção de Dependências - Services e Factory - Diretivas
  • 56. Porque Angular? - Google e Microsoft - Comunidade - Curva de Aprendizado - MVC feito do jeito certo - Pronto pra testes de unidade - Integração com bibliotecas - Material Design (Angular Material) - Bootstrap (angular.bootstrap) - Google Maps (NgMap)
  • 59. Angular: MVC Modelo = objeto $scope Visão = HTML Controlador = Angular Controller Service/Factory Dados Trata os Dados
  • 60. Angular: Controller $scope busca os dados em um -> Factory -> Controller manipula e envia -> View onde o conteúdo (dados) e injetado Executado apenas quando necessário $scope = two-way data binding Caminho inverso: View recebe dados do usuário ($scope) -> Controller valida e trata -> envia para um Service (Factory)
  • 61. Angular: View HTML, recebe dados do usuário e é “colada” (binding) com o Controller através do objeto $scope - Habitat das Diretivas do Angular
  • 62. Angular: Model e Angular Expression (AE) Model é o objeto $scope: a “cola” entre a view e o controller - Two-way Data Binding - POJO Angular Expression (AE) é representada por {{ }}, então: No Controller: $scope.nomeFruta = “banana”; No HTML: <p>Fruta: {{ nomeFruta }}</p>
  • 63. Angular: Directives - HTML (atributos ng-*) - ng-app - ng-model - ng-controller - ng-repeat - filter
  • 64. Demo
  • 65. Angular: Directives - HTML (atributos ng-*) - ng-hide - ng-show - ng-if - ng-click, ng-blur, ng-mouseover…. (e todos os outros eventos do JavaScript)
  • 66. Demo
  • 67. Angular: Factory modulo.factory('myFactory', function() { // factory sempre retorna um objeto // pode executar código antes var someText = “How are you?”; return { sayHello : function(name) { return "Hi " + name + "!" + someText; } } });
  • 68. Angular: Services app.service('myService', function() { // service é um objeto que quando injetado é instanciado implicitamente com a palavra-chave new this.sayHello = function(name) { return "Hi " + name + "!"; }; }); Serviços prontos pra uso: $http, $timeout, $interval, $log ... Pedaços de lógica de negócios reutilizáveis por toda a aplicação
  • 69. O Serviço $http - Injetado como qualquer outro artefato do Angular - Recebe como parâmetro um objeto: - { method: método utilizado, pode ser GET, POST, PUT ou DELETE url: endereço do recurso acessado data: objeto no qual cada propriedade será um parâmetro na requisição } - $http({method: 'GET', url: '/filmes/'}); - $http.get(‘url’) e $http.post(‘url’)
  • 70. O Serviço $http não retorna dados O que seria isso: $http({method: 'GET', url: '/filmes'}, function(resposta) { var dados = resposta; // dados é um array pronto pra ser usado }); É isso: var dados = $http({method: 'GET', url: '/filmes'}); console.log(dados); // exibe undefined A variável dados é uma promise e tem a promessa de conter dados em um futuro próximo, assim podemos seguir em frente sabendo que ele vai cumprir a promessa
  • 71. O Padrão Promise Como na vida real, ao receber uma promessa de alguém, seguimos nossa vida sabendo que ela pode ser cumprida ou não, por isso a promise tem estados: - Fullfiled: a promessa foi cumprida - Rejected: promessa rejeitada (fudeu, a pessoa disse que não vai cumprir) - Failed: nem cumprida e nem rejeitada (fudeu, deu um erro e a pessoa morreu) Promises têm um método then() e catch();
  • 72. Funções Catch, Success e Error do $http promise.success(function(data, status, headers, config) {}) .error(function(statusText, status, headers, config) {}); Fullfiled Rejected ou Failed var promise = $http({method: 'GET', url: '/filmes'}); promise.then(function() {}, function() {}); Fullfiled Rejected ou Failed promise.then(function() {}).then(function() {}).then(function() {}).catch(function() {}); Fullfiled Fullfiled Rejected ou Failed
  • 73. Demo
  • 74. ngAnimate - Adiciona ou remove classes pré-definidas para um conjunto de diretivas, sendo elas: - ng-show - ng-hide - ng-class - ng-view - ng-include - ng-repeat - ng-if - ng-switch https://docs.angularjs.org/api/ngAnimate http://www.w3schools.com/angular/angular_animations.asp Adiciona ou remove a classe ng-hide Adiciona a classe ng-enter quanto entra no DOM E a classe ng-leave quanto sai no DOM Use essa funcionalidade para adicionar propriedades de animação no CSS
  • 75. Angular: Custom Directives modulo.directive(“minhaDiretiva”, function() { return { templateUrl: “estrelas.html”, restrict: [“ACEM”], link: function(scope, iElement, iAttrs) { } } }); “A” <div minha-diretiva /> “E” <minha-diretiva /> “C” <div class=”minha-diretiva”> “M” <!-- minha-diretiva --> https://docs.angularjs.org/guide/directive
  • 76. Demo
  • 77. App Mobile sem CDN, por favor! - Entrar nos sites de cada biblioteca - Fazer download - Descompactar - Adicionar em uma pasta dentro do projeto - Referenciar no HTML - Identificar dependências e adicioná-las também - E depois pra minificar e juntar como o nosso JavaScript’s e CSSs??
  • 78. - Toda tarefa repetitiva e sem criatividade, robôs podem fazer pra nós Gulp 1) Define tarefas com gulp.task() 2) Procura por mudanças em arquivos com gulp.watch() 3) Abre arquivos/diretório com gulp.src() 4) Cospe arquivos/diretorios com gulp.dest() Usa sequências de pipe() O Ionic usa o Gulp!
  • 79. Com ajuda do Bower 1) Instalar e remover dependência com o Bower 2) Toda vez que o bower.json mudar, atualizar as referências no HTML 3) Separar arquivos de Desenvolvimento dos de Deploy 4) Integrar essas mudanças com o Livereload do Ionic Serve a) Sempre que alterar um arquivo Dev fazer o deploy na hora 5) Achar todos arquivos JavaScript referenciados no HTML a) Minificar (Uglify) b) Juntar em 1 arquivo só c) Salvar em algum lugar
  • 80. Demo
  • 81. Rotas Conectam Views e Controllers através de URLs e/ou Estados - Rota padrão do Angular: ngRoute - Organizadas por URLs - A View é sempre injetada no mesmo lugar pré-definido - Ionic usa uma rota mais flexível: UI-Router - Organizada por states da aplicação e opcionalmente por URLl, e comportamentos - Pode conter mais de 1 view na mesma rota que são injetadas em lugares distintos - Um state é como a UI se parece e o que ela está fazendo em um certo momento
  • 82. UI Router - Padrão do Ionic UI-Router is a client-side router for single page web applications. Roteador client-side atualiza a URL do browser assim que o cliente navega pela SPA e mapeia funcionalidades em states e URLs (opcional)
  • 83. UI Router - Trabalha com states <!-- na index.html --> <body ng-controller="MainCtrl"> <section ui-view></section> </body> // no arquivo de coniguração de rotas $stateProvider.state('contacts', { template: '<h1>My Contacts</h1>' }) Templates são injetados nos estados pais (<ui-view>). Um state é ativado com o comando $state.go() , em um links dentro de ui-sref=”” ou navegando pra uma url com um estado associado Top level state
  • 84. UI Router Assinando um Controller a um template: $stateProvider.state('contacts', { template: ..., Controller: function($scope) { $scope.title = ‘Contacts’ } }) Alternativamente pode-se adicionar a sintaxe ‘controller as’ $stateProvider.state('contacts', { template: ..., controller: 'ContactsCtrl', controllerAs: 'contact' }) $stateProvider.state('contacts', { template: ..., controller: 'ContactsCtrl as contact' }) ou
  • 85. UI Router > Resolve Objects e Custom Datas - Data: Injeta no Controller dados específicos do state - Resolve: Resolve dependências (objetos) e injeta no Controller - Devem ser resolvidos - bloqueiam acesso $stateProvider.state('contacts', { template: ..., controller: 'ContactsCtrl', resolve: { autentica: function($http){ // $http returns a promise for the url data return $http({method: 'GET', url: '/someUrl'}); } }, data: { customData1: 44 } }) controller: function($scope, $state, autentica) { $scope.autenticado = autentica.data; console.log($state.current.data.customData1) }
  • 86. UI Router > Eventos onEnter e onExit $stateProvider.state('contacts', { template: ..., controller: 'ContactsCtrl', resolve: { autentica: function($http){ // $http returns a promise for the url data return $http({method: 'GET', url: '/someUrl'}); } } onEnter: function(title){ if(autentica.data){ ... do something ... } }, onExit: function(title){ if(autentica.data){ ... do something ... } } }) Outros eventos:https://github.com/angular-ui/ui-router/wiki#state-change-events - Chamados antes de entrar ou sair de um state - Têm acesso a todas às dependências do Resolve
  • 87. UI Router > Nested States e Nested Views States podem ser aninhados com outros states .state('contacts.list', {}) ou parent: 'contacts' O state list é filho do state contacts e herda apenas os resolvers e custom datas http://goo.gl/kOG3je. Quando o list é ativado o contacts é implicitamente ativado também <ui-view> <ui-view> Template da list Template da contacts index Contacts.list é ativado
  • 88. UI Router > Abstract States Usado nos starters Sidemenu e Tabs do Ionic Ativados implicitamente quando quando ativamos filhos Não podem ser ativados sozinhos Úteis para qualquer tipo de herança entre todos os filhos: - Templates - Resolvers - Custom Datas - Controller - $scope
  • 89. UI Router > Multiple Named Views https://github.com/angular-ui/ui-router/wiki/Multiple-Named-Views <!-- index.html --> <body> <div ui-view="filters"></div> <div ui-view="tabledata"></div> <div ui-view="graph"></div> </body> $stateProvider .state('report',{ views: { 'filters': { templateUrl: 'report-filters.html',controller: ‘RCtrl’ }, 'tabledata': { templateUrl: 'report-table.html', controller: ‘TRCtrl’ }, 'graph': { templateUrl: 'report-graph.html', controller: ‘GRCtrl’ } } }); Usado no starter Tabs do Ionic
  • 90. UI Router > URL Routing Ideal para passar parâmetros: $stateProvider .state('contacts.detail', { url: "/contacts/:contactId", ou url: "/contacts/{contactId}" e ainda url: "/contacts/{contactId:int}" templateUrl: 'contacts.detail.html', controller: function ($stateParams) { // If we got here from a url of /contacts/42 expect($stateParams).toBe({contactId: "42"}); } }) https://github.com/angular-ui/ui-router/wiki/URL-Routing
  • 91. UI Router > URL Routing e Nested Views juntos Combina a URL do filho com a do pai $stateProvider .state('contacts', { url: '/contacts', ... }) .state('contacts.list', { url: '/list', ... }); https://github.com/angular-ui/ui-router/wiki/URL-Routing 'contacts' state é acessado com "/contacts" 'contacts.list' state é acessado com "/contacts/list".
  • 92. UI Router > Organizando States var contactState = { name: 'contacts', url: "/contacts/:contactId" templateUrl: 'contacts.detail.html', Controller: ContactController }; $stateProvider.state(contactState);
  • 93. UI Router > Principais Componentes e Documentação $state / $stateProvider: Gerencia as definições e comportamentos dos states Diretiva ui-sref: Equivalente ao href ou ng-href dos elementos <a /> com excessão que o valor será o nome de um state. Adiciona implicitamente o href de acordo com a URL associada no state. <ui-view />: Renderiza a view definida no state atual. Pode se dizer que são Placeholders. - Ionic: <ion-nav-view /> - Angular (ngRoute): <ngview /> $urlRouter / $urlRouterProvider: Gerencia a lista de rotas e regras de rotas procurando em todas qual é a que combina com a que está sendo requisitada. Executa sempre que há uma mudança de state. https://github.com/angular-ui/ui-router/wiki/The-Components (descrição dos componentes) http://angular-ui.github.io/ui-router/site/#/api/ui.router (documentação do UI Router)
  • 94. Angular Methods: Run e Config - Config é executado antes de tudo (um ótimo lugar para configurar rotas) - Run é executado depois do config() e antes do resto
  • 95. Mão na massa: Adicionando Rotas
  • 96. Opções de Desenvolvimento com Cordova 1) PhoneGap - Instale o PhoneGap - Cria as telas HTML - Referencia o script do cordova <script src=’cordava.js’ /> - Criar seus próprios CSS e JS - Adiciona plugins do Cordova no JS - Faz o build online no PhoneGap Build ou pela linha de comando 1.2) Adicione bibliotecas 2) Ou use Frameworks
  • 97. Alternativas para Desenvolvimento Nativo com JS http://felipeblini.net/Desenvolvimento-de-Aplicativos-Moveis-com-Javascript-Ionic-React-Native-e-NativeScript
  • 98. UI em Aplicativos Híbridos Multi-plataforma Platform Agnostic!
  • 99. http://ionicframework.com Free and open source, Ionic offers a library of mobile-optimized HTML, CSS and JS components and tools for building highly interactive native and progressive web apps. Built with Sass, optimized for AngularJS.
  • 101. - Escrito em cima do Angular (MVC, SPA, $http, ID, etc) - Performance (animações UI) - Componentes visuais focados em mobile e touch screen - Documentação completa - Suporte da comunidade e individual para empresas - Muito fácil de aprender e começar
  • 102. Ionic Bundle ionic.bundle.js Concatenação do - ionic.js - Angular.js - Angular-animate.js - Angular-sanitize.js - Angular-ui-router.js
  • 103. - Ecossistema (Ionic Platform) - Ionic View - Ionic Creator - Ionic Market - Ionic CLI - Cordova CLI
  • 104. - Sistema de Grid em FlexBox - Botões - Listas - Cards - Ícones (http://ionicframework.com/docs/v2/ionicons/) - Formulários e muitos outros... - Disponíveis em SASShttp://ionicframework.com/docs/components/ Componentes do Ionic
  • 105. Componentes do Ionic <ul class="list"> <li class="item"> … </li> </ul> <ion-list> <ion-item> … </ion-item> </ion-list> ou http://ionicframework.com/docs/components/ São diretivas criadas com Angular, como qualquer outra
  • 106. Diretivas de navegação <ion-header-bar>: Header fixo. Título e dois botões <ion-nav-button> <ion-nav-bar>: Navegação no header. Ela que muda o título da <ion-nav-bar> e cuida dos headers das Views injetadas. Define o(s) <ion-nav-button> do header <ion-nav-button>: Adiciona-se 2 na <ion-nav-bar>. O primeiro vai pra esquerda e o segundo pra direita (back-button e toggle menu por exemplo) <ion-nav-back-button>: Botão voltar. Deve estar dentro da <ion-nav-bar> <ion-refresher> Atualiza o <ion-content > quando ocorre um overscroll <ion-infinite-scroll> Atualia o <ion-content> quando o limite de scroll for atingido
  • 107. <ion-pane>: Similar a uma <div> <ion-view>: Define uma nova View. Será injetado no <ion-nav-view> - hide-nav-bar: Propriedade da <ion-view> que esconde ou não a <ion-nav-bar> - hide-back-button: Propriedade da <ion-view> que esconde ou não o <ion-nav-back- button> <ion-nav-view>: Extensão da <ui-view> do UI Router. Semelhante ao <ng-view> do Angular. Onde o conteúdo da <ion-view> é injetado <ion-content>: Conteúdo da View. Gerencia conteúdos. Possui uma classe CSS "has-header" que é adicionada automaticamente caso exista uma <ion-header-bar> por perto Diretivas de navegação
  • 108. Nosso primeiro app com Ionic - Instalando o Ionic - Ionic CLI - Scaffolding de Templates - Códigos Boilerplates do Ionic - Gerenciador de aps (https://apps.ionic.io/apps) - O Ionic View (http://docs.ionic.io/tools/view/) - O Ionic Creator (https://creator.ionic.io)
  • 109. Mão na massa: Enfim Ionic...

Notes de l'éditeur

  1. O QUE É HIBRIDO
  2. HIBRIDO NO MUNDO MOBILE
  3. Talvez no futuro o cenario web seja suficiente pra muitos tipos de aplicativos
  4. Não é uma escolha crucial, híbrido quase sempre é o suficiente
  5. Pontos fortes e fracos entre app e web, decisao nao crucial Qual plataforma vc quer atacar? (Android, IOS, WP) Web: busca de conteudo despretenciosamente Nao exige compromisso do usuario Engajamente mais dificil Nao tem instalacao Nao tem experiencia nativa Nativo: Oferece experiencia nativa a cada plataforma Causa maior engajamento App que exigem bastante processamento, multithreading, apps que precisam ficar rodando servicos em background (consome mta bateria) Hibrido Suficiente na maioria dos casos O cordova nps da muitos recursos pra desenvolvermos uma app mas eh claro que no nativo vc tem acesso a muito mais possibilidades de desenvolvimento, se vc tiver bastante prazo, orcamento e uma equipe especializada em cada plataforma, pode ser mais interessante ir pro nativo
  6. Eles rodam em uma webview que é um interpretador de html, css e js, e isso é inerentemente mais lento do que qualquer coisa feita nativamente na plataforma, isso é um fato. O que precisamos fazer é cercar o maior quantidade possível de gargalo, criar um js performático pra ter uma performance aceitável. E fato é: a maioria dos app náo precisam de ultra performance, só precisam parecerem rápidas Estrategia mista: primeiro HTML5 hibrido (prototipo, testes), depois nativo (entregando parcialmente pra cada plataforma), webapp tambem
  7. Existe apps com phonegap que receberam destaque na app store
  8. Prática: apenas pra demonstrar que qualquer código html, css e js simples ou complexo pode ser empacotado pelo Cordova e rodar como uma app nativa Escrever código PhoneGap Desktop PhoneGap Developer App PhoneGap Build (online) Entregar http://google.github.io/material-design-icons/ (tutorial como disponibilizar os icones localmente) https://design.google.com/icons/ (todos os icones com codigo numerico)
  9. PhoneGap Desktop App: http://phonegap.com/getstarted/ PhoneGap Mobile App
  10. gerenciamento de memória, concorrências entre threads, deploy nas lojas de aplicativos, experiência do usuário na hora do download/instalação, capacidades de cada plataforma mobile e experiência do usuário
  11. MESMO AMBIENTE DEVE SER CONFIGURADO
  12. https://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html c:/Users/blini/AppData/Local/Android/SDK Download Java: http://goo.gl/WZATRd Configuração Java no Windows: http://goo.gl/dr86Bq Download Android SDK (Android Studio): http://goo.gl/3LzYa6 Download Genymotion: http://genymotion.com/download npm install -g phonegap ANDROID_HOME = C:\Users\blini\AppData\Local\Android\sdk JAVA_HOME = C:\Program Files\Java\jdk1.8.0_92 Path: %JAVA_HOME%\bin %ANDROID_HOME%\tools %ANDROID_HOME%\platform-tools (java -version, ) Javac -v Java -version Adb version
  13. https://cordova.apache.org/docs/en/latest/guide/platforms/ios/index.html A partir do Xcode 7 o teste no device é gratuito, soh abrir a aplcação e dar um play Sem MAC: Nós precisamos buildar o projeto, gerar as chaves de desenvolvedor, usar emulador do iOS, executar no aparelho de testes e publicar na App Store da Apple. Buildar: é possível usar o PhoneGap Build para isso, mas é necessário gerar as chaves do desenvolvedor em um Mac; Geração das chaves: com alguns hacks, é possível hoje em dia gerar as chaves no Windows se tiver a conta paga da Apple Testar no dispositivo: se usar o PhoneGap Build com suas chaves, é possível instalar no aparelho usando iTunes Publicar na loja e emular somente com MAC
  14. https://cordova.apache.org/docs/en/latest/guide/platforms/wp8/index.html Exige Windows para Emular, registrar o aparelho e testar no aparelho No MAC: pode instalar o Window em uma máquina virtual ou em uma partição, é permitido tanto pela Microsoft quanto pela Apple No Linux: Basicamente, você só consegue desenvolver para Android. Se quiser iOS, vai precisar de Mac. Se quiser Windows Phone, vai precisar de Windows.
  15. http://materializecss.com/ Instalar node Instalar PhoneGap e Cordova CLI Instalar o Git Configurar ambiente Android http://swapi.co/api/ Desenvolver código Run Browser Emular Debug no Chrome Rodar no Device Build PhoneGap CLI Entregar Ambiente Java e Android Configurado Emulador Genymotion Dispositivo Android Google Chrome no Desktop
  16. https://cordova.apache.org/plugins/
  17. Prática: Nova Funcionalidade WeLoveStarWars Cordova
  18. Prática: Web App WeLoveStarWars Cordova Grunt ou Gulp Bower GitHub Angular Materialize materializecss.com
  19. O que a gente precisa pra desenvolver app moveis normalmente? Comunicar com as APIs nativa dos devices - Cordova Sistema de SPA comunicando com uma Web API onde estão os dados: frameworks como Angular, React, JQuery Mobil, Zepto, etc… Aparência de app e transições de tela: bibliotecas css (Materialize, Bootstrap, etc...)
  20. Nao precisamos aprender as linguagens e builds pra cada plataforma
  21. Adobe Systems purchased Nitobi in 2011, rebranded it as PhoneGap, and later released an open source version of the software called Apache Cordova PhoneGap Main Services (que nos interessam): PhoneGap Build PhoneGap Desktop PhoneGap Developer PhoneGap CLI Hydration Debug Remoto com Weirne Assinatura dos binarios WP: o aparelho precisa estar registrado e comprar uma uma conta de developer microsoft iOS: Certificados da apple pra fazer o build, pra isso deve comprar uma conta de desenvolvedor e ter um mac com Xcode pra gerar as chaves Android: tranquilo PhonGap Build: Toda a infraestrutura necessaria na nuvem pra fazer o build para cada plataforma, sem a necessidade de ter um Mac ou um Windows
  22. Cordova applications are ordinarily implemented as a browser-based WebView within the native mobile platform Podemos criar webviews na mao atraves das apis nativas para rodar nossos codigos html, mas eh mto dificil de criar uma webview dada as peculiaridades de cada prataforma, o que o cordova faz pra nós é criar uma webview cross-platform Todas as plataformas móvel oferecem É relativamente simples criar e chamar uma webview com o código nativo para executar um html, mas não é fácil uma webview cross-platform Exemplo: facebook PhoneGap Build: Cria o código nativo que chama uma webview usando o Cordova Empacota tudo em 1 aplicativo - tanto a parte nativa de chamar uma webview quanto todo o nosso codigo html, css e js
  23. Muitas apps usam webview para renderozar html dentro do seu fluxo Cordova inovou ao renderizar uma app inteira dentro de uma webview
  24. O cordova tem um conjunto de APIs que faz a inteface com a WebView usando JavaScript e depois conversa com o device na sua linguagem nativa, provendo uma ponte entre os dois
  25. Sempre ter em mente qual plataforma vc quer dar suporte
  26. An activity is a single, focused thing that the user can do Native Android apps typically consist of a series of activities that the user interacts with Cordova applications on the Android platform are executed within a Webview that is embedded in a singleAndroid activity. The lifecycle of this activity is exposed to your application through the document events that are fired
  27. This container has a very crucial file - config.xml file that provides information about the app and specifies parameters affecting how it works, such as whether it responds to orientation shifts. Config.xml: Configurar o PhoneGap Build: config.xml Nome, Id, version, author, description Orientacao Barra de status no topo Permissoes Icone e splash screen plugins Restringir versoes do android (Android 2 tinha webview com muito bug) usar versao minima da SDK como 16 http://docs.build.phonegap.com/en_US/configuring_preferences.md.html
  28. Trabalhoso fazer na mao Iphone: 16 icones e 10 splash screen Android: 6 icones e 12 splash screen
  29. Usando o servico do ionic: Icone.png deve ser quadrado, o desenho ocupar quase toda a área útil, sem bordas arredondadas e no mínimo 192x192 px Splash screen também deve ser quadrado e bem grande, recomendo 4096px, desenho centralizado e longe das bordas http://ionicframework.com/docs/cli/icon-splashscreen.htm l
  30. Outros desenvolvedores que irão trabalhar junto saberão quais as plataformas que o app dá suporte e poderão fazer build e adicionar as plataformas no seu ambiente de desenvolvimento Pasta platforms tem muitos arquivo, é pesado para armazenar em versionadores e compartilhar em repositórios online com o GitHub, nao comitar tbm a pasta plugins Spec e opcional e define a versão do android ou ios $ cordova prepare (instala as plataformas presentes no xml) $ cordova platform add android --save (adiciona a platforma android e registra o engine android no xml) $ cordova platform save (adiciona as plataformas que já estão instaladas mas não estão registradas no xml)
  31. Outros desenvolvedores que irão trabalhar junto saberão quais as plataformas que o app dá suporte e poderão fazer build e adicionar as plataformas no seu ambiente de desenvolvimento Pasta plugins tem muitos arquivo, é pesado para armazenar em versionadores e compartilhar em repositórios online com o GitHub, nao comitar tbm a pasta plugins Spec e opcional e define a versão do android ou ios $ cordova plugin add cordova-plugin-whitelist --save (add e salva no xml) $ cordova plugin rm cordova-plugin-whitelist --save (remove e atualiza xml) $ cordova plugin ls (lista pliugins na pasta plugins) $ cordova plugin save (adiciona os plugins adicionados que nao estão no xml)
  32. verify which version of the JDK you have: open a command line and type javac -version. If the JDK is not available or the version is lower than 1.8, download the Java SE Development Kit 8 É muito importante conhecer muito bem como funciona o cordova na plataforma que vc está desenvolvendo
  33. A web hoje está muito mais voltada ao front-end que o back-end O quanto manutenível está nosso código? (próximo slide)
  34. O quão fácil está fazer alterações no html? Nós precisamos fazer separações entre requisições ajax, marcação de html e regras e negócio Pedaços de software independente e reutilizáveis Um não interfere o outro e um não quebra o outro!
  35. Objeto $scope pega os dados de um Service, o Controller trabalha com esses dados e envia para a View MVC - dados no Model, Controller acessa eeses dados, trata e envia pra View. A view recebe dados do usuário, manda pro Controller que trata, valida e envia pro Model No final é semelhante ao que fizemos anteriormente quando nós interagimos com o resultado do ajax, construímos o HTML e injetamos no DOM só que no Angular a gente faz isso separando as funcionalidades em diversos componentes
  36. Responsável por cuidar dos dados da Factory para a View e comunicar com Services, validar dados e regras de negócio Controller takes the data from model (scope objects or the response from a service) and then fuse them to form the final view that gets displayed on the web page
  37. Angular é dirigido por HTML
  38. Quando injetado teremos o valor que é retornado ao invocar a function passada como referência no modulo.factory É apenas uma function que pode ser chamada (executada), e por causa disso nós temos que retornar um objeto explicitamente.
  39. Quando injetado teremos uma instancia do objeto/função (implicitamente teremos new nomeDoServico) É um objeto que encapsula pedaços de código e Regras de Negócio (códigos como console.log) e pode ser injetados em diretivas e Controllers; Inicializados só quando necessáio - quando um componente depende deles. São singleton (são inicializados apenas 1 vez durante o ciclo de vida do aplicativo) É como uma classe (tem o this) Perfect to share data between controllers and keep them in memory if need Servem para reusar pedaços de código pela app
  40. Muito simples e muito poderoso! E é uma solução perfeita para para componentes reusáveis
  41. Dependencias injeta com o wiredep nos comentarios Separamos com pastas Assistir mudancas
  42. UI-Router is a client-side router for single page web applications.
  43. Controllers são instanciados sob demanda, quando o usuário navega para um estado via URL, o $stateProvider irá carregar o template correto dentro da View e depois ligar o controller no scopo do template.
  44. Cordova does not provide any UI widgets or MV* frameworks
  45. Framework Front-end para desenvolver aplicativos móveis híbridos com HTML5. Nos dá componentes HTML, CSS e JS otimizados pra mobile e animações e interatividade que os aplicativos móveis requerem O Ionic tem performance através de manipulação mínima do DOM e transiçoes CSS que usam aceleração de hardware. Integrado lindamente com Angular e Cordova, tem seu própri CLI com todos comandos do Cordova e os seus próprios comando. Tem um servidor com livereload, usa Gulp, Bower e SASS, e faz scaffold de projetos As possibilidades de desenvolvimento são infinitas, bem vindo ao mundo das possibilidades com o Ionic! :)
  46. Os componentes do Ionic são construídos usando as Diretivas do Angular Se você quiser adicionar uma barra de navegação na sua app Ionic, tudo o que vc precisa fazer adicionar a tag <ion-nav-bar /> ou <div class=”ion-nav-bar” />
  47. Os componentes foram criados com foco visual independente de plataforma e usabilidade otimizada para mobile e touch screen it is the best HTML5 mobile framework available. It has a great set of components amazing default user interface tailored to various platforms performance that makes most apps feel completely native performance is continuuing to improve the same reasons that make Ionic such a powerful framework for hybrid apps will translate directly over to progressive web apps like support for service workers
  48. Os componentes do Ionic são construídos usando as Diretivas do Angular Se você quiser adicionar uma barra de navegação na sua app Ionic, tudo o que vc precisa fazer adicionar a tag <ion-nav-bar /> ou <div class=”ion-nav-bar” />
  49. http://phonegap.com/getstarted/ Instalar o Bower Instalar o Gulp Adicionar Materialize e jquery via bower Transferir e Injetar Materialize e jquery via Gulp $ npm install -g phonegap $ phonegap -v $ phonegap (ver os comandos da CLI do PhoneGap) $ phonegap cordova (ver os comandos da CLI Cordova) $ npm install -g cordova $ cordova -v $ cordova (ver os comandos do Cordova) $ cordova create <path> --id <com.dominio.nome> --name <nomeProjeto> $ cordova platform add browser $ phonegap serve - visualizar app no browser $ cordova run - abre o Chrome com algumas configuracoes de seguranca alteradas, nao dah reload com F5 Todo nosso codigo fica dentro da pasta www PhoheGap cria o projeto com todos os plugins e pode escolher templates ($ phonegap templates) e o config.xml com um namespace do cordova Cordova cria um projeto mais enxuto somente com o plugin white-list e o config.xml com um namespace do cordova $ phonegap run browser (platform add browser --save) $ phonegap run android (platform add android --save) netstat -ano | findstr 5037 adb devices (run to check which android devices are plugged and available to run on the machine (emulator or USB)) adb install <path_to_apk> https://developer.android.com/studio/command-line/adb.html#stopping https://developer.android.com/studio/run/oem-usb.html#Drivers https://build.phonegap.com/plugins https://cordova.apache.org/plugins/ Criar primeiro modulo Criar as pastas Extrair conteudos das views