faesa conenco 2013: sencha touch 2 + phonegap

136
Sencha Touch + Phone Gap Loiane Groner

Upload: loiane-groner

Post on 09-May-2015

741 views

Category:

Technology


2 download

DESCRIPTION

Palestra apresentada no CONENCO e SECS 2013 - Faesa - em Vitória - ES no dia 20 de setembro de 2013.

TRANSCRIPT

Page 1: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Sencha Touch +Phone Gap

Loiane Groner

Page 2: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Me, Myself & I

•Gerente de Desenv Projetos @Citibank

•8+ XP TI

•Java JUG Leader

•Sencha Community Leader

•http://loiane.com

•@loiane

Page 3: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Autora Técnica Internacional

Page 4: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Pq Mobile?Pq

Multiplataforma?

0

Page 5: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 6: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 7: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 8: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 9: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 10: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 11: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

#changeBrazil

Page 12: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Aplicações

Page 13: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

WORA:Write Once

Run Anywhere

Page 14: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Mobile

Page 15: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Android Java

BackBerry Java

iOS Objective-C

Palm OS C, C++, Pascal

Symbian C++

Windows Phone C#

Page 16: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Sencha Touch

1

Page 17: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Primeiro framework Javascript para desenvolvimento de apps mobile ricas

usando padrões web - HTML 5

Page 18: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 19: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

O que tem no Sencha Touch?

Componentes e LayoutsThemas e ÍconesOrientação e AnimaçãoEventos Touch e ScrollerPacote de DadosMVC

Page 20: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

ComponentesLists- Nested, Grouped, SortableCarouselPickerOverlaySliderForms & fields Toolbars & buttons HTML5- Audio- Video- GeoLocation

Lists - Nested, Grouped, SortableCarouselPickerOverlaySliderForms & fieldsToolbars & buttonsHTML5 - Audio - Video - GeoLocation

Components

Page 21: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Ext.define('Contact', { extend: 'Ext.data.Model', config: { fields: ['firstName', 'lastName'] }});

var store = Ext.create('Ext.data.Store', { model: 'Contact', sorters: 'lastName',

grouper: { groupFn: function(record) { return record.get('lastName')[0]; } },

data: [ { firstName: 'Tommy', lastName: 'Maintz' }, { firstName: 'Rob', lastName: 'Dougan' }, { firstName: 'Ed', lastName: 'Spencer' }, { firstName: 'Jamie', lastName: 'Avins' }, { firstName: 'Aaron', lastName: 'Conran' }, { firstName: 'Dave', lastName: 'Kaneda' }, { firstName: 'Jacky', lastName: 'Nguyen' }, { firstName: 'Abraham', lastName: 'Elias' }, { firstName: 'Jay', lastName: 'Robinson'}, { firstName: 'Nigel', lastName: 'White' }, { firstName: 'Don', lastName: 'Griffin' }, { firstName: 'Nico', lastName: 'Ferrero' }, { firstName: 'Jason', lastName: 'Johnston'} ]});

Ext.create('Ext.List', { fullscreen: true, itemTpl: '<div class="contact">{firstName} <strong>{lastName}</strong></div>', store: store, grouped: true});

Page 22: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Forms

Page 23: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Ext.create('Ext.form.Panel', { fullscreen: true, items: [ { xtype: 'textfield', name: 'name', label: 'Name' }, { xtype: 'emailfield', name: 'email', label: 'Email' }, { xtype: 'passwordfield', name: 'password', label: 'Password' } ]});

form.submit({ url: 'url/to/submit/to', method: 'POST', success: function() { alert('form submitted successfully!'); }});

Page 24: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Scrolling

ScrollingMomentum/bounce physics

Hardware accelerated

Throughout all components: - Lists - Carousel - Pickers

Page 25: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Eventos Touch

Baseado em Eventos Nativos

Abstraído para Performance

Eventos Adicionais:- Tap- Double tap- Tap & hold - Swipe- Rotate- Drag & drop

Page 26: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Data Package

Models, Stores, e Proxies- Associations- Validation- Local & server storage

Consumir web services- JSON/P - XML- YQL

Page 27: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 28: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

REST

Page 29: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

JSON-P

Page 30: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Local StorageWeb SQL (SQLite)

Page 31: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

CORShttp://enable-cors.org/

Page 32: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Temas

Use CSS3 & SASS - Flexible themes - Highly optimized

e.g.

Theming

$base-color: #ff6699

Use CSS3 & SASS - Flexible themes - Highly optimized

e.g.

Theming

$base-color: #ff6699

CSS3 comSass e Compass

Page 33: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Gráficos

Touch Charts

Page 34: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Demo 1

Page 35: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Tem Acesso Nativo?

Page 36: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Acesso Nativo

App in PurchasesCâmeraContatos (read only)*Connection (online/offline)Device Info (nome, plataforma, uuid)GeoLocationNotifications (vibrar)OrientationPush Notifications

Sencha Packager*PhoneGapEmulator

