Publikoval Michal Kočí dňa 17.5.2014 o 15:08 v kategórii Mobilné aplikácie
Keď som začal písať o vývoji mobilných aplikácií cez Cordovu (PhoneGap), mal som za sebou skúsenosti s vývojom pre iOS. Výhoda tohto typu aplikácií má byť najmä v podpore viacerých operačných systémov a keďže vieme, že veľa Audiolibrix zákazníkov používa Android, ďalším logickým krokom bol vývoj Android verzie aplikácie. Tá je hotová a dnes sa pozriem na niektoré veci, ktoré bolo treba riešiť, môže vám to dať predstavu, či je tak jednoduché portovať aplikáciu pre ďalšiu platformu...
Audiolibrix aplikácia má za cieľ užívateľom, ktorý si na audioknižnom webe audiolibrix.com zakúpili audioknihu, uľahčiť jej počúvanie - musí byť jednoduché si audioknihu stiahnuť priamo do zariadenia a následne ju počúvať. To sa nám evidentne podarilo s iOS aplikáciou, súdiac na základe spätnej väzby od zákazníkov a tak som sa vydal na portovanie na Android. Cesta to nebola najľahšia, o to viac však poteší, keď nám užívatelia napíšu a majú z aplikácie radosť.
Gro aplikácie teda tkvie v sťahovaní a v prehrávaní MP3 súborov a obe funkcionality musia fungovať aj na pozadí. Ostatná funkcionalita sú už len drobnosti, ktoré však dotvárajú celok.
Na mojom školení programovania mobilných aplikácií v Cordove vás upozorním na problémy, s ktorými sa môžete stretnúť pri vývoji mobilnej aplikácie pre viac systémov. Pokiaľ sa chcete rýchlo a ľahko naučiť programovať mobilné aplikácie v Javascripte, príďte na moje školenie.
Začať treba zariadením, teda jeho obstaraním. Ako pri vývoji pre iOS, môžete používať emulátor, ale iba do istého momentu. Vo finále aj tak aplikáciu musíte vyskúšať na fyzickom zariadení a riadne otestovať. Pri tejto aplikácii je najlepším testom stiahnuť si pár audiokníh a vypočuť si ich.
Najlepšie je totiž sa vžiť do role používateľa a to sa dá iba tak, že sa jeho role ujmete. Boli by ste prekvapený, koľko vecí vás pri takomto testovaní napadne. Ak si teda z tohto článku odnesiete jedinú vec, nech je to táto: testujte najviac ako sa dá a to na fyzickom zariadení. Len tak nadobudnete dôveru vo vašu aplikáciu. Pár minútové testovanie na emulátore je na nič...
Výber zariadenia bol jednoduchý, vybral som si to zariadenie, čo používa najviac Android používateľov. Ak máte web a chodia vám na neho zákazníci z mobilov, pozrite si štatistiky zariadení. Ak nemáte, alebo im moc neveríte, nájdite si štatistiky na webe, napríklad tieto.
Ja som teda zaobstaral Samsung Galaxy S3, najpoužívanejší Android telefón s dostatočným výkonom (nemá zmysel testovať len na high-end telefónoch, zožeňte si radšej výkonovo slabší). Navyše, cena tohto telefónu je viac než prijateľná (dá sa v momente písania tohto článku zohnať v normálnych obchodoch od 250 EUR).
Ak máte viac zariadení, tak super. Ja som ešte testoval na tablete, Asus MemoPad 7 (ešte starý model, nie HD). A, ak nebodaj máte ďalších ľudí, ktorí vám s testovaním vedia pomôcť, môžete ich zapojiť do alfa alebo beta testovania, o tom viac nabudúce.
Tiež si pozrite, ktoré verzie Androidu chcete podporovať, začnite štatistikami od Google. Vyše 80% používateľov má už Android 4 a vyšší a na ňom je podpora HTML a CSS výborná, tak sme začali s podporou týchto systémov. Zvažujeme, že pridáme podporu aj starších verzií, na to je však vždy čas. Zvážte pomer času, ktorý musíte vynaložiť a záberu zariadení, ktoré získate. U nás to bolo s minimálnym nákladom vyše 4000 rôznych zariadení a vyše 80% používateľov.
Toto je presne jeden z prípadov, kedy oceníte riadne testovanie. Prehrávanie fungovalo, dokonca aj na pozadí. Asi 40 minút. Potom skončilo. Alebo skončilo rýchlejšie, ak som si počas počúvania pustil viacero rôznych aplikácií. Ak by som nedostatočne testoval, žil by som v pocite asbolútnej funkčnosti, z ktorého by ma vyviedli až používatelia. Ak vôbec, mohla by ich táto nefunkčnosť odradiť od používania bez toho, aby nám dali vedieť. A to by bolo nepríjemné.
Nájsť riešenie bolo trochu zložitejšie, myslel som, že by malo stačiť požiadať o wake lock (zjednodušene povedané požiadavka aby systém vašu aplikáciu neukončil), ale nestačilo. Riešením bolo až spraviť službu, ktorá beží počas prehrávania.
Tak či tak, je to problém, ktorý musíte riešiť napísaním natívneho kódu v Jave, takže ak chcete vyvíjať pre Android, znalosť Javy sa vám bude hodiť, nevraviac o znalosti platformy - je nanajvýš vhodné poznať základné koncepty platformy (activity, service, wake lock, intent, ...). Váš život vám to razantne uľahčí.
Na iOS môžete prehrávanie integrovať so zamykacou obrazovkou a ovládacím centrom. Na Androide (do verzie 4.4) nič také nie je. Avšak, je pre užívateľa dobré, aby si bol vedomý, že sa niečo prehráva a aby sa vedel rýchlo do aplikácie prepnúť. Na Androide je na to nanajvýš vhodné použiť notifikácie - tak bude užívateľ vidieť vašu ikonu v notifikačnom riadku a bude sa vedieť prekliknúť do vašej aplikácie.
A to je ďalšia ukážka toho, aké dôležité je testovanie a ako sa vám bude hodiť znalosť platformy. Preto ešte raz, majte vždy na pamäti oboje - riadne testujte a oboznámte sa s možnosťami platformi.
Venujte pozornosť aj tomu, kde ukladáte dáta, či rešpektujete zvyklosti platformy. Cordova má plugin na ukladanie dát (org.apache.cordova.file), ten však nedávno prešiel razantnou zmenou a môžete si ho teraz nakonfigurovať tak, aby ukladal do rootu SD karty alebo do priečinku vašej aplikácie.
Ja som na zatiaľ zvolil priečinok aplikácie, i keď každá z týchto dvoch možností má výhody ale aj nevýhody. Ak budete ukladať na SD kartu, uľahčíte pamäti telefónu. Na druhej strane ale nebudete mať nad dátami kontrolu - čo ak ich užívateľ vymaže, čo ak vymení kartu alebo čo ak odinštaluje vašu aplikáciu (dáta ostanú na karte).
Ak budete dáta ukladať do priečinku vašej aplikácie, síce zaberáte miesto v telefóne (nie vždy to čo si užívateľ želá), na druhej strane máte však dáta pod väčšou kontrolou. A nezabudnite, ak ukladáte viac dát, dajte užívateľovi možnosť ich spravovať - my napríklad povoľujeme užívateľovi audioknihy jednoducho z telefónu odstrániť.
Aplikácia vznikala pre iOS, ktoré je známe tým, že celé ovládanie aplikácie sa odohráva v rámci nej. iOS zariadenia majú len jedno tlačítko a aj to slúži len na prepnutie sa do inej aplikácie či do domovskej obrazovky.
Naproti tomu Android má dve tlačítka, pridanie podpory ktorých určite zvážte. Ide o tlačítko späť a tlačítko menu. Užívatelia sú na tieto tlačítka zvyknutý a tak ak majú zmysel, určite naprogramujte ich podporu do aplikácie. Vaša aplikácia sa tak bude viac tváriť ako natívna a uľahčíte užívateľom život.
V našej aplikácii máme hlavné menu, preto sme tlačítko menu zapojili tak, aby toto menu zobrazilo či schovalo. Obdobne, na niektorých záložkách máme vnorenie do detailov, z ktorých sa dá dostať tlačítkom na UI (tlačítko šipky späť). A keďže sa jedná o funkcionalitu návratu, logicky sa hodí, aby sa dala vyvolať stlačením Android tlačítka späť.
Ak chcete túto podporu pridať, pozrite sa na udalosti menubutton a backbutton.
Intenzívnym testovaním (spomínal som už, aby ste testovali čo najviac a na fyzickom zariadení?) môžete naraziť na ďalšie problémy. Napríklad, prehrávam si audio a začne zvoniť telefón. A audio sa veselo prehráva ďalej...
V niektorých prípadoch vám samotná Cordova moc nepomôže a budete si jednoducho musieť napísať vlastný plugin. Ako napríklad, keď budete chcieť reagovať na zmenu stavu telefónu (zvoní, hovor začal, hovor skončil) či na iné udalosti (odpojené sluchátka).
Ak som to ešte nespomínal, zoznámte sa s platformou, pre ktorú vyvíjate. Aj ak nechcete programovať v Jave, dobrá kniha o vývoji pre Android nezaškodí...
Naportovať aplikáciu na inú platformu cez Cordovu sa samozrejme dá, ale nie je to bezpracné. Nechcem vás od toho odhovoriť, to určite nie. Skôr som vás chcel pripraviť na to, že to nemusí byť úplne triviálne (v závislosti na tom, ako moc sa od štandardnej Cordova funkcionality odkláňate), rozhodne to ale možné je. A ak vás riešenie problémov baví, určite sa pri tom zabavíte ako ja...
Ak nechceš premeškať príspevky ako je tento, sleduj ma na Twitteri, alebo ak máš RSS čítačku, môžeš sledovať môj RSS kanál.