Top Banner
Sencha Touch + Phone Gap Loiane Groner Encontro 21 Maio 2013 IBM São Paulo
107

Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

May 24, 2015

Download

Technology

Loiane Groner

Slides apresentados no encontro do SouJava, dia 21 de Maio de 2013 que aconteceu na IBM Brasil em São Paulo
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Sencha Touch +Phone Gap

Loiane Groner

Encontro 21 Maio 2013IBM São Paulo

Page 2: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Loiane GronerJava JUG LeaderSencha Community Leader

7+ XP Java4+ XP Sencha

Software Developer Manager @ Citibank

http://loiane.com@loiane

Page 3: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Autora Técnica Internacional

Page 4: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Nativo x Web

1

Page 5: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 6: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Nativo

Web

Acesso Device

Sim

Parcial

Page 7: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Nativo

Web

Acesso Device

Velocidade

Sim Sim

?Parcial

Page 8: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Nativo

Web

Acesso Device

Velocidade Tempo Desenvolvimento

Sim Sim

?

Caro

Parcial Sussa

Page 9: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Nativo

Web

Acesso Device

Velocidade Tempo Desenvolvimento

App Store

Sim Sim

?

Caro

Parcial Sussa

Sim

Não

Page 10: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Nativo

Web

Acesso Device

Velocidade Tempo Desenvolvimento

App Store

Cross Platform

Sim Sim

?

Caro

Parcial Sussa

Sim

Não Sim

Não

Page 11: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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 12: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

App Híbrida?

Page 13: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 14: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Desenvolva Desenvolva

Page 15: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Desenvolva

Teste

Desenvolva

Teste

Page 16: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Desenvolva

Teste

Build

Desenvolva

Teste

Build

Page 17: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Desenvolva

Teste

Build

Desenvolva

Teste

Build

Desenvolva

Teste

Build Build

{Híbrido

Page 18: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

?

Page 19: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Our biggest mistake was betting too much

on HTML5

Page 20: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

In your face!

Page 21: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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

Page 22: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 23: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 24: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Pq Mobile?Pq

Multiplataforma?

2

Page 25: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 26: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 27: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 28: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 29: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 30: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 31: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Aplicações

Page 32: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

WORA:Write Once

Run Anywhere

Page 33: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Mobile

Page 34: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Android Java

BackBerry Java

iOS Objective-C

Palm OS C, C++, Pascal

Symbian C++

Windows Phone C#

Page 35: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Sencha Touch

3

Page 36: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Primeiro framework Javascript para desenvolvimento de apps mobile ricas

usando padrões web - HTML 5

Page 37: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

O que tem no Sencha Touch?

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

Page 38: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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

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

Components

Page 39: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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 40: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Forms

Page 41: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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 42: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Scrolling

ScrollingMomentum/bounce physics

Hardware accelerated

Throughout all components: - Lists - Carousel - Pickers

Page 43: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Eventos Touch

Baseado em Eventos Nativos

Abstraído para Performance

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

Page 44: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Data Package

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

Consumir web services- JSON/P - XML- YQL

Page 45: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 46: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

REST

Page 47: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

JSON-P

Page 48: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Local StorageWeb SQL (SQLite)

Page 49: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

CORShttp://enable-cors.org/

Page 50: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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 51: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 52: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 53: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

"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 54: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Gráficos

Touch Charts

Page 55: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Demo 1

Page 56: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Tem Acesso Nativo?

Page 57: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Acesso Nativo

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

Sencha Packager*PhoneGapEmulator

Page 58: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Sencha Touch não tem

AcelerômetroCompass

File

Page 59: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Phone Gap

4

Page 60: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 62: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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

Capturar Foto

Page 63: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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

Capturar Foto com Edição

Page 64: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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 65: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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

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

navigator.compass.getCurrentHeading(onSuccess, onError);

Compass/Bússula

Page 66: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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 67: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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 69: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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

Notification - Alert

Page 70: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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

Notification - Confirm

Page 73: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Demo 2

Page 74: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Sencha Touch+ PhoneGap

5

Page 75: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

HTML 5CSS 3

JS

UIWebViewWebView

APIs JS

Stores

Page 76: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Workflow deDesenvolvimento

Page 77: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Mock Up

Desenvolvimento

Testes Simulação

Dispositivo

Store

Page 78: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

MOCKUP

Page 79: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Resultado

Page 80: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

sencha generate app Contatos

../Contatos

Page 81: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 82: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Testes Locais

Page 83: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Testes Automatizados

Page 84: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

http://bryntum.com

Page 85: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Hora de Integrar!

Page 86: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 87: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

app.json

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

Page 88: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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 89: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

./create ContatosIOS com.loiane

../../../ContatosIOS

Page 90: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 91: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Demo 3

Page 92: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Emuladores

Page 93: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

RIPPLE

Page 94: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Ferramentas de Debug

Page 95: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

iWebInspector

Page 96: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Weinre

Page 97: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Build

Page 98: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

sencha app build

sencha app build native

Page 99: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

XCodeEclipse

build.phonegap.com

Page 100: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 101: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Sussa*

Page 102: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Plugins

Page 104: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

IssuesApp Store

Page 105: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

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 106: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013
Page 107: Sencha Touch e PhoneGap: SouJava - IBM Maio 2013

Obrigada!

http://loiane.com@loiane