Page 37: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Sencha Touch não tem

AcelerômetroCompass

File

Page 38: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 39: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Sencha Touch SDKSencha Cmd

Local WebServerBrowser (safari, Chrome)

EmuladoresDispositivos para testes

Page 40: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

$ cd /path/to/sencha-touch-2-sdk$ sencha generate app MyApp /path/to/www/

Page 41: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Phone Gap

2

Page 42: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

•2008: início

•2008:suporte a iPhone, Android e Blackberry 4

•2009: suporte a Symbian e webOS

•2011: suporte a Windows Phone 7

•2011: Projeto sob Apache - novo nome

Page 43: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

A partir do Phonegap 1.5.0

Page 44: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Apache Cordova

•Cordova é o projeto Open Source

•PhoneGap é a implementação

•http://incubator.apache.org/cordova/

Page 45: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

O que é Phonegap / Cordova?

•Chromeless webkit browser•Plataforma mobile HTML 5 (wrapper)•Acesso Nativo

Page 46: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 47: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Phonegap éWORA?

Write Once, Run Anywhere?

Page 48: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Write OnceDEBUG Anywhere

Page 49: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 51: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

function capturePhoto() { navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50, destinationType: destinationType.DATA_URL }); }

Capturar Foto

Page 52: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

function capturePhotoEdit() { navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 20, allowEdit: true, destinationType: destinationType.DATA_URL }); }

Capturar Foto com Edição

Page 53: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

function getPhoto(source) { navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50, destinationType: destinationType.FILE_URI, sourceType: source }); }

<button onclick="getPhoto(pictureSource.PHOTOLIBRARY);">Biblioteca</button><br><button onclick="getPhoto(pictureSource.SAVEDPHOTOALBUM);">Album de Fotos</button>

Busca Foto do Dispositivo

Page 54: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

function onSuccess(heading) { alert('Heading: ' + heading.magneticHeading);};

function onError(error) { alert('CompassError: ' + error.code);};

navigator.compass.getCurrentHeading(onSuccess, onError);

Compass/Bússula

Page 55: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

function checkConnection() { var networkState = navigator.connection.type;

var states = {}; states[Connection.UNKNOWN] = 'Unknown connection'; states[Connection.ETHERNET] = 'Ethernet connection'; states[Connection.WIFI] = 'WiFi connection'; states[Connection.CELL_2G] = 'Cell 2G connection'; states[Connection.CELL_3G] = 'Cell 3G connection'; states[Connection.CELL_4G] = 'Cell 4G connection'; states[Connection.NONE] = 'No network connection';

alert('Connection type: ' + states[networkState]);}

checkConnection();

Conexão

Page 56: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

function onDeviceReady() { var element = document.getElementById('deviceProperties');

element.innerHTML = 'Device Name: ' + device.name + '<br />' + 'Device Cordova: ' + device.cordova + '<br />' + 'Device Platform: ' + device.platform + '<br />' + 'Device UUID: ' + device.uuid + '<br />' + 'Device Model: ' + device.model + '<br />' + 'Device Version: ' + device.version + '<br />'; }

Propriedades do Dispositivo

Page 58: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

