HTML 5 App
Herman van Dompseler in opdracht van SURFnet 20 december 2012 Versie 0.91
HTML 5 App
Contents Inleiding ................................................................................................................................................... 4 Wat is HTML 5 ..................................................................................................................................... 4 Wat is er mogelijk met HTML 5? ..................................................................................................... 5 HTML 5 – handige links.................................................................................................................... 8 Part 1: HTML 5 Apps ............................................................................................................................... 9 Typen Apps .......................................................................................................................................... 9 Native apps .................................................................................................................................... 10 Webapps........................................................................................................................................ 10 Hybride apps.................................................................................................................................. 11 Een kijkje in de toekomst .............................................................................................................. 11 Welk type App gebruiken? ................................................................................................................ 12 Beslisboom .................................................................................................................................... 13 Scenario’s ...................................................................................................................................... 15 Typen Apps – handige links ............................................................................................................... 15 Part 2: Hybride apps uitgewerkt............................................................................................................ 16 Native app architectuur..................................................................................................................... 16 Hybride app architectuur .................................................................................................................. 17 Stand-alone hybride app ............................................................................................................... 17 Connected hybride app ................................................................................................................. 19 Werken met Phonegap...................................................................................................................... 21 Audio voorbeeld ............................................................................................................................ 22 Part 3: Een hybride app bouwen ........................................................................................................... 23 Stap 1: Hello World! De ontwikkelomgeving opzetten ..................................................................... 23 Stap 2: Run en test de App ................................................................................................................ 23 Kopieer de App naar een apparaat ............................................................................................... 24 Stap 3: Welke Android versie? .......................................................................................................... 25 Stap 4. Directory structuur ................................................................................................................ 25 Stap 5. Icoon & start-up scherm........................................................................................................ 26 Stap 6. Schermgrootte & ‘Responsive design’ .................................................................................. 27 Schermtype definitie ..................................................................................................................... 28 Images en text grootte .................................................................................................................. 30 Stap 7: Events & ‘Touch GUI’ ............................................................................................................. 31 Volgorde ........................................................................................................................................ 31 2
HTML 5 App Meer over gebruiker events .......................................................................................................... 32 Stap 8: Off You Go! ............................................................................................................................ 32
3
HTML 5 App
Inleiding HTML 5 is een technologie die nog volop in beweging is en toepasbaar is binnen nieuwe toepassingsgebieden voor onderzoek en onderwijs. Dit rapport is een technologie verkenning naar de mogelijkheden van HTML 5 bij het maken van Apps voor mobiele apparaten. Het rapport geeft de volgende inzichten:
Overzicht van de mogelijkheden van native apps, webapps en hybride apps en de overwegingen om voor een bepaalde soort App te kiezen. Verdieping in HTML 5 hybride apps met onder andere een aansluiting op bestaande webarchitectuur en middleware. Maar ook uitleg bij het bouwen van een HTML 5 App.
Het rapport is geschikt voor (website) ontwikkelaars die meer willen leren over het maken van Apps of het transformeren van een bestaande website naar een webapp. Er is informatie over verschillende typen Apps, met de nadruk op Apps gebouwd met HTML 5. Bij dit rapport is ook een website gemaakt: http://html5app.surfnet.nl/. Deze website is een samenvatting van het rapport, en is een webapp op zichzelf. De website is te gebruiken als HTML 5 referentie en bevat een voorbeeld hybride app. Dit rapport bestaat uit 4 delen. 1. 2. 3. 4.
Allereerst een inleiding op HTML 5 Vervolgens een overzicht van type Apps en HTML 5 Apps Daarna een verdieping en uitleg over hybride apps Afsluitend een stap voor stap handleiding voor het zelf bouwen van een hybride app
Wat is HTML 5 HTML 5 is de ‘nieuwe’ standaard voor het presenteren van webpagina’s. HTML 5 is niet één grote nieuwe functionaliteit, maar een collectie van nieuwe standaarden en functionaliteiten op drie deelgebieden: 1. HTML 5 2. Javascript (JS) 3. CSS3
‘Nieuw’ staat tussen aanhalingstekens omdat sommige HTML 5 elementen al enige tijd te gebruiken zijn en andere elementen nog in ontwikkeling zijn. HTML 5 is daarom het best te omschrijven als een continue verbetering van de taal en tools voor het maken van web applicaties. Met de nadruk op applicaties ipv. statische pagina’s. In de combinatie van HTML 5, Javascript en CSS3 zijn het de HTML
die de declaratie van de elementen vormen. Met Javascript en CSS3 worden deze elementen dynamisch gemaakt. Bij programma’s in Javascript ligt de focus op het procedureel aanpassen van de elementen. Met CSS3 worden de elementen vorm gegeven en ligt de focus op de positionering en transities van elementen.
4
HTML 5 App HTML 5 is al te gebruiken. Of de specificatie nu af is of niet, alle browsers en apparaten ondersteunen een subset van de mogelijkheden. Veelal wordt HTML 5 ingezet om dynamische toepassingen te maken, die voorheen met een andere technologie, zoals flash, werden gemaakt. Een webpagina die begint met is een HTML 5 pagina. Vervolgens is het belangrijk te onderzoeken of de functionaliteit die nagestreefd wordt, beschikbaar is voor het platform waarop het getoond wordt. In één van de vele desktop browsers of op een mobiel platform, zoals een Android of iOs apparaat. Op http://caniuse.com/ staat een overzicht van de functionaliteiten voor de verschillende platformen. Wat is er mogelijk met HTML 5? In een drietal onderzoeken heeft SURFnet de afgelopen jaren diverse aspecten van HTML 5 belicht.
Eind 2010 heeft een theoretisch onderzoek naar de HTML 5 tag laten zien wat er mogelijk is op video gebied met HTML 5. Een demo pagina toont de implementatie.
Een van de vragen een uitkomsten van het onderzoek was: “Is het gebruik van op HTML 5 gebaseerde video nuttig voor de videodiensten van SURFnet, van Kennisnet en van de Nederlandse onderwijsinstellingen? Zoals in dit rapport naar voren is gekomen, biedt HTML 5 Video vele nieuwe mogelijkheden, met name op het gebied van integratie van de video met de rest van de webpagina. Bovendien zijn voor het afspelen van HTML 5 Video geen losse plugins meer nodig. Deze twee zaken maken dat HTML 5 Video zeer nuttig kan worden voor gebruik in de videodiensten van SURFnet, van Kennisnet en van de Nederlandse onderwijsinstellingen. Een nadeel van HTML 5 Video is echter dat er op dit moment geen enkel formaat is dat in alle browsers kan worden afgespeeld, en er dus altijd 5
HTML 5 App minimaal twee versies van elke video zullen moeten worden aangeboden. De verwachting is dat op de langere termijn HTML 5 Video de standaardmanier zal worden waarmee video in webpagina’s worden opgenomen. Dit zal echter nog wel enige jaren duren.” Voor meer informatie over HTML 5 video kan het betreffende rapport gedownload worden vanaf de website behorende bij dit rapport.
Vervolgens is er begin 2011 onderzoek gedaan naar andere HTML 5 elementen, zoals nieuwe invoer typen voor formulieren en lokale opslag van data. Van verschillende HTML 5 elementen is een proefimplementatie gedaan om de resultaten te tonen. Bekijk hier bijvoorbeeld het element . De Opera browser toont dan een datum prikker, daarvoor is geen code meer aan te pas gekomen.
Een ander voorbeeld is de videowall, geschikt voor verschillende apparaten: desktop, tablet en mobiel, met dynamische elementen erin, zoals het inschuiven van metadata. Met deze videowall, kunnen 9 video’s parallel afgespeeld worden. De metadata werd lokaal opgeslagen op het apparaat en is daardoor direct te raadplegen.
6
HTML 5 App
Eind 2011 is er een proof of concept gemaakt van een HTML 5 Video Annotatie Player. Daarmee is het mogelijk een HTML 5 video met meerdere mensen te annoteren, van commentaar te voorzien en met sociale media erover te praten. Daarnaast is deze video player gepresenteerd in een element om de video speler een ‘gaming’ karakter te geven. Met het element is het bijvoorbeeld mogelijk een video te bewerken en andere elemenen in een overlay op de video te zetten. Daarnaast is er gekeken naar ondertiteling met WebVTT.
7
HTML 5 App Al deze onderzoeken waren theoretisch en technisch georiënteerd, met proof of concept implementaties. Ze tonen aan dat alles wat denkbaar is, eigenlijk ook met HTML 5 te maken is. HTML 5 – handige links Voor meer informatie over HTML 5 zijn de volgende bronnen te raadplegen. HTML specificatie van W3C CSS beschrijving van W3C
http://www.w3.org/TR/html5/ http://www.w3.org/Style/CSS/
Over HTML 5
http://diveintohtml5.info/ http://html5rocks.com/ http://html5doctor.com/
Over Javascript
https://developer.mozilla.org/en/JavaScript/
Over CSS 3
http://www.css3.info/
Voorbeelden
http://caniuse.com/ (voor welk platform?) http://html5games.com/ (oh, kan dat ook!) http://www.canvasdemos.com/ (en dit ook) http://wowslider.com/ (wow)
8
HTML 5 App
Part 1: HTML 5 Apps HTML 5 is een webtechnologie waarmee informatie toegankelijk wordt gemaakt via webbrowsers, tot voorkort voornamelijk toegepast op desktop en laptop computers met een scherm, toetsenbord en muis. Maar dit verandert. Het internet breidt zich uit naar andere apparaten, zoals smartphones, tablets, maar denk ook aan auto’s, koelkasten en anderen apparaten die aan internet verbonden worden. Gezamenlijk met deze uitbreiding van apparaten die met internet verbonden worden, zal ook HTML 5 verder ontwikkeld worden en een interface aanbieden aan de gebruiker van deze apparaten. De eerste logische stap is een HTML 5 interface voor smartphones en tablets. Oftewel, apparaten met aanraakschermen die (bijna) altijd verbonden zijn met internet. Toepassingen voor deze apparaten, Apps genoemd, bieden vaak uitgebreidere functionaliteit dan met webbrowsers te realiseren is. Denk bijvoorbeeld aan locatie gebaseerde gegevens of een kompas. Maar ook toegang tot de adressenlijst van het apparaat of opname van foto’s, video en geluid is anders dan bij webbrowsers. Een uitgebreider overzicht van deze extra functionaliteiten komt later in dit rapport nog ter sprake. Daarvoor is het eerst noodzakelijk te begrijpen wat voor typen Apps er te onderscheiden zijn.
Typen Apps Een website die geoptimaliseerd is voor gebruik op een smartphone of tablet wordt een webapp genoemd. Dit is een website die opgevraagd wordt met de browser van het apparaat. De site reageert op het touchscreen en kan interactie hebben met bijvoorbeeld de GPS positie van het apparaat. Voor een webapp is het typisch om naar een URL te browsen. Webapps zijn het tegenovergestelde van native apps. Native apps zijn voor een specifiek apparaat gemaakte toepassingen, al dan niet verbonden met het Internet. Native apps zijn programma’s die zonder webbrowser werken, maar juist rechtstreeks op het apparaat zijn geïnstalleerd. Een native app wordt typisch uit de App store gedownload, waarna deze gebruikt kan worden. Tussen deze twee uiterste in zitten de hybride apps. Hybride apps zijn direct op het appraat geïnstalleerde applicaties (zoals native apps), die gebruik maken van een geïntegreerde browser (zoals webapps). Er zijn dus drie typen Apps te onderscheiden: 1. Native apps, specifiek voor een apparaat gemaakte toepassing, met specifieke voor het apparaat geschreven code in Xcode voor iOs of java voor Android bijvoorbeeld. 2. Hybride apps, voor een apparaat gemaakte toepassing met generieke code in HTML 5 3. Webapps, een website die geoptimaliseerd is voor mobiele platformen En wat is dan een HTML 5 App? Dat is een App die met HTML 5 technologie is gemaakt en dat kan zowel een webapp als een hybride app opleveren.
9
HTML 5 App Het verschil tussen native apps en webapps levert een strijd tussen twee filosofieën. Met aan beide kanten voor- en tegenstanders. Dit wordt goed geïllustreerd in deze video: http://www.youtube.com/watch?v=fchbLzwtexk Hierin komen duidelijk de verschillen naar voren tussen het gebruik van native apps en webapps. In de volgende hoofdstukken worden de drie typen Apps afzonderlijk beschreven om deze verschillen weer te geven. Native apps De voordelen van native apps:
Direct toegang tot alle apparaat hardware + direct interactie met het apparaat, zoals notificaties via het platform aan de gebruiker + integratie met andere Apps o Webapps daarentegen hebben beperkter toegang tot het apparaat Het verschil in deze toegang zit in het verschil wat de gebruikte software biedt. De iOS SDK van Apple en de Android SDK van Google bieden zoveel mogelijk toegang tot het apparaat. Het valt buiten de scope van dit document om al deze functionaliteit te benoemen. Een webapp is afhankelijk van welke toegang de browser heeft tot het apparaat. De browser heeft minder functionaliteit om van een onderliggend apparaat gebruik te maken. Welke elementen wel gebruikt kunnen worden, dat is heel dynamisch en staat beschreven in de HTML 5 referentie van de website behorende bij dit document.
‘Runs faster’, wat voornamelijk geldt voor grafisch intensieve applicaties Native apps kunnen de ‘look & feel’ van het mobile OS gebruiken, dat levert een ‘smooth user experience’. o Webapps kunnen dit native app gevoel nabootsen, maar niet evenaren. Dit kan door een webapp direct te starten vanaf het apparaat, waardoor de browser van de App onzichtbaar wordt, maar nog wel steeds wordt gebruikt. Dit is een actie die de gebruiker moet uitvoeren en dat kan niet door de webapp geforceerd worden.
Bijkomend voordeel, de App store:
Apps kunnen worden geplaatst in App stores en zijn daardoor makkelijk toegankelijk en kunnen makkelijk op het apparaat geplaatst worden. o Web Apps worden via websites gedistribueerd Met Apps in App stores is ook geld te verdienen, via de App store kan een bedrag voor het downloaden van de App worden gevraagd, waarvan 70% voor de App ontwikkelaar is. Dat percentage is vrijwel hetzelfde in alle App stores.
Webapps De voordelen van webapps:
‘Write once, run many’, een generiek HTML 5 platform voor meerdere apparaten o Native apps moeten voor iedere platform opnieuw gebouwd worden
Bijkomend voordeel, content beheer:
10
HTML 5 App
De content wordt van internet gehaald, er is dus één content store, die ook voor andere doeleinden, zoals een website, gebruikt kan worden. Content is daardoor makkelijk te beheren/wijzigen o bij native apps moet een nieuwe App worden geplaatst in de App store bij iedere update. Er wordt gezegd dat dit een tijdrovend en niet een triviaal proces is, vanwege oa. keuringen door App store eigenaren.
Daarnaast zijn er uiteraard ook overeenkomsten tussen native apps en webapps, met beiden technologieën is ongeveer dezelfde applicatie ervaring te bereiken:
De Apps zijn op beiden manieren met verschillende aanraak methoden te bedienen Beide typen Apps zijn online en offline te gebruiken, nadat ze eenmalig vanaf het internet/uit de App store opgehaald zijn.
Hybride apps Even samenvattend: native apps zijn voor één specifiek apparaat gemaakte toepassingen. Een webapp is een website, voor verschillende apparaten toegankelijk gemaakt. Een hybride app is de combinatie: een native app met HTML geintegreerd. De HTML 5, CSS3 en Javascript kan in de App opgeslagen worden (zoals bij een native app) of van het web worden gedownload. Een hybride app geeft de flexibiliteit van een Web App en de user experience van een native app. Voordelen ten opzichte van een native app:
Deze wordt eenmalig geprogrammeerd, in HTML 5
Voordelen ten opzichte van webapps:
Gebruik een framework (zoals Phonegap), die de directe toegang tot het apparaat omzet in webservices die met HTML 5 zijn te raadplegen. Hierdoor zijn meer apparaat afhankelijk functionaliteiten te gebruiken. Kunnen in App stores worden geplaatst en kan dus ook voor betaald worden.
Een hybride app maakt gebruik van een tussenliggend platform wat de functionaliteit van het apparaat doorgeeft aan de App. De functionaliteiten die in een hybride app toegankelijk zijn, worden beschreven in de verdieping in het volgende hoofdstuk. Een kijkje in de toekomst Webapps zullen waarschijnlijk meer op native apps gaan lijken. De volgende ontwikkelingen zijn nu gaande:
WebGL voor het versnellen van 3D grafische mogelijkheden in de browser Webapp stores , om ook met webapps geld te kunnen verdienen en ze makkelijk te kunnen vinden/installeren. o Open App Market is een webapp store: http://www.openappmkt.com/ o Google heeft een eigen Webstore, https://chrome.google.com/webstore# o Mozilla werkt aan een webapp store, https://www.mozilla.org/en-US/apps/partners/
11
HTML 5 App
Er zullen steeds meer toegangsmogelijkheden komen voor webapps om van apparaat specifieke toepassingen gebruik te maken. GPS is er bijvoorbeeld al. Meer zal er volgen.
Het steeds verder ontwikkelen van HTML 5 voor webapps en het toegankelijk maken van meer functionaliteiten in de browser heeft ook gevolgen voor het maken van hybride apps en speciaal voor het gebruik van een platform zoals Phonegap. De naam zegt het al, dit platform overbrugt de ‘gap’ tussen het apparaat en het gebruik ervan in de browser. Als de browser zelf toegang tot het apparaat gaat leveren, zal een tussenliggend platform minder noodzakelijk worden. Merk op dat Phonegap niet alleen deze brug verzorgt, maar ook ervoor zorgt dat een HTML 5 App als App in een App store kan worden geplaatst. Voor deze laatste functionaliteit is Phonegap dan nog steeds nodig, tenzij genoegen wordt genomen met het plaatsen van de App in een webapp store.
Welk type App gebruiken? Een afweging kan gemaakt worden op basis van de genoemde verschillen tussen de type Apps: native, hybride of web. Onderstaande vergelijking kan daarbij helpen. Hier worden de Apps vergeleken op:
Device Access: de toegang tot de verschillende functionaliteiten van het apparaat. o Webapps hebben duidelijk minder toegang tot functionaliteiten ten opzichte van de andere twee typen, vanwege het gebruik in een browser. Speed: de snelheid waarmee de App moet werken en reageren. o Native apps werken het snelst omdat ze geprogrammeerd zijn met de SDK van het specifieke apparaat en er geen platform/browser tussen zit zoals, bij hybride apps of webapps. Development cost: de prijs voor het ontwikkelen van de App. o De ontwikkeling van native apps zal in veel gevallen het intensiefst zijn, omdat voor iedere apparaat specifieke expertise nodig is. App store (en het Approval Proces): heeft de App een plekje in de App store nodig? o Webapps zijn niet in een App store te plaatsen
Taken from: http://www.youtube.com/watch?v=Ns-JS4amlTc
12
HTML 5 App
Het zal echter niet voldoende zijn om op deze manier naar App ontwikkeling te kijken. Wat in ieder geval ook meegenomen moet worden is:
Het soort App. o Ontsluit de toepassing veel content of is er juist veel interactie in de vorm van ‘gaming’. Welke uitstraling heeft de App. o Moet de App naadloos aansluiten bij het apparaat of juist aansluiten bij de eigen huisstijl/website. Waar zitten de gebruikers. o Er kan bijvoorbeeld specifiek ontwikkelt worden voor iPhone/iPad gebruikers. Met welke technologie zijn de eigen ontwikkelaars bekend. o Wat bijvoorbeeld HTML 5 betreft kan dit aansluiten bij de ontwikkeling van websites die vaak al gaande is. Het is min of meer bekende technologie.
Beslisboom Onderstaande flowchart helpt bij het maken van een keuze. Er zijn drie gezichtspunten. Bekijk het ontwikkelen van de App: 1. Vanuit de wens om een App te maken. 2. Vanuit de gebruikers van de App. 3. Vanuit de ontwikkelaar van de App. De kosten voor het ontwikkelen van de App zijn niet in deze beslisboom meegenomen. Het is duidelijk dat een aangepaste website die gebruikt wordt als webapp de minste kosten met zich mee brengt. Voor het ontwikkelen van apparaat specifieke Apps, zijn de kosten hoger. Maar bovenal zijn de kosten van een App erg afhankelijk van het ontwerp en daar kan in deze beslisboom geen rekening mee gehouden worden. Van deze beslisboom is op de bijbehorende website van dit rapport een App gemaakt, waarmee de boom doorlopen kan worden. Klik hiervoor op de link: ‘App Technology Chooser’.
13
HTML 5 App
14
HTML 5 App Scenario’s Er zijn verschillende scenario’s denkbaar waarvoor een App ingezet kan worden. Hier volgen er een aantal. 1. Je wilt een high speed game ontwikkelen, en geen concessies wat betreft snelheid en grafische kwaliteit doen. De flowchart brengt je bij: native app. 2. Je wilt een toepassing ontwikkelen waarbij je toegang nodig hebt tot de camera van het apparaat. De flowchart brengt je bij: hybride app. (native is ook een optie) 3. Je wilt online content aanbieden en hebt een mooie vormgeving ontwikkelt. Je hebt niet specifieke apparaat toegang nodig. Je wilt wel dat mensen voor gebruik van je App betalen De flowchart brengt je bij: hybride app. 4. Je hebt online content aan te bieden, wat je deels ook gebruikt op je site. Voor de App heb je een nieuw design gemaakt, geschikt voor het formaat van het apparaat. Je wilt dit net als je website gratis aanbieden De flowchart brengt je bij: webapp. 5. Je wilt dat je website ook op een smartphone of tablet is te bekijken met de browser van het apparaat. De flowchart brengt je bij: webapp.
Typen Apps – handige links Voor meer informatie over typen Apps zijn de volgende bronnen te raadplegen. Video met duidelijke standpunten over native apps vs. webapps.
http://www.youtube.com/watch?v=fchbLzwtexk
Sites met vergelijkingen tussen typen Apps
http://www.html5rocks.com/en/mobile/nativedebate http://econsultancy.com/uk/blog/7832-the-fight-getstechnical-mobile-apps-vs-mobile-sites http://buildmobile.com/native-hybrid-or-web-apps/
Een video met diepgaande uitleg over typen Apps
http://www.youtube.com/watch?v=Ns-JS4amlTc
15
HTML 5 App
Part 2: Hybride apps uitgewerkt Dit hoofdstuk duikt in de wereld van hybride apps. Om de App in een breder kader te plaatsen wordt eerst de architectuur geschetst voor het ontwikkelen en beschikbaar stellen van een App. Daarin komen de belangrijkste libraries die nodig zijn aan bod. Ook volgt er een beknopte omschrijving van het ontwerp van een App en gebruik van (web)resources. Vervolgens wordt dieper ingegaan op het werken met de Phonegap library.
Native app architectuur Voor het ontwikkelen van een native iPhone of Android App worden de volgende stappen ondernomen.
De programmeur schrijft zijn code in Objective C of Java. Hij maakt gebruik van een SDK als raamwerk voor zijn code. In het ontwikkel proces wordt een App gemaakt. (.app of .apk) De App wordt in een App store aangeboden van waaruit hij op een apparaat kan worden gedownload en geïnstalleerd.
iPhone en Android App ontwikkel methode 16
HTML 5 App
Hybride app architectuur Het uitwerken van een hybride architectuur vergt twee stappen. Allereerst dient er een oplossing gemaakt te worden om te kunnen programmeren in HTML 5. Deze stap wordt gemaakt in het volgende hoofdstuk waar een ‘stand-alone’ hybride app wordt uitgelegd. Vervolgens wordt de architectuur verder uitgewerkt naar een ‘connected’ architectuur. Het is erg waarschijnlijk dat een hybride app gebruik maakt van informatie die al beschikbaar is op een website. In de ‘connected’ architectuur wordt een oplossing geschetst voor het bouwen van een hybride app waarbij gebruik gemaakt wordt van al bestaande content, zodat de App, website en andere informatie uitingen geïntegreerd worden. Stand-alone hybride app Om te kunnen programmeren in HTML 5, CSS3 en Javascript moet er een brug gevormd tussen deze code en de App SDK van het apparaat. Hiervoor zijn verschillende Libraries gemaakt. Libraries verzorgen de koppeling met het achterliggende apparaat, in dit document backend libraries genoemd. Of libraries leveren interface elementen, frontend libraries genoemd: 1. Backend Libraries: javascript libraries die toegang tot de SDK en functionaliteiten van het apparaat verzorgen. 2. Frontend Libraries: javascript libraries die het maken van de look & feel van de applicatie verzorgen. Backend libraries Backend libraries maken verschillende functionaliteiten van een apparaat toegankelijk voor javascript code. De library die in dit onderzoek verder wordt onderzocht is Phonegap. In Plaats van Phonegap wordt nu ook de naam Cordova gebruikt. Dit is de naam voor de core van het Phonegap systeem dat middels de Apache Software Foundation open source wordt aangeboden, terwijl Phonegap door Adobe is overgenomen. Een aantal backend libraries:
Phonegap: http://phonegap.com/ Appmobi: http://www.appmobi.com/ Appcelerator (Titanium): http://www.appcelerator.com/
Frontend libraries Van frontend libraries die het ontwikkelen van de App interface eenvoudiger maken zijn meerdere smaken, die varieren van heel uitvoerige libraries tot kleine, handige scripts. Bekende libraries zijn:
Modernizr: http://modernizr.com/, voor het detecteren van HTML 5 ondersteuning door de browser. jQuery, http://jquery.com/ en jQueryMobile: http://jquerymobile.com/, voor een algemeen javascript framework. jQTouch: http://www.jqtouch.com/ en Zepto.js: http://zeptojs.com/, alternatieve javascript raamwerken voor mobile devices. Sencha, http://www.sencha.com/, biedt een compleet en uitgebreid raamwerk voor mobile development. 17
HTML 5 App
Dojo, http://dojotoolkit.org/features/mobile, focused op het maken van een native look & feel mobile App.
Naast Phonegap als backend, wordt in dit onderzoek gebruik gemaakt van jQuery Mobile als frontend library. Zie de architectuur voor de plaatsing van deze libraries:
Hybride app ontwikkel methode
18
HTML 5 App Connected hybride app In de stand-alone hybride app staat alle HTML 5, CSS3 en Javascript in de App zelf. Echter niet alle resources hoeven in de App te staan. Een App kan web resources voor content gebruiken, zoals een nieuws pagina. Net zoals een bestaande website de web resources gebruikt. Zie:
Hybride app + Website ontwikkel methode 19
HTML 5 App
In deze architectuur zijn, ten opzichte van de stand-alone versie, twee stromen aan de ‘APP’ stroom toegevoegd. Daarmee worden een API server en een Web server gerealiseerd. 1. De DATA stroom: vanuit de resources is een database opgebouwd die via eigen code en een favoriet raamwerk op Internet wordt ontsloten middels een API. Een API levert data in een XML en/of JSON formaat. 2. Een WEB stroom: vanuit HTML 5, CSS3 en Javascript wordt al dan niet met een (jQuery) library een website gebouwd. De XML of JSON uit de API levert content aan deze website. Deze website is te bekijken met een browser op een apparaat. Merk op dat dit ook een smartphone of tablet kan zijn. In deze connected architectuur worden de belangrijkste overeenkomsten tussen ontwikkelen voor web sites en webapps duidelijk:
Programmeer in HTML 5, CSS3 en Javascript (de grijze blokken) en maak daarbij gebruik van libraries. Daar is het in dit onderzoek natuurlijk allemaal om te doen. Put uit één bron van resources. Resources kunnen ofwel toegankelijk gemaakt worden via de App ofwel via de API, die op zijn beurt ook de website van content voorziet.
App design & App resources Een goed interactie design van een App is van essentieel belang. Zomaar een website kopiëren is niet de optimale oplossing.
Waar met name rekening mee moet worden gehouden is het formaat van het apparaat. Een scherm van een smartphone is het kleinst en een smartphone wordt vaak in portrait bediend. Een tablet scherm is groter en wordt weer vaker landscape gebruikt. Een smartphone kan op ieder moment van de dag op iedere lokatie gebruikt worden. Dat moet snel en effectief werken. Dat is een andere beleving dan wanneer de gebruiker met een tablet of laptop op schoot aan het browsen en lezen is. Ook qua visueel design vergt het bouwen van een App aandacht. Het is belangrijk te bepalen in hoeverre aangesloten moet worden bij het design van het apparaat waarop gekeken wordt.
Design van een App is verder geen onderdeel van dit rapport. Google en Apple hebben beiden richtlijnen voor het ontwikkelen van een App, die erg interessant zijn om te lezen.
Android: http://developer.android.com/design/index.html iOS: http://developer.apple.com/library/ios/#documentation/UserExperience/Conceptual/Mobil eHIG/Introduction/Introduction.html
Een belangrijke vraag die nog wel beantwoord moet worden alvorens een Connected hybride app te gaan ontwikkelen is: Welke resource moet in de App en welke kan via de API opgehaald worden? Er zijn twee uitgangspunten: 20
HTML 5 App 1. De App moet een snelle response geven, dat zijn gebruikers ook van native apps gewend. 2. Er moet niet teveel data verkeer gegenereerd worden tussen App en API, dat bespaard de gebruiker netwerkkosten. Om aan deze uitgangspunten te kunnen voldoen is het zinvol zoveel mogelijk resources in de App beschikbaar te hebben en zo min mogelijk uit de API te halen. Toch kan het belangrijk zijn om content, wat toch al beschikbaar is op de website, via de API toegankelijk te maken, omdat:
Content dan niet gedupliceerd hoeft te worden. Niet voor elke content wijzigingen een nieuwe App moet worden gemaakt.
Content die uit de API opgehaald moet worden kan bovendien het beste in het JSON formaat worden beschreven, waarmee delen van een HTML pagina worden vervangen. De Javascript processing en de HTML rendering van de content vindt dan plaats op het apparaat zelf. Hierdoor wordt de netwerkbelasting zo klein mogelijk gehouden en wordt de response van de API zo snel mogelijk gemaakt.
Werken met Phonegap Phonegap is een Javascript library, waarin functies zijn gedefinieerd die gebruikt kunnen worden om toegang te krijgen tot functionaliteiten van een apparaat. Of het apparaat nu een Android, iPhone of ander apparaat is, de Javascript functies zijn hetzelfde. Dit is een overzicht van de elementen waar Phonegap toegang toe geeft:
Events voor starten en pauzeren van de App, etc.
Capture, voor het opslaan van geluid, foto’s en videos met de bijbehorende tools van het apparaat. Camera, voor het maken van een foto met de camera tool van het apparaat. Dit was de voorloper van ‘capture’ en wordt alleen nog gebruikt ter referentie. Media, voor het opslaan en afspelen van geluid, met oa. play en pause interface.
Accelerometer, de bewegingssensor. o Geeft antwoord op de vraag: naar welke kant beweegt het apparaat? Compas, het kompas. o Geeft antwoord op de vraag: welke kant wijst het apparaat op? Geolocation, de GPS. o Geeft antwoord op de vraag: waar bevindt het apparaat zich?
File, voor het maken van files en opslaan van gegevens op het apparaat. Storage, voor het maken van een Web SQL database voor het apparaat.
Contacts, geeft toegang tot het adresboek van het apparaat. Notification, geeft toegang tot tekstuele notificaties, maar ook geluiden en vibraties etc. Device, geeft informatie over de hardware en software van het apparaat 21
HTML 5 App
Connection, geeft information over de netwerk status, wifi of 3G etc.
De interface tot de functies van deze elementen staat op: http://docs.phonegap.com/en/2.0.0/index.html Audio voorbeeld Voor sommige functies is het mogelijk meerdere oplossing te kiezen, neem bijvoorbeeld het afspelen van geluid. De HTML 5 oplossing voor afspelen van geluid is gebruik maken van de tag in de HTML pagina. Met javascript kan dan vervolgens de functie play() aangeroepen worden voor het afspelen van het fragment. De Phonegap oplossing voor het afspelen van geluid is gebruik maken van het media object en ook dit object heeft een play() methode. Voordeel van gebruik van de Phonegap oplossing is dat het hiermee ook mogelijk is om audio op te nemen, met de startRecord() methode. Met de HTML 5 oplossing is het alleen mogelijk af te spelen.
22
HTML 5 App
Part 3: Een hybride app bouwen Hieronder volgt een stap voor stap handleiding voor het bouwen van een hybride app met gebruik van Phonegap en de Android SDK. Met Phonegap is het mogelijk voor meerdere platformen te ontwikkelen. Voor ieder platform dient de bijbehorende SDK gedownload te worden en een aparte App te worden gemaakt. Het is aan te raden één platform te kiezen voor de ontwikkeling, bijvoorbeeld Android. Als deze versie naar wens werkt, dan kan vervolgens op elk ander platform, zoals iOS, de ontwikkeling omgeving opgezet worden en de HTML 5 code worden gekopieerd. De HTML 5 code is op elk platform dan gelijk, maar de ontwikkel omgeving verschilt, zodat er verschillende Apps kunnen worden gemaakt.
Stap 1: Hello World! De ontwikkelomgeving opzetten Hello World! Maak het eerste Phonegap project gebruikmakend van de handleiding op: http://docs.phonegap.com/en/2.0.0/guide_gettingstarted_android_index.md.html#Getting%20Started%20with%20Android Deze handleiding volgen komt neer op de volgende acties:
Installeer ontwikkelomgeving Eclipse Download en configureer Android SDK Installeer Android Development Tools (ADT) plugin vanuit Eclipse Download Phonegap Opzetten van de development omgeving
Stap 2: Run en test de App Om de App uit te voeren en te testen is eerder de ADT plugin geïnstalleerd. Het is belangrijk te begrijpen hoe deze plugin gebruikt kan worden om verschillende apparaten te simuleren. Hieronder staan twee apparaten voor tests.
23
HTML 5 App
1. Dit is een emulatie van een Sony Experia U, een smartphone met High density scherm, portrait georiënteerd. a. resolutie: 480x854 b. density: 240 2. Dit is een emulatie van een yarvik gotab, een tablet met een low density scherm, landscape georiënteerd. a. resolutie: 1024x768 b. density: 120 Voor het testen van een applicatie wordt op “Run” geklikt en vervolgens kan één van deze ‘virtual devices’ gekozen worden, waarop de applicatie uitgevoerd wordt. Kopieer de App naar een apparaat De App zal ook op een echt apparaat getest moeten worden, naast het testen op deze virtuele apparaten. Daarvoor hoeft de App niet meteen in een store geplaatst te worden, maar kan een zelf gemaakte .apk file op het apparaat geïnstalleerd worden. Daarom worden de volgende stappen ondernomen:
Maak een eigen certificaat waarmee de App gesigneerd wordt. o maak met keytool een key + keystore Exporteer de App o ‘right klik’ projectnaam -> android tools -> export signed application package Verplaats .apk bestand naar het apparaat 24
HTML 5 App
o Koppel met usb het apparaat en kopieer bestand Installeer de .apk op het apparaat.
Het maken van het certificaat hoeft maar één keer gedaan te worden, Het certificaat kan hergebruikt worden om alle toekomstige Apps te signeren.
Stap 3: Welke Android versie? Tijdens het opzetten van de ontwikkel omgeving is de keuze voor de Android versie al langs gekomen. Automatisch wordt voor de laatste versie gekozen, maar daarmee worden niet alle gebruikers bediend. Kijk op http://developer.android.com/about/dashboards/index.html voor de laatste verdeling van de verschillende Android versies. In juli 2012 was het gebruik van Android:
2.1: Éclair: 4% 2.2: Froyo: 15% 2.3[.3]: Gingerbread: 60% 3.2: Honeycomb: 2% 4.0[.3]: Ice Cream Sandwich: 16% 4.1: Jelly Bean: 1%
Door te ontwikkelen voor Android vanaf versie 2.1 wordt totaal dus 98% van de Android gebruikers bereikt. Maar dat betekent dat de code moet voldoen aan API level 7 waarop Eclair is gebouwd. Terwijl Jelly Bean al op API Level 16 zit. Versie 2.3.3 Gingerbread is veruit de meest gebruikte versie met 60% en 4.0.3 Ice Cream Sandwich is de hardste stijger met 16%, in juli 2012. Tijdens het opzetten van het project dient hier een weloverwogen keuze gemaakt te worden.
Stap 4. Directory structuur Tijdens het opzetten van het project zijn ook al verschillende directories in de Android SDK langs gekomen. De belangrijkste voor het ontwikkelen van een HTML 5 App is de directory assets/www. Dat is in feite de documentroot, zoals deze ook gebruikt wordt bij het ontwikkelen van een website. In deze directory is de index.html de eerste file die gestart wordt. Het is aan te bevelen om vervolgens de CSS, JS en graphics (GFX) in subdirectories te plaatsen.
25
HTML 5 App
Eclipse explorer voor Android
Stap 5. Icoon & start-up scherm Door te klikken op een icoon wordt de App gestart. Dit icoon representeert de App en wordt getoond op het scherm en in de App store. Na klikken op het icoon verschijnt vervolgens een zogenaamd ‘splash screen’/start-up scherm. Dit is het plaatje dat getoond wordt tijdens het opstarten van de App. Het icoon en start-up scherm moet voor ieder platform apart ingesteld worden. Bij Android wordt het start icoon gedefinieerd in de XMLmanifest file: android:icon="@drawable/ic_launcher" In de directory res/drawable* staat de file ic_launcher.png, dit is het icoon.
26
HTML 5 App Voor het tonen van een start-up scherm, tijdens het laden van de App, worden voor Android twee regels code gebruikt. Voeg deze regels toe aan de belangrijkste Java file, waar de HTML geladen wordt. Deze file heeft dezelfde naam als het Android project wat is aangemaakt: super.setIntegerProperty("splashscreen", R.drawable.splash); super.loadUrl("file:///android_asset/www/index.html", 10000);
Met deze code blijft het splash screen tien seconden staan, na het laden van de App kan het screen eventueel eerder verwijderd worden met: setTimeout(function() { navigator.splashscreen.hide(); }, 2000);
Ook het splashscreen, splash.png, moet gekopieerd worden in de res/drawable* directories, net als het start icoon.
Stap 6. Schermgrootte & ‘Responsive design’ Er zijn verschillende formaten waar rekening mee gehouden kan/moet worden. Android verdeelt de formaten met een eenheid: 'dp', dat staat voor density pixel. Lees hierover meer op: http://developer.android.com/guide/practices/screens_support.html. Een density pixel is hetzelfde als een gewoon pixel (px) bij een dichtheid van het scherm van 160 dpi (dot per inch). Dit wordt de gemiddelde dichtheid genoemd. Bij deze dichtheid is het meest geschikte formaat voor een button 48x48 pixels, zodat comfortabel met een vinger aangewezen kan worden. Bij een dichtheid van het scherm van 240 dpi is de density 1,5 x zo groot. Dat betekent dat op het scherm ook 1.5 keer zo grootte buttons moeten staan, 72x72 pixels dus, om hetzelfde formaat button te creëren voor een vinger. Verschillende densities zijn:
low: 120 dpi, 36x36 buttons medium: 160 dpi, 48x48 buttons high: 240 dpi, 72x72 buttons xhigh: 320 dpi, 96x96 buttons
Verschillende schermgrootte worden uitgedrukt in density pixels:
small: 426dp x 320dp normal: 470dp x 320dp large: 640dp x 480dp xlarge: 960dp x 720dp
27
HTML 5 App Als voor Android specifiek ontworpen wordt, dan kan voor ieder formaat het juiste plaatje gemaakt worden en in de daarvoor bestemde directory neergezet worden. De Android SDK bepaalt dan welk plaatje het meest geschikt is voor het apparaat waar de App op draait. Verschillende schermgrootte en ontwerp van het scherm kan echter ook met CSS3 opgelost worden. Dat wordt hieronder uitgelegd. Schermtype definitie Het design van een App is hier van cruciaal belang. De drie belangrijkste designs die zijn te onderscheiden zijn:
Ontwikkel voor een smartphone o width: < 700 o orientation: portrait ( 1 kolom) o dpi: 160 Ontwikkel voor een tablet o width: > 700 & < 1000 o orientation: landscape (2 kolom) o dpi: 160 Ontwikkel voor een laptop o width: > 1000 o orientation: landscape (3 kolom) o dpi: 160
Deze designs zijn ook uit te voeren in hogere resolutie
Ontwikkel voor high resolution: laptop, iPad3 & new smartphones o Width: ALL o Orientation: ALL o dpi: > 240
Met een combinatie van deze designs kan voor veel devices ontwikkeld worden. In de voorbeeld App die is gemaakt komt dit tot uiting in een drie koloms applicatie voor laptop, twee koloms applicatie voor een tablet en dezelfde data in één kolom voor een high resolution smartphone.
28
HTML 5 App
Drie koloms webapp voor laptop
Twee koloms tablet layout
29
HTML 5 App
Eén kolom smartphone layout
Het voorbeeld van de code om dit te realiseren wordt in de webapp gegeven. Deze specifieke layout staat in de HTML 5 Referentie onder het onderwerp ‘Responsive design’. Als gebruik wordt gemaakt van ‘responsive design’ code, dan past de opmaak van het scherm zich automatisch aan aan de grootte van het scherm. Ook past de opmaak zich aan als het scherm geroteerd wordt, in portrait of landscape mode. Overigens kan, indien gewenst, de App in portrait of landscape mode geforceerd kan worden. In de Android XMLmanifest file moet het volgende opgenomen worden als de App alleen in landscape mode moet worden getoond: android:screenOrientation="landscape" Images en text grootte De button grootte is in het vorige hoofdstuk al ter sprake gekomen. Normale buttons zijn 48x48 pixels. Voor high density schermen wordt 72x72 pixels gebruikt. Voor text grootte geldt hetzelfde. Normale text grootte is 12 pt. Voor high density schermen wordt dan 18 pt gebruikt, zodat de tekst leesbaar blijft. Voor verschillende densities kunnen verschillende plaatjes gebruikt worden. Let wel op dat alle plaatjes in CSS gedefinieerd moeten worden om dit te laten werken.
30
HTML 5 App Een alternatief is om van vector images gebruik te gaan maken in SVG. Vector images is ook een nieuw HTML 5 element en .svg files kunnen gebruikt worden in de tag. Een tool om SVG images te maken is Inkscape, http://inkscape.org/.
Stap 7: Events & ‘Touch GUI’ Het gebruik van de applicatie is event gestuurd. Als er iets gebeurt met het apparaat, dan krijgt de applicatie dat te horen van Phonegap en daar moet iets mee gebeuren. Dit zijn events zoals: de applicatie is gestart, de batterij raakt op, de netwerk verbinding valt weg. De Phonegap events worden beschreven op: http://docs.phonegap.com/en/2.0.0rc1/cordova_events_events.md.html#Events De belangrijkste events die voor zowel Android als iOs te herkennen zijn, zijn:
deviceready, is de applicatie gestart en klaar voor gebruik pause/resume, de applicatie is gepauzeerd en hervat online/offline, de applicatie heeft wel/geen netwerkverbinding batterycritical/batterylow/batterystatus, de batterij status krijgen/opvragen.
Aan de andere kant geeft de gebruiker input aan de applicatie, daar moet ook op gereageerd worden, deze touch en swipe events worden door de frontend library behandeld en die geeft bijvoorbeeld door:
Tab, de gebruiker raakt het scherm aan. SwipeLeft, de gebruiker veegt naar links. SwipeRight, de gebruiker veegt naar rechts. Etc.
Een overzicht van JQueryMobile events staat op: http://jquerymobile.com/test/docs/api/events.html Volgorde Let op, eerst moet “deviceready” afgevangen worden, dan de rest pas. Een aan te bevelen volgorde voor het afhandelen van events is: 1. Fase 1, laad het ‘ondeviceready’ event na het laden van de index.html pagina. a. Laad fase 2 tot 4 na het ‘ondeviceready’ event, zodat zeker is dat de App er klaar voor is. 2. Fase 2, laad andere events van Phonegap, zoals de batterij status 3. Fase 3, Laad de user input events 4. Fase 4, Laad overige applicatie specifieke events. De code voor het afvangen van deze Phonegap events is te raadplegen op de webapp en staat in de file event.js. Deze staat in de HTML Referentie onder het kopje ‘Touch GUI’.
31
HTML 5 App Meer over gebruiker events Voor het opvangen van gebruiker events zijn verschillende Javascript libraries ontwikkelt. Voor een willekeurig overzicht zie: http://www.queness.com/post/11755/11-multi-touch-and-touch-eventsjavascript-libraries. Een aantal libraries zijn geprobeerd, zoals hammer.js en QuoJS.js omdat deze klein zijn en alleen focussen op user input van tablets. Maar uiteindelijk is besloten om met jQueryMobile aan de slag te gaan omdat deze de events het beste registreert. Let op dat in de Android XMLmanifest file de volgende regel goed is gespecificeerd, zodat oriëntatie veranderingen van het tablet/smartphone juist opgevangen worden: android:configChanges="orientation|keyboardHidden|screenSize" Zorg er ook voor dat de <scripts> in de header geladen worden en niet in de body. Als scripts in de body worden geladen, dan zal jQueryMobile alle scripts dubbel uitvoeren. Zie http://jquerymobile.com/demos/1.1.1/docs/pages/phonegap.html voor specifieke Phonegap tips voor jQueryMobile.
Stap 8: Off You Go! Nu de belangrijkste stappen genomen zijn, kan een eigen App in HTML 5, CSS3 en javascript gemaakt worden! Succes!
32