navigator.notification.alert( 'Alerta!', // message alertDismissed, // callback 'Titulo', // title 'Botão' // buttonName);

Notification - Alert

Page 59: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

function showConfirm() { navigator.notification.confirm( 'Confirmar?', // message onConfirm, // callback to invoke with index of button pressed 'Titulo', // title 'OK,Cancel' // buttonLabels );}

Notification - Confirm

Page 62: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Demo 2

Page 63: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 64: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

http://nodejs.org/

Page 65: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

$ sudo npm install -g phonegap

Page 66: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

$ phonegap create hello com.example.hello HelloWorld

Page 67: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

$ phonegap build ios    [phonegap] detecting iOS SDK environment...    [phonegap] using the local environment    [phonegap] compiling iOS...    [phonegap] successfully compiled iOS app

Page 68: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

$ phonegap run android    [phonegap] detecting Android SDK environment...    [phonegap] using the local environment    [phonegap] compiling Android...    [phonegap] successfully compiled Android app    [phonegap] trying to install app onto device    [phonegap] no device was found    [phonegap] trying to install app onto emulator    [phonegap] successfully installed onto emulator

Page 69: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Sencha Touch+ PhoneGap

3

Page 70: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

HTML 5CSS 3

JS

UIWebViewWebView

APIs JS

Stores

Page 71: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 72: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 73: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Workflow deDesenvolvimento

Page 74: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Mock Up

Desenvolvimento

Testes Simulação

Dispositivo

Store

Page 75: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

MOCKUP

Page 76: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Resultado

Page 77: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

$ sencha generate app Contatos ../Contatos

Page 78: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 79: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Testes Locais

Page 80: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Testes Automatizados

Page 81: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

http://bryntum.com

Page 82: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Hora de Integrar!

Page 83: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 84: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

app.json

"js": [ { "path": "touch/sencha-touch.js" }, { "path": "cordova-2.9.0.js" }, { "path": "app.js", "bundle": true, "update": "delta" } ],

Page 85: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

navigator.contacts.find(! fields,! function(deviceContacts) {! //loop over deviceContacts and create Contact model instances! var contacts = [];! for (var i = 0; i < deviceContacts.length; i++) {! var deviceContact = deviceContacts[ i ];

! ! ! ! ! console.log(deviceContact);

! ! ! ! ! var phone = deviceContact.phoneNumbers[0];! ! ! ! ! if (phone){! ! ! ! ! ! phone = phone.value;! ! ! ! ! } else{! ! ! ! ! ! phone = "";! ! ! ! ! }

! ! ! ! ! console.log("phone " + phone);

! var contact = Ext.create('MyContacts.model.Contact',{! id: deviceContact.id,! givenName: deviceContact.name.givenName,! familyName: deviceContact.name.familyName,! phoneNumber: phone,! birthday: new Date(deviceContact.birthday),! notes: deviceContact.note! });! contact.deviceContact = deviceContact;! contacts.push(contact);! }! //return model instances in a result set operation.setResultSet( ! Ext.create('Ext.data.ResultSet', { ! records: contacts, ! total : contacts.length }) );! //announce success! operation.setSuccessful();! operation.setCompleted(); console.log('operation complete');! //finish with callback! if (typeof callback == "function") {! callback.call(scope || thisProxy, operation);! }! },

MyContacts.proxy.ContactsProxy

Page 86: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

$ ./create ContatosIOS com.loiane ../../../ContatosIOS

Page 87: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 88: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Emuladores

Page 89: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

RIPPLE

Page 90: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Ferramentas de Debug

Page 91: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

iWebInspector

Page 92: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Weinre

Page 93: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Build

Page 94: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

$ sencha app build

$ sencha app build native

$ sencha app package run packager.json

Page 95: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 96: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

XCodeEclipse

build.phonegap.com

Page 98: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Melhores Práticas

Page 99: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 100: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

sencha app build

Page 101: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Multiplataforma

4

Page 102: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 103: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 104: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

"css": [ { "path": "../../resources/css/base.css", "update": "delta" }, { "path": "resources/css/sencha-touch.css", "platform": ['chrome', 'safari', 'ios'], "update": "delta" }, { "path": "resources/css/android.css", "platform": ['android'], "update": "delta" }, { "path": "resources/css/bb.css", "platform": ['blackberry'], "update": "delta" }, { "path": "resources/css/wp.css", "platform": ['ie10'], "update": "delta" } ]

Page 105: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Nativo x Web

5

Page 106: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 107: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Nativo

Web

Acesso Device

Sim

Parcial

Page 108: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Nativo

Web

Acesso Device

Velocidade

Sim Sim

?Parcial

Page 109: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Nativo

Web

Acesso Device

Velocidade Tempo Desenvolvimento

Sim Sim

?

Caro

Parcial Sussa

Page 110: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Nativo

Web

Acesso Device

Velocidade Tempo Desenvolvimento

App Store

Sim Sim

?

Caro

Parcial Sussa

Sim

Não

Page 111: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Nativo

Web

Acesso Device

Velocidade Tempo Desenvolvimento

App Store

Cross Platform

Sim Sim

?

Caro

Parcial Sussa

Sim

Não Sim

Não

Page 112: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Nativo

Web

Acesso Device

Velocidade Tempo Desenvolvimento

App Store

Cross Platform

Sim Sim

?

Caro

Parcial Sussa

Sim

Não Sim

Não

Híbrido Sim ? Sussa* Sim Sim

?

Sussa*

Já vamos discutir

Já vamos discutir

Page 113: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

App Híbrida?

Page 114: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 115: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Desenvolva Desenvolva

Page 116: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Desenvolva

Teste

Desenvolva

Teste

Page 117: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Desenvolva

Teste

Build

Desenvolva

Teste

Build

Page 118: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Desenvolva

Teste

Build

Desenvolva

Teste

Build

Desenvolva

Teste

Build Build

{Híbrido

Page 119: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

?

Page 120: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Our biggest mistake was betting too much

on HTML5

Page 121: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

In your face!

Page 122: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

“So, when Mark Zuckerberg said HTML5 wasn't ready, we took a little offense to the comment.”

Page 123: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 124: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 125: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Sussa*

Page 126: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Plugins

Page 128: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

IssuesApp Store

Page 129: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Parece uma App

Parece app iOS

diferente web

Aprenda a desenvolver para mobile,

não webApp únicaButtons,

iOS Human Interface Design Guidelines Eventos Touch,

não Web

Pinch,Zoom#fail

Agregador de links

App Intuitiva

Hyperlink

Page 130: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 131: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap
Page 135: FAESA CONENCO 2013: Sencha Touch 2 + PhoneGap

Obrigada!

http://loiane.com@loiane