BUDAPESTI MŰSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM HÍRADÁSTECHNIKAI TANSZÉK
DIPLOMATERV Mádi Gábor mérnökjelölt részére
Feladat:
NFC technológia nyújtotta lehetőségek vizsgálata Android platformon
Feladat leírása:
Ismerje meg az NFC technológia működését és fizikai hátterét
Végezzen teszteket mobiltelefonokkal
Tervezzen NFC segítségével megvalósítható szolgáltatást
Alakítsa ki a fejlesztőkörnyezetet és készítsen tesztalkalmazást
I
Nyilatkozat
Alulírott Mádi Gábor, a Budapesti Műszaki
és Gazdaságtudományi
Egyetem
Villamosmérnöki és Informatikai Kar hallgatója kijelentem, hogy ezt a szakdolgozatot meg nem engedett segítség nélkül, saját magam készítettem, és a szakdolgozatban csak a megadott forrásokat használtam fel. Minden olyan részt, melyet szó szerint, vagy azonos értelemben, de átfogalmazva más forrásból átvettem, egyértelműen a forrás megadásával megjelöltem.
________________________ Mádi Gábor hallgató
Budapest, 2011. november 30.
II
Kivonat A kezdetben termékek azonosítására kifejlesztett vonalkód, majd a QR (Quick Response)-kód, vagy a Data matrix, mind optikai elven működő azonosító címkék. A QR-kódot manapság azonban egyre többen használják adatok tárolására, vagy akár fizetésre is [74]. A következő lépés a rádiófrekvenciás azonosításra szolgáló eszközök (RFID), majd az NFC (Near Field Communication) alapú technológiák megjelenése volt. Az NFC technológia a következő néhány évben meghatározó szerepet fog betölteni az új fejlesztéseknél. A Google és sok gyártó jelenleg azon dolgozik, hogy az NFC a mobil készülékek részét képezze, és így virtuális pénztárcaként legyen használható [63]. Magyarországon is egyre nagyobb az érdeklődés a technológia iránt, ezt mutatja a Magyar Mobil Tárca Egyesület megalakulása is. Az NFC-t és a QR-kódokat azonban nem csak fizetésre lehet használni. Felgyorsult világunkban egyre nagyobb szerepet játszanak a releváns információk, a személyre szabott hirdetések, ajánlórendszerek. Diplomatervem célja, hogy a QR-kódok és az NFC/RFID részletes bemutatása valamint a mobilpiac helyzetének felvázolása után a jelenleg legnépszerűbb mobil platformra, az Androidra készítsek alkalmazást. A megvalósítandó feladat egy személyes információk alapján releváns hirdetések megjelenítésére szolgáló alkalmazás QR-kód és NFC felhasználásával. A feladat része egy webes felület fejlesztése is, ahol a kereskedők különböző paraméterekkel hirdetéseket vihetnek fel. Ugyanígy szükséges az Android alkalmazást adatokkal kiszolgáló program megírására is. Az elkészült rendszert természetesen több böngészőben és többféle készülékkel is tesztelni fogom. A diplomaterv során megvalósítandó ötlet a BME-Infokom Innovátor Nonprofit Kft. Hallgatói Ötletbörze Pályázatán első helyezést ért el.
III
Abstract Bar codes initially used for the identification of the products, then QR (Quick Response)-code or Data Matrix, are both based on optical technology. Nowadays QR-codes are widely used for storing data or even paying as well [74]. The next step was the introduction of Radio-Frequency Identification (RFID) and NFC (Near Field Communication) technologies. In the next few years NFC technology will determine the new developments. Google and several manufacturers are currently working on NFC to become a part of mobile devices so phones can be used as a virtual wallet [63]. Hungary is also showing a growing interest for the technology, which is shown by the establishment of the Magyar Mobil Tárca Egyesület (Hungarian Mobile Wallet Association). But NFC and QR-codes are used not only for payment. In our accelerated world there is an increasing role of relevant information, personalized ads, and referral systems. The purpose of my thesis is to describe how QR-codes and NFC work, then to present today’s mobile trends and technologies, and to create an application for the world’s most popular Android platform. So the task is to create an application that displays relevant ads for the customers using NFC and QR-codes and their personal data. The other part of my thesis is to create a web interface where merchants can upload their advertisements with different parameters. Similarly it is also a task to write an application server program that ensures the data for the Android application. Of course, the created system will be tested in different browsers and with different mobile devices. The idea of my thesis has won the first prize in a Brainstorming Competition organized by BME-Infokom Innovátor Nonprofit Ltd.
IV
Tartalomjegyzék Nyilatkozat .................................................................................................................................. II Kivonat ...................................................................................................................................... III Abstract ..................................................................................................................................... IV Tartalomjegyzék......................................................................................................................... V 1. Bevezetés ................................................................................................................................ 1 2. Termékek azonosítása ............................................................................................................. 2 2.1. A vonalkód ....................................................................................................................... 2 2.2. QR-kód és Data matrix .................................................................................................... 2 2.3. Rádiófrekvenciás azonosítás, RFID ................................................................................. 4 2.3.1. Az RFID rendszer felépítése ..................................................................................... 5 2.3.2. Működési típusok ...................................................................................................... 6 2.3.3. Csatolási módok ........................................................................................................ 6 2.3.4. Antennák ................................................................................................................... 7 2.3.5. Alkalmazott modulációk ........................................................................................... 8 2.3.6. Frekvenciatartományok ............................................................................................. 9 2.3.7. Memória .................................................................................................................. 10 2.3.8. Szabályozó szervezetek........................................................................................... 10 2.3.9. RFID alkalmazások ................................................................................................. 11 2.3.10. Személyiségi jogok ............................................................................................... 11 2.3.11. Biztonság............................................................................................................... 12 2.3.12. Internet of things (IoT) .......................................................................................... 12 2.4. NFC (Near Field Communication)................................................................................. 12 2.4.1. NFC a mobil eszközökben ...................................................................................... 13 2.4.2. NFC címke szabványok, NDEF felépítés ............................................................... 14 2.4.3. NFC alkalmazások .................................................................................................. 16 2.4.4. NFC biztonság......................................................................................................... 17 2.4.5. Az NFC jelenlegi helyzete ...................................................................................... 17 3. Az Android platform ............................................................................................................. 20 3.1. A platform felépítése ...................................................................................................... 21 3.2. A rendszer főbb jellemzői .............................................................................................. 21 3.3. Android Market .............................................................................................................. 22 3.4. Megjelent Android verziók ............................................................................................ 23 3.5. Jelenlegi helyzet, trendek ............................................................................................... 25 3.5.1. Okostelefon platformok rövid bemutatása .............................................................. 25 V
3.5.2. Tabletek megjelenése .............................................................................................. 28 3.5.3. Trendek ................................................................................................................... 30 4. Fejlesztés Android platformra ............................................................................................... 31 4.1. Fejlesztőkörnyezet összeállítása..................................................................................... 32 4.2. Projekt létrehozása ......................................................................................................... 33 4.3. Emulátor és valódi készülékek beállítása ....................................................................... 34 5. A feladat leírása .................................................................................................................... 35 5.1. Specifikáció.................................................................................................................... 35 5.2. Életképesség, megvalósíthatóság ................................................................................... 38 6. A feladat megvalósítása ........................................................................................................ 40 6.1. Tervezés ......................................................................................................................... 40 6.1.1. Adatbázis felépítése ................................................................................................ 40 6.1.2. Webes felület elkészítése ........................................................................................ 41 6.1.2.1. Üzleti egységek létrehozása, módosítása ......................................................... 42 6.1.2.2. Hirdetések feltöltése ......................................................................................... 43 6.1.3. Android kliens megtervezése .................................................................................. 44 6.1.3.1. Android alkalmazások felépítése ..................................................................... 44 6.1.3.2. Felhasználói felület, menük ............................................................................. 46 6.1.3.3. A tervezett alkalmazás felépítése ..................................................................... 47 6.1.3.4. Tesztelés ........................................................................................................... 62 6.1.3.5. Melléklet .......................................................................................................... 63 8. Összefoglalás ........................................................................................................................ 64 8.1. Továbblépési lehetőségek .............................................................................................. 64 Köszönetnyilvánítás ................................................................................................................. VII Ábra és táblázatjegyzék ......................................................................................................... VIII Irodalomjegyzék......................................................................................................................... X Rövidítésjegyzék .................................................................................................................... XIV
VI
1. Bevezetés A tömegtermelés, a globalizáció, és az országokon, kontinenseken átívelő termékszállítás következtében nyilvánvalóvá vált, hogy szükség van a termékek, eszközök egyszerű, és gyors azonosítására. A kezdeti próbálkozások után a mai vonalkód lett az első, világszerte elterjedt, szabványos megoldás. A hatvanas évek elején kezdték el fejleszteni, kereskedelmi forgalomba 1974-ben került, először az Egyesült Államokban egy 10 darabos rágógumi csomagolásán [8]. A vonalkódot többször is továbbfejlesztették, majd megjelent a QR-kód, vagy a Data matrix, melyek még szintén optikai elven működnek. A következő lépés a rádiófrekvenciás azonosításra szolgáló eszközök (RFID), majd az NFC (Near Field Communication) alapú technológiák megjelenése volt. E sorok írásakor, 2011-ben, már éles RFID/NFC rendszerek is működnek, például az OTP Bank által is bevezetett MasterCard PayPass [2], vagy a Sziget Fesztiválon a Metapay és a Vodafone közös fejlesztése [3], mely tesztjelleggel biztosít NFC alapú mobilfizetést az érdeklődőknek. A jövőben a mobilfizetés szerepe felértékelődik, hiszen képesek leszünk egy eszközben több kártyát használni, gyorsabban, biztonságosabban, sorban állás nélkül fizetni. A mobilszolgáltatók is szeretnék kivenni részüket a technológiából, így részükről nagy az igény a SIM kártyával összekötött megoldásokra. Néhány hónappal ezelőtt, a Deutsche Telekom is bejelentette, hogy elindítja NFC alapú szolgáltatásait [4]. Diplomatervem célja, hogy megismerkedjek a rádiófrekvenciás azonosítással, az NFC-vel, és a Google által biztosított Android mobil platformon egy NFC alapú alkalmazást tervezzek és megvalósítsak.
1
2. Termékek azonosítása 2.1. A vonalkód A vonalkód optikai elven működő azonosító címke, mely különböző vastagságú világos és sötét függőleges vonalakból áll. A vonalak alatt gyakran a számokat is elhelyezik, így ha a leolvasás meghiúsul, a számok alapján még mindig használhatjuk a kézi azonosítást.
2.1. ábra – Az UPC és az EAN-13 vonalkód
A vonalkód tartalmazza a gyártó ország 3-jegyű kódját, a gyári számot és a termék cikkszámát. Rendkívül széles körben elterjedt. A vonalkód leolvasása során a fekete vonalak közötti fehérek hordozzák az információt, erről verődik vissza ugyanis a leolvasó által kibocsátott fény. A különböző vastagságú és távolságú fehér vonalak számsorozatot kódolnak, ezt szokták feltüntetni a vonalkód alatt. Amerikában az UCC (Uniform Code Council) által kifejlesztett 12-jegyű UPC (Universal Product Code) elnevezésű verzió a leginkább elterjedt, míg Európában ennek egy továbbfejlesztése, a 13-jegyű EAN (European Article Numbering) (2.1. ábra). A kódolásra jelen keretek között nem térek ki.
2.2. QR-kód és Data matrix A vonalkódok továbbfejlesztésére azért volt szükség, mert szerettek volna több információt tárolni közel ugyanakkora helyen. 1994-ben a japán Denso-Wave nevű cég kifejlesztette a kétdimenziós vonalkódot, a QR (Quick Response – gyors válasz) kódot (2.2. ábra).
2.2. ábra – QR-kód és Data matrix
2
A QR-kódot nem csupán termékazonosításra lehet használni: plakátokon, hirdetéseken is elhelyezhető, és a legtöbb mobiltelefon egy beépített kamerával képes értelmezni. A QR-kód többféle méretben létezik, és akár több ezer karaktert is képes tárolni. A QR-kód felépítése a 2.3. ábrán látható. A kódok sarkaiban ún. referencianégyzetek találhatóak, melyek lehetővé teszik a könnyebb pozícionálást, és hogy bármilyen szögből feldolgozható legyen az információ. A QR-kód egyébként nagyon könnyen skálázható, összesen 40 féle verziót különböztethetünk meg (Version 1-40). Nagyobb területű kódok az alapegységek összeillesztéséből adódnak.
2.3. ábra – A QR-kód felépítése [60]
A QR-kódok Reed-Solomon hibajavító kódolást alkalmaznak. 4 féle hibajavítási szintet különböztethetünk meg: L, M, Q, és H. Minél inkább biztosítva vagyunk a hibákkal szemben, értelemszerűen annál kevesebb adatot tudunk tárolni ugyanazon a területen. A legelterjedtebb verzió a Level L, melynek segítségével a kód 7%-os vesztesége esetén is vissza tudjuk állítani az elveszett információt.
2.4. ábra – Wikipedia linket tartalmazó QR-kód [60]
3
A legnagyobb alapterületű, Version 40 kód, Level L hibajavítással maximum 7089 számot vagy 4296 betűt lehet tárolni [60]. A 2.3. ábrán látható formátuminformáció részben gyakorlatilag két dolgot lehet definiálni: a hibajavító kódolás szintjét, valamint a maszkolás módját. Utóbbiak töltik ki a teljes területet. A formátuminformáció BCH kódolással van védve, valamint teljes másolata is megtalálható a kódban. Az adatmezők egyébként jobbról balra cikkcakkban helyezkednek el. A Wikipedia linkjét tartalmazó QR-kód a 2.4. ábrán látható. A QR-kódok óriási előnye, hogy szinte minden okostelefon képes olvasni, sőt még akár a régebbi készülékek is, ugyanis például a Kaywa Reader rendelkezik Java ME nyelven írt klienssel, amely a legtöbb hagyományos készüléken is működik. Már itthon is egyre több cég kezdi használni, egyre több plakáton van jelen, és egyre inkább bevonul a köztudatba. A Data matrix szintén egy kétdimenziós vonalkód, melyet a QR-kóddal szemben inkább csak termékazonosításra használnak. 2005-ben fejlesztették ki, és széles körben alkalmazzák az iparban. Ez a kód is olvasható egyszerű kamerákkal. Felépítése a QR-kódhoz hasonló, az információt pixelekben tárolja. A legnagyobb méret akár 2335 betűt képes tárolni. A pozícionáláshoz nem referencianégyzeteket használ, hanem a kód bal oldalán és az alján végigfutó vonalakat. Az itt említett kódokon kívül még számos variáció létezik: Aztec Code, Maxicode, GS1 Datamatrix, de jelen diplomatervnek nem célja mindezek részletes ismertetése.
2.3. Rádiófrekvenciás azonosítás, RFID Az előző megoldások legnagyobb hátránya, hogy a leolvasó eszköznek „látnia kell” a hordozó vonalkódot, és mivel optikai elven működnek, sokszor előfordulhat hibás leolvasás a gyengébb minőségű kamerák és a nagyobb információt hordozó kódok esetén. Erre próbál megoldást biztosítani az RFID (Radio-Frequency IDentification). A rádiófrekvenciás azonosítás a közeltérben, néhány méteren belül zajló kommunikáció, és számos előnye van a vonalkóddal szemben [5]: - a vonalkódok rendszerint papírra vannak nyomtatva, ezért könnyen megsérülhetnek, - a vonalkódok csak egy azonosítót tartalmaznak, nem képesek további információt tárolni, - a vonalkódok csak optikai elven, néhány centiméter közelségből olvashatóak le. Az RFID rendszerek elődjével először egy skót fizikus, Sir Robert Alexander Watson-Watt kezdett el foglalkozni, majd a második világháborúban, a radarok fejlesztésekor készültek el az első passzív transzponderek [5]. A háború után és a félvezető technológia terjedésével az RFID polgári alkalmazásokban fejlődött tovább. Az első RFID-szabadalom az USA-ban Mario W. Cardullo nevéhez fűződik, aki levédte az aktív RFID-taget, ami már újraírható memóriával rendelkezett. A 80-as években további fejlődésen ment keresztül a rendszer: Európában először Norvégiában
alkalmazták
autópálya-díjfizetésre,
Amerikában
pedig
vasúti
konténerek
azonosítására. 1999-ben alapult az Auto-ID Center a Massachusetts Institute of Technology 4
egyetemen, ahol kifejlesztették az olcsó microchipet is tartalmazó RFID-taget. Az Auto-ID ötlete volt, hogy a tagben csak egy azonosítót tároljanak, és a háttérinformációt egy Internetes adatbázisból kapják. Az így elérhető árcsökkenésnek köszönhetően rohamléptékben kezdett fejlődni a technológia, és 1999 és 2003 között több száz multinacionális cég csatlakozott az AutoID-hez [51]. Kialakították az EPC (lásd később) számozási rendszert termékek azonosítására és megalkották a biztonságos háttéradatbázist. 2003-ban az Auto-ID átadta a technológiát az UCCnek, majd létrejött az EPCglobal nevű szervezet. Még ez év októberében megszűnt az Auto-ID Center. Az RFID világméretű elterjedéséről 2006 óta beszélhetünk.
2.3.1. Az RFID rendszer felépítése Az adatot egy kis RFID chip hordozza, melyhez egy antenna van hozzákötve. A rendszer tehát 3 fő építőelemből áll: egy címkéből (tag, más néven: transzponder), egy olvasóból (lekérdező egység), és egy háttér adatbázisból. (2.5. ábra)
2.5. ábra – Az RFID rendszer felépítése
A transzponder (transmitter=adóvevő, responder=válaszoló), vagyis az információt hordozó egység egy termékhez, tárgyhoz rendelt címke. Előállítása egyre olcsóbb, korai fázisban azonban leginkább az ára miatt nem terjedt el. A kártyát, vagy címkét az olvasó közelébe helyezzük, ekkor az olvasó által kibocsátott rádiófrekvenciás jel elég áramot indukál az antennában ahhoz, hogy a chipet működésre bírja, és az információt visszaküldje az olvasónak. Az antenna tehát egyrészt energiát gyűjt össze, „árammal látja el” a chipet, másrészt az válaszadásban is szerepe van. Az olvasó egy rögzített, vagy mozgatható eszköz, amely a közelébe helyezett RFID címkéből képes kiolvasni a hordozott információt. Az olvasók kétféle verziója terjedt el: vannak csak olvasásra alkalmasak (read-only) illetve vannak olvasásra és írásra (read-write) alkalmas készülékek, melyek képesek a címkék memóriájába adatot írni. Az olvasók tartalmaznak egy adóvevő modult, egy vezérlő egységet és egy csatolóelemet [10]. A háttérrendszer (egyes helyeken middleware-nek nevezik), vagyis a feldolgozó számítógép az adatokat, leolvasott információkat feldolgozza, naplózza. A jövőben egyre több mobil eszköz fog rendelkezni beépített RFID/NFC olvasóval.
5
2.3.2. Működési típusok A transzponder energiaellátás szempontjából többféleképpen működhet: A passzív RFID címkék nem tartalmaznak önálló energiaforrást, a kiolvasáshoz az olvasó generál elegendő energiát. A kommunikáció távolsága éppen emiatt limitált. A passzív tagek élettartalma viszont gyakorlatilag korlátlan, hiszen nem tartalmaznak áramforrást. Ezek a lapkák már nagyon olcsón, kis méretben (0,4×0,4 milliméter) is kaphatóak, és a papírnál is vékonyabbak. Ideális plasztik kártyákba integráláshoz. A fél-passzív címkék rendelkeznek egy apró beépített elemes energiaforrással, így folyamatosan tud működni, nincs szükség akkora energiagyűjtő antenna kialakítására. A beépített energiaforrást csak a mikrochip energiaellátására használják, a kommunikációhoz az olvasó elektromágneses terét veszik igénybe. Az aktív RFID eszközök pedig beépített energiaforrással rendelkeznek, éppen ezért nagy hatótávolságúak (több méter). Az aktív tagek mozgás közben is írhatóak, és sokkal megbízhatóbbak, mint energiaforrás nélküli társaik. Emellett szokás megkülönböztetni az RFID eszközöket adatátvitel módja szerint is. Ezek alapján beszélhetünk full duplex, half duplex valamint szekvenciális rendszerekről. A full duplex és half duplex rendszerek esetén a transzponder akkor ad, amikor az olvasó is aktív, így a transzponder felhasználja adásra az olvasó elektromágneses terét. Half duplex esetben a kommunikáció két iránya felváltva működik, míg full duplex esetben egy időben. Ezzel szemben szekvenciális esetben az olvasó által tartott periodikus szünetben történik az átvitel, ilyenkor azonban a transzponder külső áramforrást igényel, mivel nem tudja felhasználni az olvasó terét energiaforrásnak.
2.3.3. Csatolási módok Csatolási módok alatt a transzponder és az olvasó közötti kapcsolatot értjük. A csatolás fizikai tulajdonságai
alapján
megkülönböztetünk
kapacitív,
induktív,
mágneses
csatolást.
Kis
hatótávolságú rendszerek esetén a kapacitív és mágneses csatolásokat, nagyobb hatótávolság esetén pedig az induktív csatolást alkalmazzák. Jelen keretek között az egyes csatolási módokról csupán néhány szót ejtek [10]. A kapacitív csatolást (2.6. ábra) leginkább kártyás rendszerekben alkalmazzák, és kapacitásról lévén szó, a kommunikációhoz nem antennákat, hanem elektródokat használnak. Ezekben a rendszerekben az olvasó és a kártya is rendelkezik egy fém, vezető lemezzel. A chip a transzponder két lemeze között helyezkedik el, a működéshez szükséges feszültséget is a lemezektől kapja.
6
2.6. ábra – Kapacitív csatolás [10]
Az induktív csatolású (2.7. ábra) rendszerek szintén passzív energiaellátású rendszerek, az energiát az olvasótól nyerik. Az RFID tag két része ilyenkor a chip és az antennát megvalósító tekercs.
2.7. ábra – Az induktív csatolás [10]
Amennyiben a transzponder az olvasó elektromágneses terébe kerül, abban feszültség indukálódik, ez szolgál energiaellátásként. Az olvasóban egyébként egy rezgőkör van megvalósítva, melynek frekvenciája megegyezik a működési frekvenciával. A mágneses csatolás leginkább az induktív csatolásra hasonlít, itt viszont az olvasó antennája egy kör vagy U alakú ferrit mágnessel van kialakítva.
2.3.4. Antennák Bár az antennák teljesítményét általában izotróp (gömbsugárzó) antennára vonatkozva szokták megadni egy ún. EIRP (Equivalent Isotropically Radiated Power) mennyiséggel, a valóságban többnyire irányított antennákkal történik a kommunikáció. Az irányított antennák előnye, hogy egy 7
adott
irányszögbe
nagyobb
teljesítménnyel
adnak.
Ezt
a
tulajdonságot
az
antenna
iránykarakterisztikájával szokás jellemezni [10]. Az ilyen módon kapott antennanyereséget az alábbi módon szokás definiálni:
S0
S G max S0
Padó az izotróp antenna teljesítménysűrűsége 4r 2
S max a főirányban kisugárzott teljesítménysűrűség.
Így a vevőantennán vett teljesítmény:
Pvett Padó
Gadó A 4r 2
A a hatásos felület
Gadó az adóantenna nyeresége.
A fentiek alapján definiálhatjuk a szabadtéri csillapítást az alábbi módon:
a0dB 20 lg
4d
dB dB Gadó Gvett
Itt d a transzponder és az olvasó közötti távolság, a hullámhossz. A leggyakrabban használt antennatípus a dipólantenna. A dipólantennákat az alapján különböztetik meg, hogy milyen frekvencián rezonál. Így beszélhetünk például félhullámú antennáról, melynek hossza a hullámhossz fele. Két félhullámú antenna összekötéséből hurokdipól antennát kapunk. RFID rendszerek esetén inkább a patch vagy mikrosztrip antennákat használják. Ezek tipikusan egy teflon hordozó felületre szerelt fém fóliából állnak, melyek másik oldala fémmel bevont, a fóliához pedig egy mikrosztrip viszi az áramellátást.
2.3.5. Alkalmazott modulációk Az RFID rendszerekben digitális modulációs eljárásokat alkalmaznak, ezek név szerint a következőek:
ASK: Amplitude Shift Keying – Amplitúdó-billentyűzés
FSK: Frequency Shift Keying – Frekvencia-billentyűzés
PSK: Phase Shift Keying – Fázis-billentyűzés
Az analóg modulációkkal ellentétben nem a jel amplitúdója, fázisa hordozza az információt, hanem a moduláló szimbólumokhoz hozzárendelt elemi jelek sorozata. A digitális modulációk jellemzésére a bithibaarányt használják, mely kifejezhető a jel-zaj viszony (SNR) ismeretében. A szakirodalom gyakran használja az Es/N0 értéket, mely a szimbólumenergia és a zajteljesítmény sűrűség hányadosa.
8
Ennek megfelelően a jel-zaj viszony:
SNR
Es n , ahol W a zaj sávszélessége, n az időegységenkénti szimbólumok száma. N 0W
Az RFID rendszerekben leggyakrabban az ASK modulációt alkalmazzák. Ilyenkor a vivőjel amplitúdója két érték között váltakozik. E két érték hányadosa a modulációs mélység. Emellett használatos még a 2PSK és a 2FSK modulációk használata is, ahol két fázis vagy két frekvencia között váltakozik a vivőjel fázisa, frekvenciája.
2.3.6. Frekvenciatartományok Az RFID rendszerek gyakorlati felhasználhatóságát nagyban befolyásolja a működési frekvenciája, és a csatolás módja. Szintén fontos befolyásoló tényező a fent említett energiaellátás módja. Az RFID az ISM (Industrial, Scientific and Medical) frekvenciasávokban képes működni, melynek használata nem frekvencia-engedély köteles. Ezen frekvenciasávokat szokás 4 csoportra bontatni: alacsony (LF, low frequency), magas (HF, high frequency), ultramagas (UHF, ultra high frequency) és mikrohullám [10]. Az LF rendszerek alacsony frekvencián működnek, és induktív csatolást használnak. Olvasási hatótávolságuk körülbelül fél méter, előállítási költségük viszonylag magas. A HF rendszerek magas frekvencián, köztük az egész világon szabad, 13,56MHz-en működnek, és többnyire kapacitív és induktív csatolást használnak. Költséghatékonyabbak, mint LF társaik, így ezt a verziót használják leginkább a kártyás alkalmazásokban. Az UHF rendszerek kapacitív csatolást alkalmaznak, így nagy olvasási sebességgel és távolsággal rendelkeznek. Ezeket a rendszereket alkalmazzák több RFID címke együttes leolvasásakor is. frekvenciasáv
LF (alacsony)
HF (magas)
UHF (ultramagas)
mikrohullám
frekvencia
125-134 kHz
13,56 MHz
865-956 MHz
2,45 GHz
hatótávolság
< 0,5 méter
< 1,5 méter
0,5-5 méter
10 méter
általános jellemzők
viszonylag drága, induktív csatolás
olcsóbb, de rosszabb tulajdonságok
nagy tételben olcsó, jó olvasási paraméterek
fém és nedves környezetre érzékeny
energiaforrás, csatolás
ált. passzív, induktív csatolás
ált. passzív, induktív csatolás
aktív tagek, passzív kapacitív csatolással
aktív tagek, passzív kapacitív csatolással
elhasználási terület
állatok azonosítása, könyvtári könyvek, beléptető rendszerek
SmartCard, raklapok azonosítása termék nyomkövetés
logisztika, konténerek, járművek azonosítása
járműbeléptetés, mozgó járművek
2.8. ábra – RFID működési frekvenciák [11]
A mikrohullámú megoldások leginkább az UHF eszközökre hasonlítanak, viszont még gyorsabb adatátviteli sebességet garantálnak. A különböző frekvenciasávokat különböző 9
felhasználási területeken alkalmazzák. A 2.8. ábra az RFID rendszerekben használatos frekvenciasávokat mutatja be. A frekvenciák szempontjából szokás még megkülönböztetni a közeltéri kommunikációt (Near Field Communication, NFC, melyek az alacsony és a magas sávban működő eszközöket jelentik) illetve távoltéri kommunikációt (UHF és mikrohullámú sávban).
2.3.7. Memória Az RFID címke
tartalmazhat
csak olvasható, írható-olvasható és
programozható
memóriamodult. Ezekről néhány szó részletesen [7]: A csak olvasható címkék a gyártás során kapnak egy egyedi azonosítót, és ezt leolvasva a háttérrendszer biztosítja a hozzá tartozó adatokat. Tartalma nem törölhető vagy változtatható. Az írható-olvasható (RAM alapú) memóriák alkalmasak ideiglenes információk tárolására. A programozható címkék (EPROM) többször is programozhatóak, az információk egy EPROM programozó feszültségimpulzusaival változtathatóak.
2.3.8. Szabályozó szervezetek Az RFID rendszerek széleskörű elterjedéséhez elengedhetetlenül fontos a szabványok kialakítása, melyeket az alábbi szervezetek dolgoztak ki: •
EPC Global GS1 Inc. (Electronic Product Code)
•
European Telecommunications Standards Institute (ETSI)
•
Federal Communications Commission (FCC)
•
International Organisation of Standardisation (ISO)
Az RFID frekvenciakiosztását az ISO 18000-as szabvány tartalmazza részletesen. Az EPC Global GS1 szervezet egy, a korábban már ismertetett UPC rendszer továbbfejlesztése, 2005-ben jött létre az EAN és az UCC egyesüléséből, melyet több mint száznegyven ország közel egymillió tagvállalata irányít [7]. A GS1 Hungary az EPC Global GS1 nemzetközi szervezet hazai képviselője. Az EPC kód egy RFID alapú egyedi elektronikus sorozatszám, melynek segítségével minden egyes terméket egyedileg azonosíthatunk [6]. Amint elkészül egy termék és hozzá egy RFID címke az EPC azonosítóval az bekerül egy globális adatbázisba, és az EPC Global hálózat termékadatokat szolgáltat az azonosító ellenében, például gyártási dátum, származási hely, stb.
2.9. ábra – EPC kód felépítése [5]
10
Maga az EPC kód egy 96 bites kód, (2.9. ábra) mely 268 millió cég számára biztosít elegendő címet, úgy, hogy minden cég 16 millió terméket gyárthat és minden termékből 68 milliárd egyedi termék készülhet. Ez a szám elképesztően nagy, így termékek azonosítására globálisan alkalmas.
2.3.9. RFID alkalmazások A következőkben bemutatok néhány jelenleg is működő RFID alapú szolgáltatást, alkalmazást a teljesség igénye nélkül: A legismertebb alkalmazási terület az áruazonosítás, állatok azonosítása és a hulladékkezelés. De megtalálható a rendszer egyre több raktárban, gyárban, raklapokon. Ezekben a felhasználási területekben kihasználják az RFID helymeghatározó szerepét is. Az áruvédelemben szintén RFID-t alkalmaznak, mellyel sokkal biztonságosabban és finomabban állíthatóak be a riasztó berendezések. Könyvtári azonosítás: a könyvtárak évek óta próbálkoznak olyan rendszer bevezetésén, amely megakadályozhatja a lopásokat és gyorsabbá tenné a könyvtári folyamatokat. Itt az RFID azért bizonyult jó választásnak, mert a meglévő rendszerek mellé könnyen integrálható, és olcsó bevezetni. Mivel az RFID nem igényel közvetlen rálátást a leolvasáshoz, a lopások elleni védelemben is jó megoldás, ráadásul önkiszolgálóvá válhattak a könyvtárak. 2004-ig az USA-ban már több mint 300 könyvtár vezette be [5]. Az Egyesült Királyság kórházaiban is alkalmazzák, méghozzá a drágább műszerek, de akár az infúziók azonosítására is. A kórház rendszerének köszönhetően az orvosok, nővérek azonnal tudhatják, hogy melyik eszköz hol található az épületben, ezzel évente mintegy 8000 percet spóroltak meg [5]. Intelligens épületek, múzeumok, galériák is nagy szeretettel alkalmazzák, méghozzá oly módon is, hogy a látogatók kapnak egy RFID taget, és amikor egy kiállított kép, tárgy mellett elhaladtak a címke leolvasásra kerül, így könnyen visszakövethető, hogy mely művet hányan láttak. Az BME Mobil Innovációs Központ hazai fejlesztése az intelligens bevásárlókocsi. A rendszer RFID bélyegeket használ a termékek azonosítására és ezek alapján tudja meghatározni a kosárba, kocsiba helyezett termék jellemzőit.
2.3.10. Személyiségi jogok A rádiófrekvenciás azonosítás személyiségi jogi kérdéseket is felvet. A jelenlegi megoldások ugyanis lehetővé teszik, hogy egy passzív RFID kártyát annak tulajdonosának tudta nélkül a távolból leolvassunk, mely tartalmazhat személyes, egészségügyi, munkaügyi adatokat is. A személyiségi jogi kérdésekkel több kutatócsoport foglalkozik, és az Európai Unió is lépéseket tett a szabványosítás és a szabályozás irányában. 11
2.3.11. Biztonság A másik fontos szempont mely valamennyire összefügg a személyiségi jogokkal, a biztonság kérdése. Az RFID-t ugyanis hamarosan akár útlevelekben, bankjegyekben is felhasználnák. A magánszféra védelme és a hiteles kommunikáció érdekében az RFID biztonsági kutatásai az alábbi támadásokra tértek ki: lehallgatás, zavarás, azonosítás és tartalom hamisítása, blokkolás [5]. Az Európai Bizottság, az USA, és Kanada már 1996 óta foglalkozik a kérdéssel, viszont máig nem készültek el mindenre kitérő törvénytervezetek. A biztonságról részletesebben az NFC-nél ejtek szót.
2.3.12. Internet of things (IoT) Érdemes még kitérni egy viszonylag új fogalomra, mely lényegében a fenti rendszerek globális elterjedése következtében válik időszerűvé. Az Internet jövőjének is emlegetett rendszer szabványos protokollokon keresztül kapcsolná össze az egyedi címkével rendelkező tárgyakat. Az IoT alapja az aktív RFID, mely sokkal többre lenne képes, mint pusztán azonosításra. Az IPv6 bevezetése lehetővé tenné, hogy 128 bites címtartományának köszönhetően nem csak számítógépeket, hanem tárgyakat, termékeket is azonosíthassunk. Az intelligens eszközök képesek lesznek saját magukat konfigurálni a környezeti változásoknak megfelelően. E rendszer fejlesztése korai fázisban van, viszont az Európai Unió kiemelt kutatási területként kezeli, és a közeli jövőben elképzelhető lesz a megvalósulása [9].
2.4. NFC (Near Field Communication) Diplomatervem során az RFID egy speciális verziójával, a közeltéri kommunikációt megvalósító NFC (Near Field Communication) rendszerekkel fogok foglalkozni. Az NFC a Philips és a Sony által kifejlesztett kis hatótávolságon belül működő rádiófrekvenciás adatátviteli rendszer, elsősorban mobilkészülékekhez. Más szemszögből nézve az NFC nem egy RFID rendszer, csak egy vezeték nélküli adatátviteli szabvány hasonlóan az infrához, vagy a Bluetooth-hoz, de természetesen sok hasonlóságot mutat az RFID-val, és kompatibilis vele [13]. Az NFC alapú technológiák működését jelenleg több szabvány is szabályozza, többek között az ISO/IEC, az ECMA, valamint az ETSI. A karbantartásért is több társaság felelős, például az NFC Forum vagy a GSMA [52]. Az NFC működési frekvenciája 13,56 MHz (mely az egész világon szabad frekvencia), és 1020 centiméteren belül működik megbízhatóan. A 2.10. ábra két NFC eszköz kommunikációjának fizikai alapjait mutatja. A két eszköz nagy felületű antennákon keresztül kommunikál egymással.
12
2.10. ábra – NFC eszközök kommunikációja [13]
Az NFC több adatátviteli sebességet is támogat: 106, 212, 424 vagy 848 kbps átviteli sebesség is elérhető. Az átvitt csomag méretére nincs különösebb előírás, a 255 bájtnál kisebb csomagokat Short Recordnak titulálják, míg az ennél nagyobbak esetén simán a Record elnevezésű csomagtípust kell alkalmazni.
2.4.1. NFC a mobil eszközökben A piacon jelenleg többféle mobilkészülékbe építhető NFC modul kapható. A világ első NFC chippel rendelkező mobiltelefonja a Nokia 3220 volt [52]. Ezek az adóvevő egységek könnyedén programozhatóak a készülék segítségével. E rendszerek tipikus felépítését a 2.11. ábra mutatja be [13].
2.11. ábra – NFC rendszerek felépítése (nem biztonságos)
Az alkalmazások az NFC adóvevőt tartalmazó készülék memóriájában futnak. A middleware az alkalmazás vezérléséért felel, és biztosítja az interfészeket (API, Application Programmer
13
Interface), melyek segítségével az alkalmazás hozzáférhet az NFC modulhoz, és a készülék fizikai erőforrásaihoz [13]. A fenti megoldás azonban nem túl biztonságos, tekintve, hogy a felhasznált alkalmazás nincsen védve például a törléstől, vagy az illetéktelen hozzáféréstől. Ennek következtében, ha megbízható, és biztonságos átvitelre van szükség (például mobilfizetés) akkor szükség van biztonságos elemeket hordozó eszközökre is. Ezen elemeket secure elementnek hívják, és többféle módon valósítható meg. Kézenfekvőnek tűnik, hogy a biztonságos adatokat tároljuk a SIM-kártyán. Másik megoldás lehet a biztonságos memóriakártyák, vagy beépített chipek használata. Így az NFC-t használó alkalmazások ezen eszközökön, biztonságosabban tudnak futni.
2.4.2. NFC címke szabványok, NDEF felépítés A már korábban említett NFC Forum egy ipari konzorcium, mely azért jött létre, hogy továbbfejlessze
az
NFC
szabványt
és
garantálja
a
különböző
rendszerek
közötti
együttműködéseket, valamint ipari szabványokat dolgozzon ki. Az NFC Forum különbséget tesz az NFC Forum Devices (eszközök) és az NFC Forum Tags (címkék) között [61]. Az NFC Forum Device (továbbiakban NFC eszköz) egy olyan eszköz, amely a teljesíti az NFC Forum által támasztott követelményeket, vagyis támogatja az NFC Forum protokoll stacket (lásd később), és emellett együttműködik a többi eszközzel. Egy NFC eszköz az alábbi módokon tud viselkedni (2.12. ábra):
címke olvasás/írás (read/write mode),
smart kártya emuláció (card emulation),
kétirányú kommunikáció (peer-to-peer)
2.12. ábra – NFC működési módok [53],[5]
14
Egy NFC eszköz protokoll stackje író/olvasó módban az alábbi módon néz ki. (2.13. ábra)
2.13. ábra – NFC eszköz felépítése
A diplomatervem során az NDEF alkalmazásokkal és a különböző típusú címkékkel fogok foglalkozni. Ahogyan az ábrán is látható, az NFC eszközök nem csak az NFC Forum által előírt módon működhetnek, léteznek gyártó- és szolgáltatás-specifikus megoldások is. Az NFC eszköz író/olvasó módban képes kommunikálni egy NFC címkével. Az NFC Forum Tag (továbbiakban NFC címke), egy olyan címke (az RFID-hez hasonló chippel és antennával), mely kompatibilis az NFC Forum által definiált 4 típus valamelyikével. Az NFC Forum nem specifikálja pontosan a címkék működését, de azt előírja, hogy hogyan kell válaszolniuk az eszköz kérdéseire.
2.14. ábra – adatok tárolása NFC címkén [61]
A továbbiakban nézzük, hogyan tárolunk adatot egy NFC címkén! (2.14. ábra) Az alkalmazásrétegbeli adatot először egy vagy több NDEF (NFC Data Exchange Format) binárisan tárolt rekordban helyezzük el, melyeket NDEF üzenetekbe csomagolunk. Több, de akár egy ilyen üzenet alkotja NFC Type Tag platformot, vagyis a későbbiekben ismertetett 4 szabvány valamelyikét. Az NDEF üzenetek az e-mailből, HTML-ből, Linuxból már ismert MIME (Multipurpose Internet Mail Extensions) típusúak lehetnek, de definiálhatóak egyedi típusok is. Végül a 4 típus valamelyikét helyezik el egy NFC címkében, terméken. Az NFC Type Tag platform lényegében egy konténer az NDEF üzenetek számára, mely garantálja a már létező termékekkel való együttműködést. Ez a platform termékfüggetlen, de számos termék kompatibilis vele. Az NFC Forum 4 típust különböztet meg [62]:
15
Mindhárom típus lehet írható, újraírható, és csak olvasható.
NFC Forum Type 1 tag o
pl. Sony FeliCa
A JIS X 6319-4 szabványon alapszik, előre konfigurálható, memória: 2MByte
NFC Forum Type 4 tag o
pl. Mifare Ultralight
Az ISO/IEC 14443A szabványon alapszik, memória: 48 Bbyte - 2 Kbyte
NFC Forum Type 3 tag o
Az ISO/IEC 14443A szabványon alapszik, memória: 96 Bbyte - 2 Kbyte
NFC Forum Type 2 tag o
pl. Innovision Topaz
pl. DESFire, SmartMX
Az ISO/IEC 14443 szabványon alapszik, előre konfigurálható, memória: 32 KByte
A 4 típusba nem tartozik bele, de meg kell említeni a Mifare Classic címkét is, melynek létezik 1 és 4 Kbyte-os verziója is. Ezt a típust használják például a Műegyetem Schönherz Zoltán Kollégiumainak beléptető rendszereiben, de a Metapay kártyákban is. A különböző szabványok pontos leírása megtalálható az NFC Forum honlapján.
2.4.3. NFC alkalmazások Az NFC lehetővé teszi, hogy RFID technológiát építsünk elektronikus eszközökbe. Az RFIDhoz hasonlóan az NFC is működhet aktív és passzív módban. A mobiltelefonokba épített NFC chipek lehetővé teszik az érintkezés nélküli (contactless) kártyák mobilkészülékkel történő helyettesítését. A kártya emuláció során a készülék úgy működik, mintha egy hagyományos kártya lenne, míg író olvasó módban képes terminálként is működni. Az NFC alkalmazások is különböző csoportokba sorolhatóak [13]:
Touch and Go: beléptető rendszerek, logisztikai jelzőrendszerek. Ilyenkor az NFC eszköz smart kártyaként funkcionál.
Touch and Confirm: ide lehet sorolni a megerősítést igénylő alkalmazások többségét, mint például a mobilfizetést
Touch and Capture: ilyenkor az eszköz olvasóként működik.
Touch and Link: ezek az alkalmazások internetes kapcsolatot is igényelnek. Például: kiolvassák az adatot a címkéből, majd termékadatot jelenít meg egy böngészőben.
Touch and Connect: két eszköz közötti fájlcserét biztosít
Touch and Explore: ezt a kategóriát a későbbi alkalmazások, illetve a fenti kategóriák kombinálásából létrejött alkalmazások számára tartják fel.
Ahogyan a kategóriákból is következik, mobiltelefonunkat akár menetjegyként, mozijegyként, belépőként, kulcsként, bank- vagy pontgyűjtő kártyaként is használhatjuk. És mindehhez csupán egyetlen eszközre lesz szükség. Éppen emiatt a biztonság itt is kiemelt fontosságú, de a rendszer életképességét mindenképp bizonyítja, hogy jelenleg már több mint 4 milliárd mobiltelefon van 16
szerte a világon, és egyre több helyen vannak már meglévő contactless kártyát elfogadó berendezések (PayPass, PayWare, stb.) [12].
2.4.4. NFC biztonság Az adatátviteli technológiák egyik sarkalatos pontja a biztonság kérdése. A továbbiakban áttekintést adok [54] alapján a legfontosabb veszedelmekről. Az egyik legrégebben ismert biztonsági probléma a lehallgatás. Megfelelő antennával a támadó elvileg képes lehet a kommunikációba belehallgatni, azonban NFC esetén ekkor a lehallgatónak is néhány 10 centiméteren belül kell elhelyezkednie. Ennek ellenére megfelelő kódolással kivédhetőek az ilyen jellegű támadások. Egy másik támadási forma az adattörlés vagy adatmódosítás. Ilyenkor a támadó úgy módosítja az elektromágneses teret, hogy a küldött adat érthetetlen vagy módosított legyen, ezáltal megtévesztve az olvasót. Ezen jellegű támadások a csatorna figyelésével kivédhetőek, ugyanis a távolabbról történő elektromágneses mező módosításához nagyobb energia szükséges. A WiFi rendszerekből ismert Man-in-the-Middle támadás az NFC rendszereket is fenyegetheti. Ilyenkor két eszköz kommunikációja közé próbál beékelődni egy harmadik. Amikor az egyik eszköz elkezd adni, azt veszi a támadó, és zavarja a csatornát, hogy a fogadó még ne kapja meg az üzenetet. A behatoló elvégzi a számára szükséges módosításokat az adatokon, majd továbbítja a másik eszköznek. Esélye egyébként nagyon kicsi, mindenesetre aktív figyeléssel kiszűrhető. A féregjárat probléma esetén a támadó egy dedikált kapcsolatot tart fenn két adó-vevő páros között. Az egyik készülékkel vett csomagokat továbbítja a másik eszközhöz, ott újraküldi azokat, így látszólag közvetlen összeköttetésbe kerülnek az eszközök a másik helyen is. A féregjárat probléma kiküszöbölésére más adatátviteli technológiákból alkalmaznak megoldásokat. Általánosságban azonban elmondható, hogy már önmagában a kis hatótávolság eléggé biztonságossá teszi az NFC technológiát.
2.4.5. Az NFC jelenlegi helyzete A diplomaterv írása alatt szinte kéthetente jelent meg valamilyen NFC-vel kapcsolatos hír, és már nem csak szaksajtóban. A teljesség igénye nélkül néhány fontosabb mérföldkőről szót ejtek. Az SG.hu 2010. júniusi híre szerint [14] 2011-től minden Nokia okostelefon tartalmazni fog NFC chipet. Bár ez úgy tűnik nem így alakult, többek között az Android és az iPhone hódítása miatt, az érdeklődés továbbra is óriási. Más előrejelzések szerint [15] 2011 végére akár 40-50 millió készülék tartalmazhat már NFC modult. Mindenesetre, ha 2010 az okostelefonok éve volt, 2011 az NFC éve lesz [16]. 2010 novemberében nem sokkal az Android 2.3 megjelenése előtt vált világossá, hogy a Google új operációs rendszere is támogatni fogja az NFC-t [17]. 17
2011 februárjában a Deutsche Telekom is bejelentette, hogy 2012-re tervezi az NFC hálózat kiépítésének befejezését [4], ezáltal biztosak lehetünk benne, hogy a szolgáltatók is nagy reményt fűznek a technológiához. Még ebben a hónapban mutatták be az Android 2.3.3 verzióját, melyben az NFC már Bluetooth adatátviteli csatorna kiépítésére is használható [18]. 2011 áprilisában [3] a Sziget Kft. és a Vodafone hozta nyilvánosságra, hogy a Sziget Fesztiválon már kísérleti jelleggel ki lehet próbálni az NFC alapú fizetési technológiákat. Érdekes megjegyezni, hogy az OTP Bank 2009-ben kísérleti jelleggel már bevezette a PayPass érintés nélküli kártyákat, a technológia mégis csak 2011-ben, valószínűleg az okostelefonok térhódítása miatt vált időszerűvé [19]. Az is jól látszik, hogy ahogyan a technológia terjed, egyre nagyobb lesz a verseny a mobil operátorok és a bankok, valamint a kártyakibocsátó szervezetek között (MasterCard, VISA) [20]. 2011. május 26-án a Google bemutatta Google Wallet nevű szolgáltatását, mely gyakorlatilag lehetővé
teszi
az
Android
készülékek
tulajai
számára,
hogy
bankkártyaként
vagy
pontgyűjtőkártyaként is használhassák telefonjukat. A virtuális pénztárca projekt végül szeptember 19-én az NFC World Congressen lett hivatalosan is útjára engedve, véget ért a tesztfázis. [63] A konferencián a magyar Cellum csoport bemutatott egy CellLink elnevezésű bankoktól és mobilszolgáltatóktól független mobiltelefonos fizetési és számlázási rendszert is. [64] Október 10-én a T-Mobile, a Vodafone, a Telenor, a MasterCard, az OTP és a SuperShop összefogott, és megalapította a Mobil Tárca Egyesületet. Az Egyesület célja, hogy itthon is létrehozzon egy egységes, biztonságos, szabványos NFC alapú fizetési rendszert, továbbá segítse a mobil NC-alapú szolgáltatások kialakítását. A kezdeményezés Európában egyedülálló. Október 14-én a korábban már bemutatott NFC Forum további 29 taggal bővült, köztük a HTC-vel, a Sharppal és a kínai ZTE-vel [65]. 2011. november 14-én az Intel és a MasterCard stratégiai megállapodást kötött, az Intel ugyanis azon dolgozik, hogy a PC-k is NFC képesek legyenek. „A terv szerint a jövőben megjelenő Intel-alapú PC-k már alapból tartalmazni fogják az NFC-t, nem lesz szükség külön chip integrálására”. Az Intel „nem az NFC-s kártyát költözteti be egy mobileszközbe, hanem az online boltok virtuális kasszáit egészíti ki a számítógépben található aktív NFC-chippel, ami ez esetben egy teljes értékű, személyes POS-terminál szerepét tölti majd be.” [66] A PayPal, az elektronikus fizetésekre szakosodott készpénzmentes fizetési szolgáltatásokat nyújtó pénzintézet sem szeretett volna lemaradni. 2011. november 14-én az Androidos kliensük már lehetővé teszi, hogy NFC-n keresztül egy másik kártyára töltsük egyenlegünket. [67] A fenti bekezdések egyértelművé teszik, hogy a jövő az NFC-ben van, nincs olyan bankintézet, szolgáltató, eladó, vagy chipgyártó, aki ne szeretné kivenni a részét a technológiából. Kérdés még, hogy a készülékekbe integrált vagy a SIM-kártyán keresztül működő megoldások lesznek-e végül jobban elterjedve. Előbbi előnye a függetlenség, utóbbié pedig, hogy a
18
mobilszolgáltatók is kivehetik a részüket a technológia adta előnyökből, hiszen így rajtuk keresztül mehetnek a pénzügyi tranzakciók is [71]. Az egyetlen probléma, az NFC kompatibilis készülékek hiánya, a Google (SAMSUNG által gyártott) Nexus S első Androidos NFC-s készülékének bejelentése óta azonban egyre több készülék tartalmazza majd a szükséges modult. Néhány NFC kompatibilis eszköz: Samsung Galaxy S II, Wave 578, a Star széria, a BlackBerry 9900 és 9930, Nokia C7, N9, 603, 600, 700 és 701, LG T530, HTC, Ego, Ruby és az Amaze 4G. [21] Az Apple október 27-én megjelent iPhone 4S készüléke végül a várakozásokkal ellentétben nem kapta meg az NFC chipet.
19
3. Az Android platform A rádiófrekvenciás azonosítás áttekintése után elérkeztem az Android, mint mobil platform bemutatásához. Az Android egy Linux alapú mobil operációs rendszer, melyet eredetileg az Android Inc. kezdett el fejleszteni, majd később a Google által 2007 novemberében alapított Open Handset Alliance szervezet vett át [22]. Az Android célja [23] egy egységes, nyílt forráskódú mobil eszközökre szánt operációs rendszer elkészítése. Mobil eszközök alatt a PDA-kat, smartphoneokat, vagy mai szóval okostelefonokat, és tableteket értjük. Az Android ingyenes, nyílt forráskódú szoftver 2008. október 21. óta, ennek ellenére az Android márkanevet csak a Google által ellenőrzött gyártók használhatják [25].
3.1. ábra – Az Android platform felépítése [24]
20
3.1. A platform felépítése Az Android rendszer alapját a 3.1. ábrán is látható módon a Linux kernel jelenti. Ez a kernel tartalmazza többek között a készülék hardveréhez (pl.: GSM modem, GPS) való hozzáféréshez szükséges drivereket. A perifériák vezérlését többnyire a készülékgyártók készítik el [23]. Ez a kernel felel továbbá az energiaellátásért, a futó folyamatok kezeléséért, a felhasználói felületért és a memóriamenedzsmentért. A kernel fölött helyezkednek el a különböző programkönyvtárak, például a libc, vagy az SQL Lite. Ezen könyvtárak többnyire C nyelven vannak elkészítve és natívan futnak. Ugyanitt helyezkedik el a Java Virtuális gép, melyet Dalvik Virtual Machine névre kereszteltek el. Ez a Java virtuális gép azonban nem kompatibilis a Sun (2009 óta Oracle) által használt Java virtuális géppel. Az efölött elhelyezkedő blokkok már azonban csak Java nyelven írt kódokat tartalmaz. Itt találhatjuk az Application Frameworköt, mely segítséget nyúlt az alkalmazások számára, hogy hozzáférjenek az alsóbb rétegekhez. És végül elérkeztünk az általunk fejlesztett illetve a natív Android alkalmazások rétegéhez.
3.2. A rendszer főbb jellemzői Az Android az adatok tárolására SQLLite relációs adatbázist használ. Támogatja a legtöbb, jelenleg ismeretes vezeték nélküli technológiát, többek között: GSM/GPRS/EDGE, IDEN, CDMA, EV-DO, UMTS, Bluetooth, WiFi, LTE, NFC, WiMAX. Üzenetkezelésre az SMS, MMS e-mail szabványokat natívan támogatja. Böngészésre egy szintén nyílt forrású WebKit alapú böngészőt használ. A használt alkalmazások bár Java nyelven íródtak, az Android nem tartalmaz Java virtuális gépet. Az alkalmazások letöltésére kiválóan alkalmas az Android Market elnevezésű virtuális szoftverbolt [25]. Ami a médiaformátumokat illeti, az Android az alábbi formátumokat támogatja: WebM, H.263, H.264, MPEG-4, AMR, AMR-WB, AAC, MP3, MIDI, OGG, WAV, JPEG, PNG, GIF, BMP. Elérhető továbbá az RTP/RTSP és az Adobe által támogatott RTMP streaming protokol is. Az Android rengeteg kiegészítő hardvert támogat a kamera és a kijelző mellett. Ezek többek között: GPS, gyorsulásmérő, giroszkóp, mágneses érzékelő, nyomás érzékelő, hőmérő. Egyéb funkciók között szerepel az A2DP hangátvitel Bluetooth-on, a mobilinternet WiFi-n történő megosztása (Tethering), a multitasking (több alkalmazás egyidejű futtatásának lehetősége), a multitouch (több ujjas érintőkijelzők) valamint a hang alapú keresés. Az Android leginkább az ARM (Advanced RISC Machine) architektúrát támogatja, viszont egy 2011. áprilisi hír szerint ez hamarosan változni fog, ugyanis az Intel x86 architektúráira is el fog készülni az Android [26]. A hír hátterében valószínűleg a Microsoft lépése áll, ők ugyanis a Windows 8-at ARM architektúrára is meg fogják jelentetni. 21
3.3. Android Market Néhány szót az operációs rendszer szoftverboltjáról, az Android Marketről is ejtenem kell. Az Android Market nevű alkalmazás 2008 októbere óta érhető el előre telepítve a készülékeken. 2009 májusa óta pedig már fizetős alkalmazások is letölthetőek a segítségével. Ekkor még csupán 2300 alkalmazást volt elérhető a szoftverboltban. 2010 augusztusára ez a szám 80.000-re növekedett, 2010 decemberében pedig elérte a 200.000-et, míg 2011 novemberében már 370.000 alkalmazás érhető el a piactéren. Megjelenése óta állandó versenyben áll az Apple iPhone-ához létrehozott App Store-ral [30]. 2011. márciusi adatok szerint azonban az Android Marketben már több ingyenes alkalmazás (134 ezer) érhető el, mint az Apple szoftverboltjában (121 ezer). Fizetős alkalmazások tekintetében azonban még mindig az Apple vezet, de talán már nem sokáig [31]. A holland Distimo nevű piackutató cég előrejelzései szerint a Google platformja hamarosan utoléri letölthető alkalmazások terén az almás céget. (3.2. ábra)
3.2. ábra – Mobil szoftverboltból letölthető alkalmazások számának alakulása [31]
A fizetős alkalmazásokat fejlesztők az eladott program árának 70%-át kapják, a fennmaradó 30% a Google-t illeti. 2011. május 12-től világszerte 131 országból érhető el immáron a fizetős 22
Android Market is [68]. A Google egyébként nem ellenőrzi annyira az alkalmazásokat, mint az Apple, mégis volt már rá példa, hogy utólag töröltek jogsértő alkalmazásokat a felhasználók készülékeiről. Az alkalmazások egy .apk kiterjesztésű fájlként töltődnek le a Market-ről, melyet a telefon PackageManagerService nevű szolgáltatása kezel és telepít fel. Telepítéskor a készülék kijelzi, hogy milyen szolgáltatásokhoz, hardverhez fog hozzáférni az alkalmazás, és csak azt engedélyezve válik futtathatóvá a program. Bár az Android Market a legjobb lehetőség alkalmazások letöltésére, ennek ellenére nem csak a szoftverbolton keresztül tölthetünk le programokat. Lehetőség van akár csak az .apk fájlt felmásolni a telefonra, vagy más, alternatív szoftverboltokat használni. 2011. február 2. óta pedig már asztali böngészőből is elérhetővé vált a szoftverbolt, így könnyebben tájékozódhatnak a felhasználók, sőt böngészőből is egy gombnyomással telepíthetővé váltak az alkalmazások. A szoftverboltok egyébként egyre népszerűbbek a gyártók körében. Már szinte minden valamire való készülék- vagy rendszergyártó rendelkezik saját szoftverbolttal, például a Samsung a Samsung Apps-szal, a Blackberry az App World-del, vagy a Windows Phone 7 a Marketplace-szel. Az Android Market egyik legnagyobb vetélytársa azonban az Amazon által márciusban indított Amazon Appstore lehet [69].
3.4. Megjelent Android verziók A továbbiakban felsorolom az Open Handset Alliance által megjelentett hivatalos Android verziókat [23], [25] és [27] alapján. Az első béta verzió 2007 novemberében látott napvilágot, ezt követően az alábbi, többnyire édességekről elnevezett verziók jelentek meg: Android 1.0 (Apple Pie) – 2008. szeptember 23. Az első hivatalos verzió, a legtöbb ma is használatos funkciót tartalmazta: Gmail, Google Calendar, Google Contacts, Google Maps, Android Market, böngésző, kamera, e-mail támogatás, YouTube, állapotsáv az értesítéseknek, ébresztő, SMS. Android 1.1 (Banana Bread) – 2009. február 9. Egy kis mértékben elterjedt verzió, mely csupán néhány hibajavítást tartalmazott. Android 1.5 (Cupcake) – 2009. április 30. Az első szélesebb körben elterjedt verzió, mely már tartalmazta a szoftveres, vizuális billentyűzetet, a Bluetooth támogatást, a másolás/beillesztés funkciókat, a fájlfeltöltést, továbbá néhány új UI (User Interface, felhasználói felület) komponens is megjelent. Megjelentek az ún. widgetek, vagyis a készenléti képernyőn elhelyezhető minialkalmazások.
23
Android 1.6 (Donut) – 2009. szeptember 15. Többnyire az előző verzió hibajavításait tartalmazta, többek között az Android Marketet fejlesztették tovább, jobb galériát, hangfelismerést is kapott a rendszer. Megjelent a teljes telefonon alkalmazásokon keresztüli intelligens kereső, továbbá néhány optimalizációt tartalmaz. Android 2.0/2.1 (Eclair) – 2009. október 26. Sokáig a legelterjedtebb verzió volt. A fejlesztések mélyebben érintették a rendszert, hardveroptimalizáció, változatos képernyőméretek támogatása, új grafikus felület, multitouch támogatás és mozgó háttérképek a főbb újdonságok. Emellett a kamerakezelés is változott: vaku és digitális zoom támogatása, valamint különböző fehéregyensúly beállítások is bekerültek az új verzióba. Android 2.2 (Froyo) – 2010. május 20. Legfőbb újdonság a gyorsaság, egyes folyamatok akár 400-szor gyorsabbak lehetnek. Emellett feljavították a böngészőt, immáron támogatja az Adobe Flash szabványt. Itt debütált a mobilinternet WiFi-n vagy USB-n történő megosztása is (Thethering). Android 2.3 (Gingerbread) – 2010. december 6. Átalakított grafikus felület, új billentyűzet és továbbfejlesztett szerkesztési funkciók a legnagyobb újdonságok. Ez a verzió támogatja először az NFC-t, vagyis a Near Field Communications-t, mely diplomatervem témája. Android 3.0 (Honeycomb) – 2011. február 22. A 2.3-as verzió után a Google szétválasztotta a mobiltelefonokra és a tabletekre szánt verziókat, a 3.0-s verzió csak tableteken érhető el. Legfőbb újdonsága is kifejezetten a nagy kijelzők, és a nagyobb számítási kapacitás támogatása. Több alverziója is megjelent, mint a 3.1 és a 3.2, mely nem kapott új nevet. Android 4 (Ice Cream Sandwich) – 2011. október 19. A Google a 2011-es Mobile World Congress kiállításon bejelentette, hogy a 2.3-es verzió után nem lesz két különálló Android verzió tabletekre és telefonokra [28]. Végül október közepén jelentették be a szintén SAMSUNG által gyártott Galaxy Nexus készülékkel együtt. A felület teljesen új designt kapott, mely nagyban hasonlít a Honeycombéhoz. A számos újdonság közül említésre méltó az arcfelismeréssel történő billentyűzár feloldás, a továbbfejlesztett hangfelismerés. Itt debütált az Android Beam, mely az NFC segítségével lehetővé teszi linkek, tartalmak megosztást két készülék között. Emellett továbbfejlesztették a Google alapszolgáltatásokat is a gördülékenyebb használat érdekében [70]. A legnagyobb kérdés, hogy mely készülékek kapják majd meg a frissítést.
24
3.5. Jelenlegi helyzet, trendek Elég nehéz egy ilyen dinamikusan fejlődő rendszer aktuális állapotáról írni. Valószínűleg már a diplomaterv leadásakor számos dolog változni fog az itt leírtakkal kapcsolatban, mégis megpróbálok néhány trendet bemutatni egyrészt az okostelefonok, másrészt az Android kapcsán. Már eleve az okostelefon fogalmának definiálása is nehézkes, hiszen korábban is voltak már PocketPC-k, PDA-k, smartphone-ok, mégsem voltak ilyen népszerűek. Néhány jellemzőjük közül talán kiemelten fontos, hogy teljes értékű operációs rendszerrel rendelkeznek, és szabványos módon lehet rájuk alkalmazást fejleszteni. Mindezek mellett képesek számos számítógépszerű feladat elvégzésére, e-mail olvasásra, internetezésre.
3.5.1. Okostelefon platformok rövid bemutatása Az igazi áttörést 2007-ben az Apple hozta az iPhone-nal. Ez volt az első csak érintőkijelzővel vezérelhető telefon, és kapacitív kijelzőről lévén szó, nem volt már szükség ceruzára, ujjakkal lehetett irányítani. Bár az első verzió tudásban (szabványok támogatása, több alkalmazás egyidejű futtatása) messze nem volt ott, mint társai mégis az iPod médialejátszók sikere, az óriási érintőképernyő, a design, az iTunes és az App Store meghozta gyümölcsét. Két és fél év alatt 6,1 millió darabot adtak el belőle. Sok helyen státuszszimbólummá vált, és elindított egy folyamatot, ami tényleg megváltoztatta a világot. Azóta megjelent az iPhone 3G, majd a 3GS és 2010-ben az iPhone 4. 2011-ben pedig bemutatták az iPhone 4S-t, felemás sikerrel (3.3. ábra). Az Apple kiváltsága a prémiumszolgáltatások mellett, hogy a szoftvert és a hardvert is kizárólag rajtuk keresztül lehet megvásárolni. Világszerte több mint 250 millió iPhone talált gazdára [41].
3.3. ábra – iPhone generációk, forrás: Wikipedia
Ahogyan korábban is említettem az Android platform 2008-ban jelent meg. Szemben az iPhone-nal ez egy platform, melyet – mivel nyílt forráskódú – bármely gyártó felhasználhat készülékein. Az első Androidos mobiltelefon a HTC által gyártott Dream, vagy más néven TMobile G1 volt. Emellett meg kell még említenünk Nexus One (HTC) és a Nexus S (Samsung) készülékeket, melyek a Google hosszú távon támogatott referenciakészülékei. (3.4. ábra) A 25
legtöbbet eladott Androidos készülék a Samsung Galaxy S, melyből 20 millió példányt értékesítettek [36]. A 2011-es Mobile World Congressen (MWC) mutatták be a Galaxy S II típusú készüléket, mely már kétmagos processzorral, 1GB RAM-mal, fullHD videofelvétellel és NFC chippel is rendelkezik, ebből 5 és fél hónap alatt 10 millió fogyott. Az Android jelenleg annyira fejlődik, hogy egy 2011. november 17-ei adat szerint naponta 550.000 új készülék aktiválódik világszerte [37]. 3 év alatt 200 millió Androidos telefon lelt gazdára.
3.4. ábra – Androidos okostelefonok
Magyarországon kevésbé, Amerikában viszont annál népszerűbb a RIM (Research In Motion) BlackBerry platformja. A BlackBerry a közhiedelemmel ellentétben nem egy gyártó, hanem egy szolgáltatáscsomag. A leginkább üzenetküldésről, üzleti szolgáltatásairól híres eszközök gyártója jelenleg azzal küzd, hogy modelljeiket a fiatalok és multimédiakedvelők számára is vonzóvá tegye [42]. Az egykor egyeduralkodónak számító cég népszerűsége jelentős mértékben csökkent és az is sok mindent elmond, hogy szintén az MWC-n jelentették be, hogy a Blackberry készülékek képesek lesznek Android-ra írt alkalmazások futtatására is [38]. A fent említett platformok mellett meg kell még említeni az egykor virágkorát élő Nokia Symbian operációs rendszerét, mely szinte már biztosan nem rúg labdába a mai kor elvárásai mellett. Szintén sokáig haldoklott a Microsoft Windows Mobile platformja, azonban 2010 végén bejelentették a rendszer továbbfejlesztett és alapjaiban átgondolt verzióját a Windows Phone 7-et, mely jó fogadtatást kapott. Érdekes megfigyelni, hogy 2011 februárjában a Nokia és a Microsoft megegyezett, hogy ezentúl a Nokia készülékein Windows Phone 7 rendszer fog futni [38]. A változás mindkét cégnek jó lehet, hiszen a Nokia azért még mindig egy nagyon elismert márkanév (és jelenleg még a legtöbb készüléket ők értékesítik Európában), viszont az operációs rendszerük fölött elszaladt az idő, a Microsoft pedig hardver tekintetében van a Nokiára utalva. 2011. október 26-án megjelentek az első Windows Phone alapú Nokia készülékek, a Nokia Lumia 800 és a Lumia 710. A készülékek a kor elvárásainak megfelelnek [72]. 2011. áprilisi piackutatások alapján az Android már világszerte átvette a vezetést az Apple-től, a Blackberry-től, Európában a Symbiantól, egyszóval a világ legdinamikusabban fejlődő mobil operációs rendszere. (3.5. ábra) 26
3.5. ábra – Mobil operációs rendszerek elterjedtsége, 2011. második negyedév [73]
Azonban nem biztos, hogy ez mindig így lesz, hiszen egy év alatt teljesen átrendeződtek a hatalmi viszonyok. A legtöbb elemző szerint [43] a jövőben 3 nagy platform fog életben maradni: az Android, az Apple iPhone-ja, és a Windows Phone 7. E platformok között bár rengeteg a hasonlóság, gyakorlatilag ugyanarra képesek, mégis van egy jelentős eltérés. Ez pedig a következő: az Apple a zártságáról híres, egy kézben van a szoftver és a hardver. Emiatt az árakat is ő szabja, nehéz bekerülni a platformjukra, és nem gyárthat senki Apple iOS-szel ellátott készüléket. Az Android ezzel szemben pont a nyíltsága miatt terjedt el. A rendszer bármely gyártó számára elérhető, viszont éppen ez a hátránya is, hogy nem tudják garantálni a felhasználói élményt. Nagyon sok olcsó, rossz minőségű készülék jelent meg. És ekkor jön a Windows Phone 7, mely a kettő között helyezkedik el, ugyanis szintén egy zárt rendszerről beszélhetünk, viszont külső gyártók gyártják a készülékeket (HTC, Samsung, Nokia) akik azonban meg kell, hogy feleljenek a szigorú hardverkövetelményeknek. Így a platform tovább tud terjedni a sokféle gyártó miatt, mégis garantálva lesz a felhasználói élmény, a rendszer megbízhatósága. Az Android egyik problémája, hogy a gyártók kezdik felismerni, hogy sokkal nagyobb haszon van az alkalmazások értékesítésében, mint gondolták, ezért saját szoftverboltokat indítanak, sőt, akár saját operációs rendszert is fejlesztenek, mint például a Samsung a Bada elnevezésűt. A másik probléma, hogy több Android verzió is széles körben elterjedt, nem egységesen kapja meg minden készülék a frissítéseket. Jelenleg (2011. november) egyébként a 2.2-es és a 2.3-as verzió a legnépszerűbb. (3.6. ábra)
27
3.6. ábra – Android verziók penetrációja, 2011. november 3. [29]
Az új verziók különböző készülékekre történő megjelenése rengeteg pénzébe kerül a gyártóknak, ezért egy telefon gyakran egy-két verziónál nem él meg többet, az üzletről nem is beszélve. A felhasználók így azonban nem fogják tudni használni telefonjaikat egy év után, hiszen az újabb programok csak az újabb rendszeren futnak, arról nem is beszélve, hogy a Google a jövőben még intenzívebb, féléves frissítési politikát akar folytatni [40]. Ezt a problémát a Google úgy szeretné orvosolni, hogy egész egyszerűen kitiltja az Android Marketről azokat a készülékeket, melyek a régi verziójú szoftvert használják.
3.5.2. Tabletek megjelenése Az okosmobilok térhódítása mellett a tableteket is meg kell említeni. A tabletek fogalma nem idegen, az érintőképernyős könyv vagy füzetméretű számítógépek régóta foglalkoztatták már a scifi filmek alkotóit is. Igazán Tablet PC-ről a 2000-es évek óta beszélhetünk, a Microsoft első publikus Tablet PC prototípusának megjelenése óta. Azóta rengeteget fejlődtek ezek az eszközök. A Microsoft még Tablet PC-kre optimalizált operációs rendszert is megjelentetett 2001-ben [44]. Az ezt követő években megjelent még egy új kategória is, az UMPC (Ultra Mobile Personal Computer) melyek lényegében kisméretű érintőképernyős számítógépek voltak. Az egyik első ilyen eszköz a Samsung Q1 volt. (3.7. ábra) Ezután a dolog egy kicsit más irányt vett, amikor 2007-ben az Asus megjelentette az Eee PC elnevezésű netbookját. Ezzel kitört a netbook, vagyis a kisméretű és kis teljesítményű notebook láz, mely 2-3 évig tartott.
28
3.7. ábra – A Tablet PC-től a tabletekig
Az eddigi eszközök azonban Windows operációs rendszerrel működtek, és funkcionalitásban gyakorlatilag – kis túlzással – teljes értékű számítógépek voltak. Az okostelefonok népszerűsége, valamint a kapacitív kijelzőtechnológia továbbfejlődése tette lehetővé a manapság nagyon népszerű tabletek megjelenését. 2010-ben, amikor az Apple már több tízmillió iPodot és iPhone-t értékesített volt abban a helyzetben, hogy bejelenthesse a forradalminak szánt iPadet. Az iPad az Apple első tablet gépe, mely gyakorlatilag ugyanazt az operációs rendszert használja, mint az iPhone. A 8 colos kijelzővel és 1GHz-es processzorral felszerelt eszköz nagyon népszerű lett, 2010-ben 15 millió darabot adtak el belőle világszerte [45]. Látván az iPad népszerűségét a Google és így az Android operációs rendszerű készülékeket gyártó cégek is nekiláttak tableteket gyártani. Az első széles körben elterjedt ilyen eszköz a Samsung Galaxy Tab, mely 7 colos kijelzővel és Android 2.2 operációs rendszerrel volt megáldva. Egy hónap alatt 600.000 példány lelt gazdára. Ezzel a tablet őrület elkezdődött, és valószínűleg néhány évig még tartani fog. Olyannyira, hogy a Google megjelentette a kifejezetten tabletekre optimalizált Android 3.0 verziót is. Ahogy korábban is említettem, a jövőben csak egy Android verzió lesz minden eszközre függetlenül attól, hogy mobiltelefonról vagy tabletről van szó. A tabletek sikere valószínűleg kis méretükben és súlyukban, valamint könnyű kezelhetőségükben keresendő. Emellett kiválóan alkalmasak jegyzetek, könyvek olvasására, képek vagy filmek nézésére, illetve internetezésre. Úgy néz ki az elmúlt 10 év kiútkeresése a tabletekben összpontosult, és ez lesz az a következő eszköz, amire előbb utóbb mindenkinek szüksége lesz a tévék, mobiltelefonok és a notebookok vagy számítógépek mellett. Megfigyelhető, hogy egyre több gyártó gyárt már tabletet, köztük a RIM a BlackBerry Playbookot, vagy a HP a Palmtól vásárolt WebOS alapú eszközeit. Bár az iPad volt a lavinát beindító eszköz, valószínűleg a Google platformja hamarosan át fogja venni a hatalmat a tablet fronton is. Ennek oka egyértelműen az eszközök sokféleségében, a választékban keresendő. Közben látható a Microsoft érdeklődése is, bár ők még mindig sokat remélnek a Windows 7 alapú tabletektől. Jelenleg úgy tűnik, kicsit lecsúsztak a tabletpiacról, azonban a Windows 8-at már egy olyan univerzális rendszernek szánják, ami elvileg mobilon, tableten és notebookon is futni fog. Megjelenése 2012-re várható. 29
3.5.3. Trendek Melyek azok a trendek, amelyek az elkövetkezendő néhány évben uralni fogják mind a mobil, mind a tabletpiacot? [48] Nos, az Android hódítása mindenképp szavatolható. Az is biztos, hogy egyre nagyobb hangsúlyt fognak kapni a helyalapú szolgáltatások, például helyhez kötött kedvezmények, útvonaltervezések, ismerősökkel való kapcsolatfelvétel szempontjából. Az amerikaiak 4 százaléka már ma is használja az ún. Check-in szolgáltatásokat, melyek segítségével közösségi oldalakon tudatják ismerőseikkel, hogy hol tartózkodnak. Nem kérdés, hogy a Motorola, a Samsung, és a RIM Blackberry tabletjei óriási számban fognak elkelni. Ezzel párhuzamosan nem szabad szemet hunynunk a kapacitív érintőkijelzők iránti óriási keresletről. A mobilinternet és az ingyenes WiFi hálózatok elterjedésével az internetalapú szolgáltatások gyakorlatilag behálózzák mindennapjainkat. Ott üzenünk, ott kommunikálunk, ott tájékozódunk és vásárolunk. Ha pedig már a vásárlásokról van szó, a mobilfizetések, így az NFC is hamarosan be fog épülni mindennapi szokásaink közé. Mindezek mellett figyelembe kell venni a technológia hihetetlen felgyorsulásának és elterjedésének társadalomra és környezetre gyakorolt hatásait is. Egyre többször hallani hackertámadásokról, adatvesztésekről, adatokkal való visszaélésekről. Emellett a személyiségi jogokra is különösen kell figyelnünk egy olyan világban, ahol szinte már minden a világméretű hálózaton történik.
30
4. Fejlesztés Android platformra Az Androidra való fejlesztéshez a platform biztosít egy fejlesztőkörnyezetet, ismertebb nevén SDK-t (Software Development Kit). Az SDK a fejlesztéshez szükséges könyvtárakat, emulátort és debuggert, valamint a dokumentációt, és példakódokat tartalmaz. A fejlesztőkörnyezet az Android hivatalos fejlesztői oldaláról1 tölthető le, és támogatja a Windows, a Linux és a Mac OS platformot is. Azonban a fejlesztés igencsak nehézkes lenne egy IDE (Integrated Development Environtment), vagyis egy fejlesztéshez használható program nélkül. Először az Android az Eclipse nevű szoftvert támogatta, mely egy bővítmény (Android Development Tools (ADT)) segítségével éri el az SDK-t, így segítségével létrehozhatunk, futtathatunk, sőt debuggolhatunk is. Az SDK első verziója először 2007 novemberében jelent meg belső fejlesztők számára, majd az 0.9 beta verzió 2008 augusztusában látott napvilágot. Az SDK különböző verziói mind támogatják a régebbi Android verziókat is. A környezet egyébként moduláris felépítésű, tehát az SDK telepítése után akár egy régebbi verziójú eszközt, vagy könyvtárat is le lehet hozzá tölteni. Ahogy azt már korábban említettem az alkalmazások .apk kiterjesztésű fájlok melyek az Android rendszerben a /data/app mappában helyezkednek el telepítés után. Ez a fájl tartalmazza a .dex kiterjesztésű, Java nyelven írt, de nem a Java, hanem a Dalvik virtuális gép által lefordított futtatható állományt, valamint az alkalmazásban felhasznált képeket, fájlokat. Androidra egyébként nem csak Java nyelven lehet fejleszteni, számos más megoldás közül is választhatunk. Az egyik ilyen módszer az NDK (Native Development Kit), mely 2011 januárja óta érhető el és segítségével C és C++ nyelven írhatunk alkalmazásokat. Pontosabban ún. shared library-ket (megosztott kódkönyvtárakat) melyek majd elérhetővé válnak a Java kódunkból, ezzel a Java Virtual Machine által okozott lassulást lehet kiküszöbölni. Ezt a módszert leginkább a 3D-s alkalmazások fejlesztésekor használják [32]. Egy másik megoldás az App Inventor, mely 2010 decemberében debütált. Segítségével egyszerű alkalmazásokat „fejleszthetünk” programozói tudás nélkül. A programmal vizuálisan építhetjük föl Androidos alkalmazásainkat. Az egyik legjobb funkciója, hogy fejlesztés során azonnal látjuk a változásokat a készüléken is. A rendszer segítségével kezdő programozók ismerkedhetnek meg a fejlesztés mikéntjével, viszont komolyabb programok nem készíthetőek el vele [33]. Szintén érdekes kísérlet a PHP for Android projekt. A koncepciót 2010 augusztusában mutatták be, és célja, hogy PHP kódot is lehessen futtatni Androidos készüléken, és a rendszer API-jait is el lehessen érni. Bár az ilyen módon írt alkalmazások natívan nem lesznek képesek futni, jó lehetőség az Androiddal ismerkedő PHP fejlesztők számára [34].
1
http://developer.android.com
31
4.1. Fejlesztőkörnyezet összeállítása Diplomatervem elkészítése során Microsoft Windows 7 operációs rendszert, és Eclipse fejlesztőkörnyezetet fogok használni a megfelelő Android SDK és ADT segítségével. A fejlesztőkörnyezet összeállítása sajnos még nem a legegyszerűbb folyamatok közé tartozik, ezért az Android Developer és [49], [50] oldal segítségével részletesen bemutatom annak megvalósítását. Az Ecplise egy nyílt forráskódú platformfüggetlen szoftverfejlesztő keretrendszer (IDE). Eredetileg az IBM fejlesztette ki, majd a non-profit Eclipse Fundation fejlesztette tovább. Az Eclipse megfelelő pluginek telepítése után a Java mellett alkalmas C, Perl, Ruby, Pythin, PHP, Cobol nyelven történő programozásra is [48]. A program használatához első lépésként telepíteni kell a Java Development Kitet, mely az Oracle honlapjáról, vagy a java.com webcímről érhető el. Ezután az Eclipse honlapjára2 kell ellátogatni, és az Eclipse IDE for Java Developers verziót letölteni. A letöltött fájlt csak ki kell csomagolni, nem kell telepíteni. A program az Eclipse.exe fájllal indítható. Elképzelhető, hogy a program indításkor nem találja a Java Virtual Machine-t, ekkor az eclipse.ini fájlt kell módosítani a megfelelő elérési útvonalra. Az Eclipse első indítása után szükséges egy munkakönyvtárat is megadni. Ebbe a mappába fogom létrehozni projektjeimet. Ezután az Eclipse Help menüjéből ki kell választani az Install New Software menüpontot. A megjelenő ablakban az Add gombra kattintva lehet begépelni az ADT plugin elérhetőségét3 (4.1. ábra). Ezután be kell pipálni a Developer Tools-t, majd a Next és a Finish gombra kell kattintani.
4.1. ábra – Elérési útvonalak
Mindezen lépések után újra kell indítani az Eclipse-t, és az Android SDK letöltése következik4. A letöltött fájlt egy tetszőleges mappába ki lehet csomagolni, majd Eclipse-ben a Window/Preferences ablakban az Android fül alatt meg kell adni az Android SDK elérési útvonalát. Ezzel a lényegi lépések befejeződtek. Amennyiben a fejlesztés során egyéb
2 3 4
http://www.eclipse.org/downloads/ https://dl-ssl.google.com/android/eclipse/ http://developer.android.com/sdk/index.html
32
könyvtárakra, komponensekre is szükség van, akkor a Window menü Android SDK and AVD manager menüpontja alatt lehet azokat telepíteni.
4.2. Projekt létrehozása Az Eclipse nagyban megkönnyíti a projektek létrehozását, így a fejlesztést. Komolyabb programok írása elképzelhetetlen lenne nélküle. Az Eclipse indítása után új projektet a File/New/Project menüpont alatt lehet létrehozni. A megjelenő ablakban az Android/Android Project opciót kell választani, majd a Next gombra kattintani.
4.2. ábra – Új projekt létrehozása
Ezt követően kell kitölteni a projekt részletes adatait. A Project Name mező magának a projektnek lesz a neve, vagyis a mappának is, amiben a projekt tárolódik. Az Application Name már az alkalmazás Android eszközön is látható neve lesz. A Package Name a Javából ismeretes csomag neve, melynek egyedinek kell lenni, például: com.example.elsoproject. Amennyiben a Create Activity is be van pipálva, úgy az Eclipse automatikusan létrehoz egy egyszerű HelloWorld projektet. A Finish gombra kattintva a beállítás befejeződik, a projekt elkészült, a Run gombra kattintva futtatható. Ha jól be lett állítva a virtuális eszköz, akkor az is automatikusan elindul. Bemutatás céljából álljon itt egy Android HelloWorld kódrészlet. (4.3. ábra)
4.3. ábra – Android HelloWorld
33
4.3. Emulátor és valódi készülékek beállítása Az alkalmazást lehetőségünk van virtuálisan, emulátorban vagy valódi hardveren futtatni. Virtuális eszközt (AVD, Android Virtual Device) szintén a Window/Android SDK and AVD Manager menüben lehet létrehozni a Virtual Devices rész alatt. Új eszköz (virtuális mobilkészülék) létrehozásakor megadható például a csatolt SD-kártya elérési útvonala és specifikálható a készülék hardvere is. A New gombra kattintva a felugró ablakban válasszuk ki, hogy milyen célhardveren szeretnénk az alkalmazást futtatni. Később leírt okok miatt itt az Android 2.3.3.-at választottam, míg a kijező felbontásnál a WVGA (800x480)-at. Ezek után akár a HelloWorld alkalmazást is elindíthatjuk a Run menü Run menüpontjával, vagy a Ctrl+F11 billentyűkombinációval. Az emulátor (4.4. ábra) a fejlesztés elején nagyon sokat segített, azonban a kamerakezelést (QR-kód olvasás) és az NFC címke olvasást nem tudja emulálni, ezért ilyenkor már éles hardverre lesz szükség.
4.4. ábra – Android Emulátor
A fejlesztést a Google egyik devphone (referenciakészülék) végeztem, a Google Nexus S-en. A készülék telepítéséhez szükséges drivereket a szintén az Android Developer oldalról5 tölthetjük le. Ezután a telefon Beállítások/Alkalmazások menüpontjában kapcsoljuk be az Ismeretlen források használatát, hogy ne csak az Android Marketben található programok legyenek futtathatóak, valamint az Alkalmazásfejlesztés menüpont alatt pipáljuk be az USB hibakeresés funkciót. Ezután csatlakoztassuk a készüléket a számítógéphez, és ha minden sikeres volt, akkor ha nincs elindítva az emulátor, a Run gombra kattintva az alkalmazásunk automatikusan a valódi készülékre települ és indul el. Így már tesztelhetjük a hardverspecifikus dolgokat is. 5
http://developer.android.com/sdk/win-usb.html
34
5. A feladat leírása 5.1. Specifikáció A rádiófrekvenciás azonosítás, az NFC alapú szolgáltatások, a QR-kód alapú azonosítás és az okostelefonok megjelenése lehetővé teszi a technológiák integrálását, és személyre szóló és helyfüggő médiatartalom szolgáltatások létrehozását, ezáltal egy intelligens környezet kialakítását. Diplomatervem során megvalósítandó ötlet egyrészt személyre szóló ajánlatok megjelenítését, másrészt a vásárlások megkönnyítését teszi lehetővé. Legtöbb esetben az NFC szolgáltatásokat egyszerű
azonosításra,
vagy
mobilfizetésre
használják.
Jelenleg,
2011
októberében
Magyarországon még kevés NFC képes készülék van, éppen ezért a szolgáltatás népszerűsítése érdekében fel fogom használni a QR-kódot is azonosítás céljából, ezáltal minden Androidos készülék tulajdonosa használhatja majd, és amennyiben később elkészül iOS/Windows Phone 7 alapú kliens is, akkor az a platform is teljes körűen használhatja majd a QR-kódnak köszönhetően.
5.1. ábra – myNFC megállítótábla - koncepció
A szolgáltatást myNFC névre kereszteltem, és mint írtam elsősorban célzott reklám megjelenítésére alkalmas. Ha a felhasználó szemszögéből nézzük, akkor a vásárló elmegy egy áruházba, ahol az áruház területén 2-3 NFC címke van elhelyezve a bolt azonosítójával egy megállítótáblán (5.1. ábra). A felhasználó odaérinti készülékét (vagy lefotózza a QR-kódot) és amennyiben már telepítve volt, elindul az alkalmazás, mely hírfolyam szerűen megjeleníti a számára releváns akciós termékeket, ajánlatokat. A felhasználó ezután egy-egy elemet elmenthet a kedvencei közé, de akár meg is oszthatja azokat közösségi szolgáltatások segítségével, sőt 35
megjelölheti a neki tetsző ajánlatokat is, visszajelezve ezáltal a boltnak. Az alkalmazás emellett képes a különböző felhasználói adatok eltárolására (életkor, nem, cukorbetegség), az összes (akár nem releváns) ajánlat megjelenítésére. Emellett természetesen visszakereshetőek lesznek az elmentett kedvencek (5.2. ábra).
5.2. ábra – A tervezett Android alkalmazás (illusztráció)
De hogyan kerül a vásárló készülékére a tartalom? Egyértelmű, hogy szükség van a mobil alkalmazást kiszolgáló szerveroldali rendszerre. Ezen a webes felületen, – mely egyébként PHP/MySQL alapokon lesz megvalósítva – regisztrálhatnak a kereskedők, információszolgáltatók. Amennyiben a kereskedő (pl. SPAR Magyarország Kft.) regisztrál, akkor a regisztrációt követően megadhatja az üzleti egységeit (pl. SPAR Irinyi, InterSPAR Allee). Az egyes üzletekhez feltölthet közérdekű adatokat: nyitva tartás, elérhetőségek, panaszkönyv megtalálhatósága, elfogadott utalványok, bankkártyával való fizetés lehetősége…stb. Akció feltöltésekor megadhatja a termék nevét egy rövid leírással, az árát, és csatolhat a reklámblokkhoz videót és képet is. (5.3. ábra) Lenne mód arra is, hogy a termékektől független reklámelemet is felvigyenek, olyan esetben, ha teljes boltra vonatkozó akcióról van szó (pl. „5000 Ft feletti vásárlás esetén ajándék.”)
5.3. ábra – Akció feltöltése (illusztráció)
36
A termékhez tartozó információk mellett szükséges kitölteni a vásárlókra vonatkozó adatokat is, hogy kinek ajánlják a terméket: életkor, nem, cukorbetegek ...stb. A szolgáltatás ezen adatokat fogja felhasználni releváns hirdetések megjelenítéséhez. Szintén ezen a felületen kell megadnia a kereskedőnek, hogy melyik üzletegységében érvényes az akció. Technikailag a szolgáltatást a következőképpen terveztem megvalósítani: a szerveroldali alkalmazás a mobil klienssel XML alapokon fog kommunikálni. A készülék leolvassa az NFC címkét vagy a QR kódot, mely csupán a bolt azonosítóját tartalmazza, majd elküldi a szerverre, mely XML struktúrában leküldi a készülék számára az akciós termékeket tartalmazó listát. Az ügyféladatok, kedvencek szinkronizálása is hasonló módon működne. A szolgáltatást egyébként nemcsak élelmiszer-, barkács- vagy elektronikai áruházak használhatják. A kitalált modellbe például teljesen beleilleszkedik egy mozi is, ahol a kihelyezett címke leolvasása után készülékünkön a minket érdeklő filmek trailerét nézhetjük meg. A lista például életkorunk alapján (korhatáros filmek), és már számunkra érvényes árakat (diák, felnőtt) mutatna. De ugyanígy akár egy étterem árait is olvashatjuk készülékünkön, ahol az egyes ételekre kattintva elolvasható, hogy hogyan és miből készül, milyen köret és bor ajánlott hozzá. Emellett egyszerű utcai plakátokra vagy akár információs standokra is kihelyezhető lenne. Az esetleges éles környezetben történő megvalósítás esetén az üzleti modellt úgy képzeltem el, hogy a boltok, egy fix összegben először megvásárolják például a megállítótáblát és a NFC címkéket, ezt követően pedig a szolgáltatás havidíjas lenne, minden tag esetén egy kis összeget kellene fizetniük. A fizetési kontroll pedig úgy működne, hogy esetleges nem fizetés esetén egyszerűen nem jelenik meg az adott termék vagy üzlet a listákban. A szolgáltatást egyébként véleményem szerint első körben elektronikai áruházakban, majd az élelmiszer áruházakban lenne érdemes bevezetni. A szolgáltatás előnyei egyértelműek: a vásárló jól jár, hiszen tényleg számára releváns akciókkal, hirdetésekkel fog találkozni, a bolt szintén, hiszen az adott ügyfél azt a terméket nagyobb valószínűséggel fogja megvásárolni, amely érdekli, és amit még ajánlanak is neki, mint ami nem. Használata felhasználói és kereskedői oldalról is rendkívül egyszerű, nem igényel nagy ráfordítást, bevezetése pedig alacsony költséggel jár, és gyakorlatilag az összes okostelefontulajdonos használni tudja majd.
37
5.2. Életképesség, megvalósíthatóság NFC és QR-kód alapú szolgáltatások napjainkban is vannak, ennek ellenére a QR-kód és az NFC ismertsége még messze van például az SMS-étől. A következőkben áttekintést adok a jelenleg kereskedelmi forgalomban lévő szolgáltatásokról. A QR-kódot (lásd 2.2 fejezet) leginkább Japánban, Kínában és Koreában használják kereskedelmi és reklámcélokra. Itt óriásplakátokon, több emeletes épületeken, ruhákon, bögréken is találkozhatnak a kóddal az ügyfelek [55]. A felhasználó, telefonját használva sokkal több információhoz jut, mint amennyit egy plakáton el lehetne helyezni (pl.: videó, képek). Több, nagyobb, multinacionális cég is használja már a QR-kód technológiát, és legtöbbször a kód egy URL-t tartalmaz, mely egy weboldalra kalauzolja a felhasználót. A Lufthansa légitársaság például már QR-kód alapú check-in rendszert használ, vagyis az utazók készülékekre egy ilyen kódot kapnak, melyet belépéskor ellenőriznek egy leolvasóval. Emellett a Nike, Audi is tervezett már nagyobb reklámkampányokat. Ezen szolgáltatások persze mindegyike azon alapszik, hogy az okostelefon felhasználó rendelkezik valamilyen QR-kód olvasó programmal. Az egyik legismertebb talán az i-nigma Reader, mely magyar felülettel is rendelkezik. A legtöbb platformra egyébként számos QR-kód olvasó alkalmazás elérhető. Magyarországon azért még messze van a QR-kód széleskörű elterjedése, de itthon is láthatóak már a próbálkozások: villamoson, utcai plakátokon, magazinokban próbálják meg népszerűsíteni. Több hazai oldal is foglalkozik a QR-kóddal, például a mobilkod.hu, mely olcsóbb telefonokra is kínál QR-kód olvasót, vagy a qr-kod.hu, mely segítségével QR-kódokat generálhatunk, sőt akár dinamikusan weboldalunkba is ágyazhatjuk azokat. Emellett több szolgáltató, köztük a Fővárosi Vízművek és a Fővárosi Gázművek is olyan számlákat küld ügyfeleinek, melyek QR-kóddal rendelkeznek, és a digicsekk.hu oldalon található információk segítségével e kód és egy mobiltelefon együttesével rendezhetjük tartozásunkat. 2011. október 26-án a MasterCard bejelentette a MasterCard Mobile-t, melynek segítségével QR-kódokat lefotózva fizethetünk. Az alkalmazásba regisztrálni kell MasterCard bankkártyánkat, és amellett, hogy fizethetünk például a Bookline-nál, a Bónusz Brigádnál, mobil egyenleget is feltölthetünk vele [74]. A diplomatervemhez hasonló szolgáltatások is léteznek már a világon. Az egyik ilyen a Google Shopper, mely a termékek vonalkódjainak segítségével megkeresi, hogy az adott termék hol vásárolható meg a legolcsóbban, de emellett a könyveket, CD-ket és DVD-ket fotójuk alapján is megtalálja. [56]. A Google Wallet pedig mondhatni az első NFC alapú fizetést megvalósító Android alkalmazás, melyről korábban már írtam. A másik QR-kód és NFC szabványokkal működő marketing célra használt megoldás az mTAG [75], melyet a Blue Bite amerikai cég üzemeltet. A vásárló az áruházba lépve egy LCD 38
tévén látja a legfrisebb reklámfilmeket, majd felhívják a figyelmét, hogy a készüléke segítségével ezen reklámokat egy QR-kód leolvasással megnézheti. A szolgáltatás azonban nem személyre szabott, és nagyobb beruházást igényel a hirdető televíziók miatt. A NokiaSiemens Networks előrejelzése szerint Magyarországon néhány éven belül 13 millió mobiltelefon lesz, és ennek közel fele okostelefonnak titulálható majd. A Xalis Consulting felmérése szerint pedig a magyarok ötöde már okostelefont használ, 2012-ben pedig már a harmada fog [59]. Ezek közül a jobb kamerával rendelkező készülékek mindegyike alkalmas lesz QR-kód leolvasására [57]. Emellett több tucat NFC kompatibilis eszközt jelentettek be az elmúlt hónapokban [58]. Magyarországon is látszik az érdeklődés az NFC iránt, a három magyar mobil szolgáltató, a TMobile, a Vodafone és a Telenor, valamint az OTP és a SuperShop összefogott és megalapították a Magyar Mobil Tárca Egyesületet. Mivel a SuperShop és az OTP PayPass kártyaelfogadó helyek a piac jelentős részét lefedik, így van rá esély, hogy viszonylag gyorsan elterjedjen a technológia. Óriási feladat előtt állnak az ipar e területén érdekelt cégek, ugyanis nagyon sokan még csak az okostelefonok fogalmával sincsenek tisztában, nemhogy az NFC-vel. Rengeteg kampányra, reklámra lesz szükség, hogy kellőképpen ismert legyen a technológia. Az NFC alapú fizetési rendszerek bevezetése pedig még egy ennél is nagyobb feladat, hiszen az emberek általában félnek az elektronikus fizetési módszerektől a biztonsági kérdések miatt. A diplomatervemben felvázolt és megvalósítandó szolgáltatás a QR-kód és az NFC népszerűsítésére kiválóan alkalmas lenne, természetesen megfelelő reklámok segítségével. A szolgáltatás, és így egy új technológia széles körű elterjesztése esetén rendkívül fontos, hogy felhasználóbarát és egyszerűen használható legyen, és valami pluszt adjon az ügyfeleknek. Véleményem szerint megfelelő bevezető kampányok segítségével sok emberhez eljutna a szolgáltatás, és a néhány paraméter beállítása után használata könnyen megtanulható, ugyanakkor megérné használni az egyedi ajánlatok miatt. Emellett egy fizetési rendszer, vagy termékalapú azonosítás bevezetése a kereskedők számára is nagy költséggel jár, az én megoldásom jóval olcsóbban kivitelezhető.
39
6. A feladat megvalósítása 6.1. Tervezés A tervezés során először az adatbázis felépítését dolgoztam ki, majd elkészítettem a webes felületet, ezt követően készült el az Android kliens, párhuzamosan az azt kiszolgáló szerveroldali lekérdezésekkel.
6.1.1. Adatbázis felépítése A diplomaterv során megvalósítandó alkalmazáshoz szükséges volt egy távoli szerveren futó MySQL adatbázis kialakítása. A feladat, hogy a fent specifikált feladathoz szükséges adatokat eltároljam. Szükség lesz egyrészt a felhasználók, másrészt a cégek adatainak tárolására. Egy cég több üzleti egységet is üzemeltethet, ezekhez egyesével meg kell tudni adni a nyitva tartási időt, az elfogadott kártyákat, és a címet, valamint egy rövid bemutató szöveget. A cégek a feltöltött hirdetéseket különböző boltokhoz rendelhetik. A felhasználók pedig az egyes hirdetéseket elmenthetik a kedvencek közé. Egy hirdetés rendelkezik címmel, leíró szöveggel, képpel, videóval, régi és új árral és néhány paraméterrel: hány éves kortól ajánlott, fogyaszthatják-e cukorbetegek, stb. Ezért végül az alábbi felépítésű adatbázist készítettem el (6.1. ábra)
6.1. ábra – Az adatbázis felépítése
40
Az nfc_company nevű tábla fogja tartalmazni a cégek belépési adatait, elérhetőségüket, leginkább csak adminisztratív célt szolgál. A cégek létrehozhatnak akár több üzleti egységet is, ezt tartalmazza az nfc_shop tábla. Tartalmazza címet (address), a bolt nevét (name), a nyitva tartást (opening_hours), egy azonosítót (mynfc) és a logót. Lehetőséget biztosítva, hogy a boltinformációk megjelenítésekor a felhasználó tájékozódhasson a boltban elfogadott kártyákról, utalványokról hoztam létre az nfc_cards táblát, melyet az nfc_whichcard táblával kapcsolok a bolthoz. A cégek tölthetik fel a hirdetéseket és beállíthatják, hogy mely boltban jelenjenek meg. Erre szolgál az nfc_whichad tábla. A hirdetések az nfc_ad táblában vannak eltárolva. Eltároljuk a hirdetendő termék, szolgáltatás nevét (name), a hirdetés szövegét (ad_text), a kapcsolódó képet (ad_img) és videót (ad_video), a régi és új árat (old_price, new_price), valamint értelemszerűen a relevanciához szükséges paramétereket:
Férfiaknak (male)
Nőknek (female)
Életkor (age_from – age_to)
Cukorbetegeknek (sugarfree)
Szívbetegeknek (heartproblem)
Lisztérzékenyeknek (flourfree)
Laktózérzékenyeknek (lactosefree)
A paraméterek, mivel még nincsenek sokan, statikusan, a táblában vannak letárolva, értelemszerűen később ezeket is dinamikusabban kell majd eltárolni. A felhasználók adatai az nfc_user táblában kaptak helyet. A fentihez hasonló paraméterek mellett itt tároljuk a felhasználó nevét (name) és e-mail címét is. A felhasználók saját kedvenceket is felvehetnek, erre szolgál az nfc_favourite tábla. Az adatbázist phpmyadminnal, webes felületen hoztam létre.
6.1.2. Webes felület elkészítése Az adatbázis megtervezése és elkészítése után nekikezdhettem a webes felület fejlesztéséhez. Ez a felület áll majd rendelkezésére a boltoknak a hirdetések feltöltésére, illetve az üzleti egységek adatainak szerkesztésére. A boltoknak regisztrálni nem tudnak, hiszen ez egy zárt rendszer, így regisztrálni csak az adminisztrátor tud. A felület jelenleg is elérhető a weben6, mely egyébként PHP nyelven íródott. A bejelentkezésen kívül a boltok itt két műveletet végezhetnek el:
6
http://itarena.hu/nfc/admin - A több helyen szereplő gsonline WebNDesign, vagy itarena oldalak és elnevezések saját egyéni
vállalkozásom, projektjeim nevei, ezáltal saját tulajdon.
41
Üzleti egységek hozzáadása/szerkesztése (shop_ kezdetű PHP fájlok)
Hirdetések hozzáadása/szerkesztése (text_ kezdetű PHP fájlok)
Az oldal beléptetéséért a show.inc.php fájl felel, mint ahogy ez a fájl állítja össze a weboldalt is a fejléc (header.inc.php), lábléc (footer.inc.php) és a bal oldali menü (menu.inc.php) elemekből. Amikor meghívunk egy fájlt, pl. shop.php, akkor az egyrészt ellenőrzi, hogy jogosultak vagyunk-e az oldal megtekintésére, másrészt elküldi a középső, tartalmi részt a show.inc.php
fájlnak, így áll össze a teljes oldal. Az oldal kinézete egy szabadon felhasználható
designon7 alapszik.
6.1.2.1. Üzleti egységek létrehozása, módosítása Üzleti egységeket a bal oldali menüben található „Új üzleti egység” menüpont (shop.inc.php fájl) alatt hozhatunk létre (6.2. ábra) Itt adhatjuk meg a bolt nevét, címét, nyitvatartási idejét, logóját, és a bemutatkozó szöveget is. Erre a szintén szabadon felhasználható FCKeditort integráltam az oldalba [76], míg a képek átméretezésére az image_uploader-t használtam [77].
6.2. ábra – Új üzleti egység, webes felület
Még ezen az oldalon van mód a különböző elfogadható kártyák, utalványok megadására is, mely lista adminisztrátor oldaláról bármikor dinamikusan bővíthető. Az üzleti egység létrehozásakor a rendszer legenerál egy egyedi azonosítót is a nfc_shop tábla mynfc mezőjébe. Ezt az értéket fogom felhasználni, mint a QR-kódos, mind az NFC-s beolvasás esetén, ez fogja azonosítani a boltot. A már létrehozott boltokat az Üzleti egységek ( shop_list.php) menüpont alatt lehet szerkeszteni. 7
http://www.freecsstemplates.org/
42
6.1.2.2. Hirdetések feltöltése Új hirdetést a 6.3. ábrán látható módon a bal oldali menü „Új hirdetés feltöltése” menüpont alatt tölthetünk fel. Itt megadhatunk minden korábban már említett, hirdetésre vonatkozó adatot. Feltölthetünk a termékről képet, melyet a rendszer átméretez, illetve megadhatunk egy YouTube videó linket is, melyet a termék megjelenítésekor <iframe>-be ágyazva lehet majd megtekinteni. Meg kell említeni, hogy a http://www.youtube.com/watch?v=K_thTIi955g formátumú linkeket át kell alakítani http://www.youtube.com/embed/K_thTIi955g formátumra a beágyazás miatt, de ezt az oldal elvégzi. Szintén ezen az oldalon kell megadni, hogy aktív legyen-e a hirdetés, és hogy mely boltokra vonatkozik az ajánlat.
6.3. ábra – Új hirdetés feltöltése
A feltöltött hirdetéseket később a Hirdetések szerkesztése (text_list.php) oldalon lehet módosítani, ahol a hirdetések boltonként vannak csoportosítva. Itt jól látszik, hogy a hirdetés aktíve, és hogy hány felhasználó adta a kedvenceihez (6.4. ábra).
6.4. ábra – Hirdetések szerkesztése
A cégeknek tehát először egyszer (illetve bővítéskor) fel kell vinnie a boltokat, és onnantól kezdve csak aktualizálni kell a hirdetéseket. 43
6.1.3. Android kliens megtervezése A diplomaterv során vagy normál, Java nyelvből már ismert osztályokat használok (például XML feldolgozásra), vagy ún. Activity-ket. Az Activity-k az Androidos alkalmazások legfontosabb részét képezik. Lényegében egy Activity egy éppen látható képernyő a mobil eszközön. Egy alkalmazás tartalmazhat több Activity-t is, de egyszerre mindig csak egy látható. Az Activity-k között bizonyos események hatására lépkedhetünk. Minden Android alkalmazásnak van ún. belépési pontja, ezzel indul gyakorlatilag az alkalmazás. Van mód több belépési pont kialakítására is, ha például bizonyos események hatására más Activity-t szeretnénk elindítani. Meg kell még említeni az Intent fogalmát is. Az Intentek lehetővé teszik, hogy az alkalmazás feliratkozzon bizonyos külső eseményekre, például ha szeretnénk, hogy alkalmazásunk elinduljon egy bejövő hívás hatására, akkor Intentet kell használnunk.
6.1.3.1. Android alkalmazások felépítése A projekt tehát alapvetően .java kiterjesztésű osztályokból épül fel. Néhány szóban a későbbi megértéshez elengedhetetlen Android-specifikus fogalmakat is ismertetem [78]. Minden Android alkalmazás fontos részét képezi egy ún. AndroidManifest.xml fájl, melyben definiálnunk kell az Activity-ket, a jogosultságokat, a belépési pontokat. Az általam készített alkalmazásból kiragadtam a fontosabb részleteket, ez látszik a 6.5. ábrán. Jól látható, hogy például a <uses-permission> részben adom meg, hogy az alkalmazás használhassa az internetet. Ezután az
tagen belül definiálom az egyes ket és a hozzájuk tartozó Intenteket, például az android.nfc.action.NDEF_DISCOVERED jelenti azt, hogy készenléti állapotban, új NFC címke leolvasásakor induljon el a ScanNFC Activity, de csak akkor, ha text/mynfc MIME típusú adatot olvastunk be. <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="hu.itarena.nfc" android:versionCode="1" android:versionName="1.0" android:theme="@android:style/Theme.Light.NoTitleBar"> <uses-sdk android:minSdkVersion="10" /> <uses-permission android:name="android.permission.INTERNET" />
....
44
....
....
6.5. ábra – AndroidManifest.xml (részlet)
Említést kell még tenni a <uses-sdk android:minSdkVersion="10" /> sorról. Ezzel definiáljuk, hogy mi az a minimum Android verzió, ami szükséges a futtatáshoz. Minden verziószámhoz, például 2.3 tartozik egy API-level, ez egy decimális szám, ezt kell itt megadni. A 9-es API leveltől támogatja az Android az NFC-t, azonban csak korlátozottan, az NDEF üzenetek feldolgozásához szükséges extra metódusokat nem. Ezért API level 10-et adtam meg, ami a 2.3.3-as verziónak felel meg, így efeletti verzióval rendelkező készülékeken fog futni az alkalmazás. A .java fájlok mellett több mappát is találhatunk, az egyik ezek közül a res (Resources, források) elnevezésű. Ebben további mappákat találunk: a drawable kezdetűek tartalmazzák a képeket, a layout az alkalmazások kinézetét xml-ben, a values pedig a stringeket. A strings.xml-ben
definiált szövegekre az AndroidManifest-ben "@string/app_name" módon
tudunk hivatkozni, ahol az app_name a string neve. Ugyanezt egy Activity-ben például az alábbi módon tehetjük meg: getString(R.string.app_name). Mindezt azért tehetjük meg, mert a háttérben az Android az erőforrásokat egy R.java osztályban gyűjti össze. Nagy előnye, hogy később, ha több nyelven is szeretnénk az alkalmazást elkészíteni, akkor csak ezt az egy fájlt (és a webes részt, képeket) kell lefordítani. Ugyanígy a felhasznált képeket is elérhetjük R.drawable.kepneve
formátumban.
Fontos megemlíteni, hogy az Android az alkalmazások, pontosabban az Activity-k futtatásakor egy ún. BackStack-et használ. Ha egy új Activity elindul, akkor az előző ennek a „verem”-nek a tetejére kerül. Ezután ha nyomunk egy vissza gombot a készüléken, akkor a legfelül lévő Activity folytatódik. A memóriakezelésre azonban a tervezés során ügyeltek, így ha nincs elég memória a rendszer számára, akkor szép lassan bezárogatja a BackStackben lévő Activityket.
45
Egy adott Activity-ből egy másikat a következő kódrészlettel lehet indítani (6.6. ábra): Intent gotomain = new Intent(ScanNFC.this, MainActivity.class); Bundle passedInfos = new Bundle(); passedInfos.putString("FROM", "ShowShop"); gotomain.putExtras(passedInfos); ScanNFC.this.startActivity(gotomain); finish();
6.6. ábra – Új Activity indítása
Ilyenkor az előző Activity-t be is fejezhetjük, ha nem szeretnék, hogy a vissza gombbal visszatérjünk később rá. Ezt a finish() függvénnyel tehetjük meg. A Bundle osztály lehetővé teszi, hogy paramétereket adjunk át egyik Actvity-ből a másiknak. Ezt gyakran fogom alkalmazni. Fontos még megemlíteni az ún. alkalmazás életciklust, vagyis az alkalmazás különböző állapotait, a teljesség igénye nélkül:
onCreate()
onStart()
onResume()
onPause()
onStop()
onDestroy()
– lényegében konstruktor, létrejön az Activity, layout.
– Láthatóvá válik az Activity – Láthatóvá vált az Activity, előtérben van
– Egy másik Activity kerül előtérbe, ez háttérbe
– Az Activity Stopped állapotba került – Az Activity megsemmisült, erőforrások felszabadultak
A fenti függvények az Activity osztályok részei, a megvalósítás során ezeket a függvényeket kell felülírni.
6.1.3.2. Felhasználói felület, menük Az Android alkalmazások felhasználói felületét XML fájlokban definiálhatjuk, és a layout mappában szokás őket eltárolni. Egy Activityhez a kinézetet a setContentView(R.layout.main) függvénnyel rendelhetjük hozzá. Emellett természetesen a .java fájlokból is módosíthatjuk az alkalmazás kinézetét. <EditText android:id="@+id/username" android:nextFocusUp="@+id/LoginButton" android:nextFocusDown="@+id/Password" android:hint="@string/username" android:inputType="textNoSuggestions" android:layout_width="fill_parent" android:layout_height="wrap_content" />
46
....
6.7. ábra – Felhasználói felület XML fájlban
A 6.7. ábrán az alkalmazásom bejelentkező Activity-jének egy részletét láthatjuk. Látható, hogy az elemek egy ún. LinearLayoutban helyezkednek el. Az egyik legfontosabb elem az android:id="@+id/username"
ugyanis így fogunk majd tudni hozzáférni például a szövegdoboz
tartalmához a következő módon: username = (EditText) findViewById(R.id.username). Az Android többféle menü megoldást kezel, ezek közül az egyik az ún. OptionsMenu. Ez az a menü, amit a készülék menü gombjának megnyomásával a kijelző alsó részén jelenik meg. Egy másik menü, a ContextMenu, mely egy adott elemre hosszan nyomva ugrik fel (6.8. ábra).
6.8. ábra – OptionsMenu és ContextMenu
Előbbit az onCreateOptionsMenu függvénnyel inicializálhatjuk, míg az egyes elemekre kattintás eseményét az onOptionsItemSelected függvény kezeli le. Hasonlóan az utóbbit onCreateContextMenu-vel
hozhatjuk létre, míg az onContextItemSelected függvény a
kiválasztások kezelésére szolgál. Az alapok áttekintése után rátérek a megtervezett alkalmazás részleteire.
6.1.3.3. A tervezett alkalmazás felépítése A tervezett alkalmazás szorosan együttműködik az adatbázissal, így az azt kiszolgáló PHP fájlokat is el kellett készíteni, először azonban bemutatom a tervezett alkalmazás életciklusát (6.9. ábra).
47
6.9. ábra – A tervezett Android alkalmazás életciklusa
Az ábrán az egyes téglalapokban az Activity-k nevei láthatóak, nyilakkal jeleztem a különböző kapcsolódásokat, lilával pedig a belépési pontokat. Az alkalmazás a MainActivity-vel indul, ha nem vagyunk bejelentkezve, akkor itt lehet elérni a Regisztrációt is. Belépés után a kedvenceinket látjuk, egy elemre kattintva a ShowItem osztály jeleníti meg a hirdetést. A QR-kód vagy NFC beolvasásáért a ScanQR és ScanNFC osztály felel, a beolvasás után a ShowShop osztály jeleníti meg az adott bolt hirdetéseit. Innen szintén el lehet érni egy-egy termék részleteit, de akár a bolt részletes adatait is. A Favourites és ShowShop osztályból lehet elérni a Beállításokat is. A következőkben részletesen bemutatom az egyes Activity-ket és osztályokat.
MainActivity Az alkalmazás elsődleges belépési pontja, valamint ez az osztály kezeli le a bejelentkezést is. Az Android lehetővé teszi ún. kulcs-érték párok tárolását a SharedPreferences osztály segítségével. Ezek az adatok fájlban tárolódnak, de a felhasználó kívülről nem éri el. Nagy előnye, hogy az alkalmazás bezárása és újra elindítása után is megmarad a tartalma, így jelen esetben kiválóan alkalmazható a felhasználónév, jelszó és a phpsessionid (lásd később) tárolására. Az Editor
osztály szükséges az adatok módosítására. Az alkalmazásom gyakorlatilag úgy indul, hogy
a tárolt adatokat kiolvasom. Ezt követően az alábbi elágazásokon megyek végig (6.10. ábra). if (isOnline()) { HTTPHandler isloggedinhandler = new HTTPHandler(); String isloggedin = isloggedinhandler.isloggedin(savedphpsessid); if (isloggedin.equals("true")) { // ha még tart a session gotoBack(); } else if ((!savedusername.equals("") && !savedpassword.equals(""))) {
48
// ha már nem tart a session, de van mentett név, jelszó login(savedusername,savedpassword); } else { // ha nincs session és nincs sem név sem jelszó. } else { // nincs internet }
6.10. ábra – MainActivity elágazások
Vagyis először ellenőrzöm az internetkapcsolatot, majd ellenőrzöm, hogy be vagyok-e lépve, ha igen akkor meghívom a gotoBack() függvényt, ami átirányítást végez. Ha nem vagyok már belépve, akkor a tárolt felhasználónévvel és jelszóval bejelentkezem, ha nincs tárolt név, akkor pedig megjelenítem a bejelentkezéshez szükséges felületet. A bejelentkezés kezelését úgy valósítom meg, hogy egy távoli PHP fájlra8 elküldöm a név és jelszó mezőket (POST), majd a szerver egy phpsessionid-t ad vissza válaszul. Ez a sessionid egy 32 karakter hosszú azonosító, melyhez az adatokat a szerver egy szöveges fájlban tárolja [79]. A szerveren ekkor egy $_SESSION[loggedin] változót true értékre állítok. Bár a session is támadható, mégis biztonságosabb, mint ha a táblában tárolt user_id-t használnám. Később az összes műveletet (a regisztrációt és a termék illetve bolt információkat megjelenítőit kivéve) ez a távoli fájl fogja elvégezni. Az alkalmazásban egyébként a HTTPHandler osztály különböző függvényei (pl. login(), getsettings()) kommunikálnak ezzel a fájllal. Az isonline() metódus több Activity-ben is meg van valósítva, a login() azonban csak itt, a MainActivity-ben.
Nagyon fontos, hogy a hálózati kapcsolatot használó függvényeket, vagy a
nagy számításigényű feladatokat ne a felhasználói felületet megjelenítő szálban végezzük, mert különben nagyon akadozni fog az alkalmazás, arról nem is beszélve, hogy néhány válasz nélküli másodperc után a készülék a „Nem válaszol” dialógusablakot is megjeleníti. Ezért minden internetet használó részt egy külön szálban futtatok. Ez idő alatt a felhasználó egy kis betöltés ablakot lát. Szinte minden osztályban előfordul, ezért bemutatom, hogy általánosan hogyan épül fel a szálkezelés Android platformon (6.11. ábra). final ProgressDialog dialog = ProgressDialog.show(this, "",getString(R.string.loggingin), true); final Handler handler = new Handler() { public void handleMessage(Message msg) { dialog.dismiss(); } }; Thread checkUpdate = new Thread() { public void run() { // Internet használata ... handler.sendEmptyMessage(0); 8
http://itarena.hu/nfc/mynfc.php?formid=login
49
} }; CheckUpdate.start();
6.11. ábra – Szálkezelés
Jól látható, hogy még a UI (User Internface, felhasználói felület) szálban elindítom a ProgressDialog msg
megjelenítését. Ezután egy Handlert is létrehozok, amely folyamatosan figyeli a
változót, és amennyiben értéket kap, azonnal bezárja a töltőablakot a dismiss() függvénnyel.
A kód második részében indítjuk el a szálat, és a run() függvényben végzem a számításigényes műveleteket. Fontos, hogy a szál (thread) nem nyúlhat hozzá a felhasználói felülethez, ellenkező esetben a program nem fog működni. A MainActivity esetében a HTTPHandler osztály login() függvényét hívom meg a run() metódusból, és ha a bejelentkezés sikeres, akkor itt tárolom le a felhasználónév és jelszó párost, valamint a phpsessionid-t, amit minden Activity használni fog később. A jelszavakat MD5 (Message-Digest Algorithm) titkosítással védem. Ezt a függvényt a [80] forrásból használtam fel. A phpsession egyik jellemzője, hogy bizonyos idő után lejár. Vagyis maga a phpsessionid nem lesz érvényes, hiába küldöm fel a szerverre, ezért újra be kell jelentkezni. Igen ám, de ha például a Kedvencek képernyőn voltunk majd pár óra múlva elővesszük a telefont és rányomunk a Frissítés gombra, akkor mi fog történni? Nos, ahogyan azt majd később is meg fogom mutatni, ilyenkor az alkalmazás meghívja a MainActivity-t és szükség esetén újra bejelentkezik, majd visszalépünk a hívó Activity-re. Erre szolgál a MainActivity goBack() függvénye, mely alapesetben a Kedvencekre irányít, de ha van „FROM” mező a Bundle-ben, akkor az annak megfelelőre. Bejelentkezés után a felhasználó a Kedvencek, vagyis a Favourites Activity-re lesz irányítva.
Favourites A kedvencek megjelenítésére szolgáló Activity, mely felépítése nagyon hasonlít a ShowShop Activity-hez. Az Activity feladata az XML (EXtensible Markup Language)-ben kapott lista megjelenítése is. Az onCreate() metódusban először ellenőrzöm az internetkapcsolatot, majd a korábbiakban ismertetett módon külön szálat indítok az XML feldolgozásnak, míg a UI-szálban már csak a megjelenítéssel foglalkozom. Erre két függvényt hoztam létre: a query() letöltést és a feldolgozást végzi, a drawList() a megjelenítést. A session lejárás miatt a query() függvényben is ellenőrizni kell, hogy a jelenlegi belépés még aktív-e, ha nem akkor a MainActivity elvégzi a belépést majd a FROM értéknek megfelelően újra a Favourites képernyőn találjuk magunkat. A Favourites osztály egyébként ListActivity, melyet tipikusan akkor szoktak használni, ha teljes képernyős listákat szeretnénk megjeleníteni. A ListActivity osztály abban több a sima Activity-nél, hogy alapértelmezve tartalmaz egy getListView() függvénnyel elérhető ListView 50
objektumot, és egy ListAdapter-t ami valójában tárolja és megjeleníti a lista elemeit. A ListAdapter
a BaseAdapter osztály leszármazottja és tartalmaz egy getView() nevű függvényt,
ahol a lista egy elemének kinézetét határozhatjuk meg. A diplomatervemben a megjelenő listák adaptere az RSSItemAdpater osztály. Egyetlen elem kinézetét pedig az itemlist.xml-ben határoztam meg, így az RSSItemAdapter getView() függvényével a kapott lista tartalmát helyezem el ennek megfelelően. Az RSSItemAdapter egy RSSItem típusú listát kap. Az RSSItem osztály csupán egy elem attribútumait tartalmazza. Ilyen RSSItem listákból áll össze a teljes feedre vonatkozó RSSFeed osztály. Az XML feldolgozásért már csak egy kimaradt osztály a felelős, az RSSHandler.
Néhány szót az XML feldolgozásról. Az XML feldolgozása többféle módon történhet, például a fabejáráson alapuló DOM (Document Object Model) vagy a szekvenciális feldolgozásra alkalmas SAX (Simple API for XML) API segítéségével. Én az utóbbit alkalmaztam, mert gyorsabb és kevesebb memóriát használ [81]. A SAX feldolgozó (Parser) eseményvezérelten működik, a kódban definiálni kell ún. callback() függvényeket, amelyeket a Parser a feldolgozás során meghívogat. Az RSSHandler osztály startElement() és endElement() metódusa észleli egy tag kezdetét és végét, a karakterek észleléséért pedig a characters() metódus felel. Ezen függvények az események bekövetkezésekor értesítik a Parsert. URL url = new URL(urlToRssFeed); SAXParserFactory parserfactory = SAXParserFactory.newInstance(); SAXParser parser = parserfactory.newSAXParser(); XMLReader xmlreader = parser.getXMLReader(); RSSHandler rsshandler = new RSSHandler(); xmlreader.setContentHandler(rsshandler); xmlreader.parse(new InputSource(url.openStream())); return rsshandler.getFeed();
6.12. ábra – SAX Parser inicializálás, Favourites osztály, getFeed() metódus
A 6.12. ábrán láthatjuk, hogy hogyan érhetjük el a Java beépített SAXParser osztályait. A 3. sorban hozzuk létre a dokumentum feldolgozásához szükséges Parser példányt, majd a következő sorban a dokumentumolvasó XMLReadert. Az XMLReader-hez hozzá kell rendelnünk a korábban már említett RSSHandler kezelőt (mely az egyedi elemeket definiálja), majd el kell indítani a parseolást, és végül a függvény az rsshandler getFeed() metódusának eredményéül visszaad egy RSSFeed
objektumot, mely tartalmazza az összes RSSItem elemet és a listára vonatkozó globális
információkat (esetenként a bolt azonosítóját). Visszatérve a Favourites osztály query() metódusára a getFeed() függvényt meghívva a fent leírt módon tehát lekérdeztük és feldolgoztuk a hirdetéseket tartalmazó XML fájlt. Ezt az
51
XML-t egyébként a korábban már említett fájl9 állítja elő, és mivel a phpsessionid-t is továbbítom ezért a lista a saját kedvenceinket fogja tartalmazni. Egy elemet a következő formában állítok elő XML-ben: - Sulirúd 16 http://nfc.itarena.hu/products/16244_sulirud.jpg frissen sütve 39 25
6.13. ábra – Egy hirdetés XML-formátumban
Az XML előállítása előtt természetesen PHP-vel ellenőrzöm a $_SESSION[loggedin] változó értékét, és csak true esetben adom vissza a kívánt elemeket. Miután a teljes XML fájt beolvastuk, a listában szereplő elemekhez tartozó kis képeket is le kell töltenünk. Egy ciklussal végigmegyek az összes elemen és az i. elem feed.getItem(i).get_adimg() képhivatkozását felhasználva letöltöm a kis képeket az alábbi módon: content = url.getContent(); InputStream is = (InputStream) content; feed.getItem(i).set_img(Drawable.createFromStream(is, "src"));
Ezt követően egy ArrayList „tömböz” (neve itemlist) hozzáadom az egyes elemeket, majd leállítom a szálat és elkezdem megjeleníteni. Ehhez létrehozom a korábban már említett RSSItemAdapter-t, melynek konstruktorában átadom az itemlist-et. Az Adapter getView()
metódusa pedig visszaad egy View-t, vagyis egy elemet grafikusan. A ListActivity
végül a setListAdapter(itemlistAdapter) sorral válik láthatóvá az összes elemmel. Még ebben a függvényben beállítok egy OnItemClickListenert is, így ha a felhasználó rákattint egy elemre, akkor az elem id-jét átadva meghívjuk a ShowItem Activity-t. A Favourites Activity-nél már csak a 6.8. ábrán is látható OptionsMenu és ContextMenu létrehozásáról nem volt szó. Előbbi az alkalmazás alsó részén megjelenő menü, mely az alábbi menüpontokat kapta (a szövegeket az favouritesmenu.xml tartalmazza): Új beolvasás: ez a funkció egy AlertDialog-ot nyit meg mely felkínálja, hogy QR-kódot szeretnénk-e beolvasni, vagy NFC címkét. Itt jegyezném meg, hogy a korábban említett okok miatt az NFC-s menüpontot nem szükséges használni, hiszen a címkét a készülékhez érintve automatikusan megtörténik a beolvasás és a kívánt ShowShop Activity elindul. Mindenesetre az 9
http://itarena.hu/nfc/mynfc.php?formid=getfavourites&PHPSESSID=123abc....
52
alábbi kódrészlettel azért leellenőrzöm, hogy a készülék NFC képes-e, illetve nincs-e kikapcsolva az NFC szolgáltatás: NfcManager manager = (NfcManager) getBaseContext() .getSystemService(Context.NFC_SERVICE); NfcAdapter adapter = manager.getDefaultAdapter(); if (adapter != null && adapter.isEnabled()) { // van NFC
Frissítés: A frissítés gombra kattintva gyakorlatilag külön szálban meghívom a query() és a drawList()
metódusokat az onCreate()-hoz hasonlóan.
Beállítások: Ez a menüpont szimplán meghívja a Setup Activity-t, erről később. Kijelentkezés: Gyakorlatilag törlöm a tárolt felhasználónév, jelszó és phpsessionid adatokat, és a felhasználót a MainActivity-re irányítom. Utóbbi, vagyis a ContextMenu pedig az alábbi elemekkel rendelkezik (itemlistmenu.xml): Eltávolítás a kedvencekből: Ennek a funkciónak a célja a kiválasztott elem törlése a kedvencek közül, melyet szintén egy HTTPHandler-rel valósítok meg. A kiválasztott elemhez a következő módon lehet hozzáférni (6.14. ábra): public boolean onContextItemSelected(MenuItem item) { AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo)item.getMenuInfo(); RSSItem selected = (RSSItem) getListAdapter().getItem(info.position)
6.14. ábra – Kiválasztott elem elérése ContextMenu-ből
Megosztás: A megosztás menüpont egy ún. implicit Intent
hívás, vagyis nem tudjuk
pontosan, hogy melyik alkalmazást szeretnénk elindítani, csak azt, hogy milyen műveletet szeretnénk végezni. A megosztás megvalósítása az alábbi módon történik (6.15. ábra): Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND); shareIntent.setType("text/plain"); RSSItem selected = (RSSItem) getListAdapter().getItem(info.position); shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Ajánom figyelmedbe: " + selected.get_name());
.... startActivity(Intent.createChooser(shareIntent, selected.get_name())
6.15. ábra – Megosztás funkció (részlet)
Vagyis egy ACTION_SEND Intentet indítunk el, és az EXTRA_SUBJECT és EXTRA_TEXT mezőket továbbítjuk. Utóbbi a kódrészletben nem látszik. Vissza: Visszatérünk az előző képernyőre a return true értékadással. Ezzel gyakorlatilag a Favourites Activity bemutatásának végéhez értem.
53
ShowShop A ShowShop ListActivity működése nagyon hasonlít a Favourites Activity-hez, annyi eltéréssel, hogy itt nem a kedvenceket, hanem az adott bolt releváns hirdetéseit kell kilistázni. A menük azonban eltérnek, ezért a külön osztály. A query() és drawList() metódusok megegyeznek a hivatkozást és a shopid Bundle-ben történő elhelyezését leszámítva. A ContextMenu az alábbi menüponttal változott: Hozzáadás a kedvencekhez: Ennek a funkciónak a célja a kiválasztott elem törlése a kedvencek közül, melyet szintén egy HTTPHandler-rel valósítok meg. Azt, hogy az adott hirdetés szerepel-e már a kedvencek között, szerveroldalon kezelem le. Az OptionsMenu pedig a következő új menüpontokat kapta: Kedvencek: visszatérési lehetőség a Favourites Activityhez Boltinfo: Az éppen betöltött bolt adatainak megjelenítése, vagyis a ShopInfo Activity elindítása a továbbított shopid-vel. Összes ajánlat: Lényegében ugyanaz, mint korábban a Frissítés, annyi különbséggel, hogy itt a query() függvény rendelkezik egy Boolean típusú showall paraméterrel. Ha az értéke true, akkor a szerver a bolt összes ajánlatát leküldi, nem csak a relevánsakat. A ShowShop Activity szintén a szerveren lévő fájlt10 hívja meg, természetesen a phpsessionid-vel
együtt. A releváns tartalmak megjelenítésért tehát szintén a PHP fájl felelős.
Ennek megvalósítása úgy történik, hogy van egy mindent kilistázó lekérdezés, és van egy $str elnevezésű sztring, melynek tartalma a paramétereknek megfelelően változik, majd bekerül a lekérdezés WHERE ágába. Ha az összes ajánlatot kérdezzük le, akkor ez a változó üres. A lekérdezés $str változója tehát ezek alapján a következő módon áll össze: if (($line[male]=='1') && ($line[female]=='1')) { $str ="";} if (($line[male]=='0') && ($line[female]=='0')) { $str ="";} if (($line[male]=='0') && ($line[female]=='1')) { $str =" AND female='1' ";} if (($line[male]=='1') && ($line[female]=='0')) { $str =" AND male='1' ";}
if ($line[sugarfree]=='1') {$str.=" AND sugarfree='1'";} if ($line[heartproblem]=='1') {$str.=" AND heartproblem='1'";}
… Vagyis, ha egyik nem sincs bepipálva, vagy ha mindkettő be van, akkor minden hirdetést megjelenítek. Látható, hogy például cukorbetegség esetén csak azok a termékek jelennek meg, melyek cukorbetegeknek ajánlottak. Ezért például egy televízió esetén minden paramétert be kell
10
http://itarena.hu/nfc/mynfc.php?formid=getshop
54
pipálni, hiszen az mindenki számára ajánlott. Az életkorra szűrést pedig az age_from < $line[age] AND age_to > $line[age]
sorral valósítom meg.
Minden más a Favourites osztállyal megegyezik.
Setup A Setup, vagyis Beállítások Activity a Favourites vagy a ShowShop Activity Beállítások OptionsMenu
elemmel érhető el. Itt ismét be kell vezetni egy speciális Android fogalmat, ez pedig
a Preferences Framework. Ennek lényege, hogy egyszerűen készíthetünk beállítások képernyőt, mely ugyanúgy fog kinézni, mint a telefon alapbeállítások képernyője. A Preferences Framework használatához szükségünk lesz egy speciális XML fájlra, mely a kinézetet tartalmazza, és egy olyan Activity-t kell létrehoznunk, mely a PreferenceActivity leszármazottja. Az elnevezés pedig a következő: egy Beállítások képernyőt a PreferenceScreen ír le, ezen belül lehet több PreferenceCategory a kategorizáláshoz, és egy beállítandó elem maga a Preference,
mely többféle lehet (szöveges, bepipálható ..stb.)
Egy-egy ilyen Preference a következő módon néz ki:
Először definiálni kell a típusát, például Checkbox (bepipálható), majd definiálni kell egy azonosítót (key), a megjelenítendő szöveget (title), a hozzátartozó részletesebb leírást (summary), és az alap értéket. A szövegek a stings.xml fájlban vannak definiálva. Az értékek ugyanúgy a SharedPreferences
osztály segítségével lesznek eltárolva, mint a felhasználónév, jelszó esetén.
Először egy külön szálban csatlakozok a szerverhez, letöltöm a jelenlegi beállításokat és eltárolom az Editor osztály segítségével. A következő kódrészlet mutatja, hogy hogyan férhetünk hozzá a beállításokhoz, és hogyan jeleníthetjük meg a fent leírt elemeket a setup.xml-t felhasználva. SharedPreferences sharedPrefs = PreferenceManager .getDefaultSharedPreferences(getApplicationContext()); addPreferencesFromResource(R.layout.setup);
A menü gombot használva megjelenik a beállítások mentése gomb. Erre kattintva az onOptionsItemSelected
elmenti a beállításokat. A mentés végén visszatérünk az előző Activity-
re a finish() függvénnyel és megjelenítünk egy kis üzenetet a Sikeres mentésről.
55
Ezt Toast-nak hívják, és több helyen is használom, az alábbi módon kell definiálni (fontos, hogy az indított szálban ezt sem lehet használni): Toast.makeText(getApplicationContext(), getString(R.string.saveok), Toast.LENGTH_SHORT).show();
A következő, 6.16. ábrán a beállítások képernyő, illetve egy Toast látható.
Registration A regisztráció (6.16. ábra jobb oldal) akkor érhető el a MainActivty-ből, ha nem vagyunk bejelentkezve. Feladata, hogy a mezőkbe gépelt információkat a Regisztráció gombra kattintva felküldje a szervernek. A mezők ellenőrzését a szerveroldal végzi, és a válaszüzenetet egy Toastban jelenítem meg. Ha a regisztráció sikeres, akkor a szerver egy e-mailt küld a felhasználónak a nevével és a jelszavával, valamint egy hivatkozással, amelyre kattintva aktiválható a regisztráció. A levélküldést a PHPMailer-rel végzem [82], az aktiválás során pedig az nfc_user tábla c_status mezőjét állítom 0-ról 1-re.
6.16. ábra – Beállítások és a regisztráció képernyő
ShowItem, ShopInfo A ShowItem a hirdetések, a ShopInfo a bolt adatainak megjelenítésére szolgáló Activity. Előbbi először a Bundle-ből kiszedi a hirdetés azonosítóját (itemid), majd betölti a weboldalt11 egy WebView-ban. A WebView egy egyszerűen definiálható elem, lényegében egy böngésző felület, amit beilleszthetünk az oldalba. A showitem.xml-ben a következő módon használom: 11
http://itarena.hu/nfc/showitem.php?itemid=1
56
<WebView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/webview" android:layout_width="fill_parent" android:layout_height="fill_parent" />
A WebView esetén be kell még állítani néhány paramétert, mivel a megjelenítésnél beágyazott YouTube videót is használok, ezért engedélyezni kell a plugineket (Flash player) és a JavaScript futtatását. Ezt, és az oldal betöltését így lehet megtenni: WebView mWebView = (WebView) findViewById(R.id.webview); mWebView.getSettings().setBuiltInZoomControls(true); mWebView.getSettings().setJavaScriptEnabled(true); mWebView.getSettings().setPluginState(WebSettings.PluginState.ON); mWebView.loadUrl("http://itarena.hu/nfc/showitem.php?itemid="+itemid);
Ekkor még egy olyan probléma felmerült, hogy ha elindítottam a videót, és egy vissza gombot nyomtam, a videó lejátszás nem állt meg, viszont leállítani sehogy sem lehetett. Ezért a ShowItem Activity onPause() metóduásba a következő kódrészletet kellett illeszteni egy try-catch blokkba: Class.forName("android.webkit.WebView").getMethod("onPause", (Class[]) null).invoke(mWebView, (Object[]) null);
A hirdetés megjelenítéséhez egy ingyenesen letölthető mobil sablont12 alakítottam át, és 6.17. ábrán látható:
6.17. ábra – Hirdetés és boltinformáció megjelenítése WebView-ban
A termék fényképe, neve és ára, valamint részletes leírása, videója mellett azokat a boltokat is kilistázom, ahol a termék kapható. Erre azért van szükség, mert ha egy hirdetést megosztunk az alkalmazás segítségével, például e-mailben, akkor a fogadó meg tudja nézni, hogy mely boltokban 12
http://qrdvark.com/templates/fone/
57
érvényesek az akciók, és a bolt nevére kattintva további adatokat tudhat meg a boltról. Az alkalmazásban a ShowShop Activity-ből érhető el a ShopInfo Activity, mely a ShowItem-hez hasonlóan egy Webview és a bolt adatait jeleníti meg a shopid alapján. A shopid-t az RSSFeed típusú feed példánytól a getShopid() metódussal kérdezhetjük le. Ez az oldal a boltadatok mellett kilistázza a webes felületen kiválasztott elfogadott kártyákat is. A címet pedig úgy jelenítem meg, hogy arra kattintva a Google Maps térképen megnézhessük hol található pontosan. Ez szintén azok számára előnyös, akik például e-mailben tájékozódtak a hirdetésről egy ismerős által. Ezek után már csak két Activity maradt hátra, melyek a kódok és címkék leolvasásáért felelősek.
ScanQR A 2.2. fejezetben nagyjából bemutattam, hogyan épül fel a QR-kód. Jelen diplomaterv keretein kívül esik egy QR-kód olvasó alkalmazás tervezése, így egy szabadon felhasználható alkalmazást használtam. Ezt a rendszert Zebra Crossingnak, röviden ZXingnek13 nevezik. Az alkalmazás Androidra, Java-ra, iOS-re, C++-ra, Blackberry-re és JavaME-re is kínál megoldást. A QR-kódok mellett olvas Aztec Code-ot, DataMatrixot, de a szabvány vonalkódot is. A ZXing projekten alapuló Androidos kliens neve Barcode Scanner. A ZXing alkalmazásomban való felhasználása kétféle módon is lehetséges. Egyrészt a korábbi Megosztás funkcióhoz hasonlóan úgy is felhasználhatnám, hogy egy Intent hívással elindul a telefonra telepített Barcode Scanner alkalmazás, és a visszatérési értéket használnám fel. E megoldás hátránya, hogy a Barcode Scannernek is telepítve kell lennie. Arra lenne mód, hogy az alkalmazásom ellenőrzi a program meglétét, és ha nem elérhető, akkor a felhasználót a Marketra irányítja a letöltéshez. A másik módszer, hogy a ZXing-et belefordítjuk az alkalmazásba, így annak részét fogja képezni, külön nem kell telepíteni. Ennek módja a következő volt: A projekt weboldalról letöltöttem a projekt teljes forrását. Ezután bemásoltam a myNFC projekt mellé egy ZXing könyvtárba. Eclipse-ben az új projekt létrehozásánál kiválasztottam, hogy meglévő forrást használok fel, majd a projekt megjelent a Package Explorer-ben. A ZXing projekt tulajdonságait megjelenő ablakban az Android fül alatt be kell pipálni, hogy „is Library”, hogy ezt egy másik projektben fel tudjuk használni. Ezután a myNFC projekt beállításánál, szintén az Android szekcióban az Add gombbal hozzá tudtuk adni a ZXing-et a Referenced Libraries-hez. Elsőre azért nem sikerült, mert nem egymás melletti mappában van a két projekt, és nem tudott írni a Windows 7 az adott mappába. Eclipse esetén egyébként is problémát okoznak az ékezetes mappanevek, így azt sem érdemes használni. Ha a fenti beállítások sikeresek voltak, akkor a saját alkalmazásunk AndroidManifest.xml állományába a következő sorokat kell még elhelyezni: 13
http://code.google.com/p/zxing/
58
Ezzel gyakorlatilag lehetővé tesszük, hogy amennyiben QR-kód olvasás Intentet indítunk, akkor a mi alkalmazásunk is szerepeljen a listában, és amennyiben egyedüli, úgy nincs is ilyen lista, egyszerűen elindul a QR-kód olvasás. A kódban az olvasást így lehet elindítani: Intent intent = new Intent("com.google.zxing.client.android.SCAN"); intent.putExtra("SCAN_MODE", "QR_CODE_MODE"); startActivityForResult(intent, 0);
A visszatérési érték pedig így érhető el: String contents = intent.getStringExtra("SCAN_RESULT");
Gyakorlatilag a contents változó tartalmaza a QR-kódban elhelyezett stringet, ami a boltot azonosítja. Ez az adatbázisban a nfc_shop táblában tárolt, korábban említett mynfc mező, melynek formátuma a következő: mynfc:1234567. Ezt kiolvasva a változó tartalmát Bundle-ben továbbítva indítom el a ShowShop Activity-t.
ScanNFC [83] Az NFC címke beolvasásáért a ScanNFC osztály felel. A 2.4.2. fejezetben részletesen bemutattam az NDEF adatformátumot, az NFC Forum által szabványosított címkék felépítését. Az Android a 2.3.3. verziótól tartalmazza az NFC framework-öt, mely lehetővé teszi az NFC Forum szabvány címkék olvasását, az NDEF adatok kezelését. A 2011-ben Google által rendezett fejlesztői konferencián, a Google IO-n tartott workshopon mutatták be az NFC címkék kezelésének alapjait Android platformot. Az előadáson készített és ismertetett Sticky Notes nevű alkalmazást felhasználva készítettem el a ScanNFC osztályt. Az eredeti forrás letölthető14. A Sticky Notes alkalmazás annyit tud, hogy text/plain MIME-típusú címkét ír és olvas egy tag-be. A forrást letöltve a megfelelő helyen a MIME típust átírtam text/mynfc-re,
és ezt az alkalmazást fogom használni a tagek írásához. Ha egy cég beregisztrál
egy új üzletegységet, akkor az ahhoz generált mynfc azonosítót így fogom a címkékbe írni, a diplomatervemnek ugyanis nem volt célja az adminisztrátori oldal teljes kidolgozása. 14
http://nfc.android.com/
59
A ScanNFC Activity tehát a Sticky Notes és [83] alapján készült néhány módosítással. Nézzük, hogyan lehet NFC taget olvasni Androidon. Az egyik fontos dolog, hogy a 6.5. ábrán bemutatott módon adjunk hozzá Intent filtereket a ScanNFC osztályhoz. Ez fogja lehetővé tenni, hogy készenléti módban, bekapcsolt NFC mellett, amennyiben a készülékhez címkét érintünk, akkor elinduljon az az Activity amely a címkék beolvasásáért felelős. Szintén itt definiálom, hogy csak text/mynfc
típusú címkék esetén induljon el.
A ScanNFC Activity onCreate() metódusában először ellenőrzöm, hogy a készülék alkalmase NFC használatára, majd a FLAG_ACTIVITY_SINGLE_TOP segítségével beállítom, hogy ha a hívott Activity-ből már van egy példány a korábban említett BackStack-ben, akkor ne jöjjön létre még egy. Ezután az AndroidManifest.xml állományhoz hasonlóan definiálom az IntentFiltereket, vagyis ACTION_NDEF_DISCOVERED esemény hatására, és text/mynfc MIME típusú címkék esetén induljon el. Az IntentFiletert a mNdefExchangeFilters mezőben tárolom el. Erre azért van szükség,
mert
a
enableForegroundDispatch()
enableForegroundDispatch()
paraméterei
lesznek.
Az
szerepe pedig, hogy jelezze az Android számára, hogy
alkalmazásunk NFC címkék olvasásával/írásával foglalkozik, és ne engedje más alkalmazás elindítását a címkeolvasás hatására. (6.18. ábra) Amikor az alkalmazás előtérbe kerül és meghívódik az onResume() metódus akkor kell az enableForegroundDispatch()-t meghívni, míg az onPause()-ban a disableForegroundDispatch()-t, így ha az alkalmazás háttérbe kerül már más alkalmazás is használhatja az NFC funkciót. if (mNfcAdapter != null && mNfcAdapter.isEnabled()) { mNfcPendingIntent = PendingIntent.getActivity(this, 0, new Intent( this, getClass()).addFlags (Intent.FLAG_ACTIVITY_SINGLE_TOP), 0); IntentFilter ndefDetected = new IntentFilter( NfcAdapter.ACTION_NDEF_DISCOVERED); try { ndefDetected.addDataType("text/mynfc"); } catch (MalformedMimeTypeException e) { } mNdefExchangeFilters = new IntentFilter[] { ndefDetected }; }
6.18. ábra – ScanNFC Activity, onCreate() metódus
Az onResume() metódus a beolvasást követően meghívja a getNdefmessages() függvényt, amely visszatérési értékként átadja a címkében található NDEF üzenetet (6.19. ábra). Az getNdefMessages()
metódus egyébként a nem NDEF típusú üzeneteket is fel tudja dolgozni.
String action = intent.getAction(); if (NfcAdapter.ACTION_TAG_DISCOVERED.equals(action)
60
|| NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action))
{
Parcelable[] rawMsgs = intent.getParcelableArrayExtra (NfcAdapter.EXTRA_NDEF_MESSAGES); if (rawMsgs != null) { msgs = new NdefMessage[rawMsgs.length]; for (int i = 0; i < rawMsgs.length; i++) { msgs[i] = (NdefMessage) rawMsgs[i]; } }
….
}
6.19. ábra – getNdefMessages metódus (részlet)
A visszakapott NDEF Message-ből a getRecords(0) metódussal az első rekordot érem el, majd ebből a getPayload()-dal magát az üzenetet byte[] tömbben (6.19.ábra). if (!mWriteMode && NfcAdapter.ACTION_NDEF_DISCOVERED.equals (intent.getAction())) { NdefMessage[] msgs = getNdefMessages(intent); String body = new String(msgs[0].getRecords()[0].getPayload()); nfcloginandgo(body); }
6.20. ábra – NFC rekord elérése
Ha a rekordból sztringet készítünk, akkor végre hozzáférünk a szöveges tartalomhoz. Ekkor meghívom az általam írt nfcloginandgo() metódust, mely a kapott sztringgel mghívja a MainActivity-t,
majd a FROM mezőnek köszönhetően eljutunk a ShowShop Activityhez. Azért kell
meghívnom minden esetben a MainActivity-t, mert ha készenléti állapotból érkezünk ide, akkor elképzelhető, hogy nem leszünk bejelentkezve, ezért az ellenőrzést nem itt, hanem a MainActivity-ben
a korábban ismertetett módon végzem. A ScanNFC osztályban még egy
metódust találunk, ez pedig az onNewIntent(). Ez akkor fog meghívódni, ha az Új beolvasás/Beolvasás NFC-vel menüpontot választjuk. Ezzel gyakorlatilag az alkalmazás összes Activity-jét és osztályát bemutattam. A program egyébként egy egyedi ikont is kapott, melyet 3 különböző méretben (36, 48, 72 pixel) készítettem el, az Android Developer oldalon leírt követelmények szerint. Ezen kívül a Bejelentkezés és a Regisztráció felirat szintén kép.
61
6.1.3.4. Tesztelés Az elkészített alkalmazást a 4.3. fejezetben leírt módon, több készüléken is kipróbáltam. A fejlesztés során sokat segített az Eclipse-ben jobb oldalon felül elérhető DDMS/Logcat menüpont, mely az összes Android üzenetet kilistázza. A kivételkezelés, lefagyások, egyéb problémák kiküszöbölésékor nagy segítség. Emellett az Android beépítve tartalmaz egy Log osztályt is, amely lehetővé teszi, hogy mi is kiírhassunk erre a felületre Log üzeneteket. Ilyen üzenetet a következő módon állíthatunk elő: Log.i("kulcs", "érték ide írhatunk valamit");
A tesztelést az alábbi Android 2.3.3.-at futattó készülékeken végeztem el: SAMSUNG Galaxy S, SAMSUNG Galaxy Ace, Google Nexus S. Ebből csak az utóbbi rendelkezik NFC chippel, így azt is tudtam tesztelni, hogy mi történik, ha a készülék nem alkalmas NFC olvasásra. A Nexus S és Galaxy S WVGA (800x480) kijezővel, az Ace HVGA (320x480) kijelzővel rendelkezik, így az eltérő felbontásokat is meg tudtam nézni. WiFi és 3G kapcsolattal, menet közben megszakított internettel is végeztem teszteket.
6.21. ábra – Tesztkörnyezet, QR-kód, és NFC címke
Eleinte problémát okozott, hogy a ScanNFC belépési pontnál nem volt értéke a phpsessionidnek, mert először azt mindig Bundle-ben adtam át, később ezért tároltam inkább
62
SharedPreferences-ben.
A 6.21. ábrán látható az alkalmazás futás közben a három készüléken,
valamint a tesztelésre használt QR-kódok és az NFC címke. Az alkalmazás 2.2-es Androidon való futtatásához azonban az NFC-vel kapcsolatos osztályokat, függvényeket el kellene távolítani, és QR-kóddal továbbra is használható lenne. A webes felületen 3 üzleti egységet, két áruházat és egy mozit is feltöltöttem különböző hirdetésekkel, paraméterekkel, hogy a beállításoknak megfelelő releváns hirdetések funkciót is tesztelhessem. A teszteléshez ezekhez az üzletekhez generáltam QR-kódot a qr-kod.hu oldal segítségével, valamint a Sticky Notes alkalmazással egy Mifare Ultralight címkét is használtam. Ezt a címkét egyébként 2011-ben a Sziget Fesztivál alatt a CityPass karszalagban használták. Kijelenthetem, hogy a tesztek sikeresek voltak, az alkalmazás megfelelően működött, a webes felület pedig több böngészőben is hiba nélkül funkcionált. A projekthez szabvány Javadoc dokumentáció is készült.
6.1.3.5. Melléklet Diplomatervem CD-mellékletén elérhető a diplomaterv PDF formátumban, az elkészült alkalmazás és a webes felület forráskódja, a futtatható apk alkalmazás (Android 2.3.3. platformra), és 3 QR-kód a teszteléshez. Az alkalmazás jelenleg az http://nfc.itarena.hu címről is letölthető.
63
8. Összefoglalás A diplomaterv elején bemutattam a QR-kódot, mint két-dimenziós vonalkódot, a rádiófrekvenciás azonosításra szolgáló RFID technológiát, és a manapság oly népszerű NFC-t. Ismertettem az NFC Forum által szabványosított megoldásokat, valamint az NFC címkék fajtáit. Ezt követőem néhány oldalban egyrészt az NFC mai helyzetéről, másrészt a mobil készülékek piacán uralkodó trendekről és technológiákról ejtettem szót. A következő részben az Androidot, mint a világ legnépszerűbb mobil platformját mutattam be, és röviden ismertettem a különböző verziókat és azok jelenlegi penetrációját. Bemutattam, hogyan kell kialakítani az Android fejlesztőkörnyezetet Eclipse segítségével, és hogyan kell beállítani az emulátort. Az 5. fejezetben részletesen ismertettem a megvalósítandó feladatot. A cél egy személyes információkat felhasználó releváns hirdetések megjelenítésére szolgáló alkalmazás elkészítése volt QR-kód és NFC felhasználásával. A feladat része egy webes felület fejlesztése is, ahol a kereskedők különböző paraméterekkel hirdetéseket vihetnek fel. Ugyanígy szükséges az Android alkalmazást adatokkal kiszolgáló program megírására is. Ennek megvalósításáról és az adatbázis felépítéséről a 6. fejezetben számoltam be. A webes felület elkészítése után nekiláttam az Android alkalmazás fejlesztésének. Mivel számomra teljesen új volt a platform így az Android fejlesztés alapjait is ismertettem röviden. Ezt követően a megírt alkalmazás osztályait mutattam be egyesével, kódrészletekkel, képernyőképekkel. Az elkészült rendszert természetesen több böngészőben és háromféle készülékkel is teszteltem QR-kódokkal és NFC-címkékkel is. A diplomaterv elkészítése során, mivel igen új technológiáról van szó, és szinte naponta változik elengedhetetlen volt az Internet és az Android Developer oldal használata, ezáltal számos forrás felhasználása, erre utal az Irodalomjegyzék nagyszámú hivatkozása. Úgy gondolom a kitűzött célok megvalósultak, a vállalt feladatot elvégeztem.
8.1. Továbblépési lehetőségek Továbblépési tervek között szerepel, hogy a termékeket megfelelően kategorizálva (speciális űrlapok) akár a termékek gyártói is feltölthetnék, így akciók feltöltésekor azokat már csak ki kell tallózni. Ez pedig lehetővé tenné, hogy a vásárlók akár márkára, terméktípusra szűrt ajánlatokat is kapjanak. További ötlet, hogy a boltokban az egyes termékeknél is szerepelhetnének címkék, így lehetővé válna akár a termékek paramétereinek összehasonlítása is. Emellett a platform elterjedése érdekében elengedhetetlen egy iOS és egy Windows Phone alapú kliens elkészítése, melyek először csak a QR-kód olvasást támogatnák. 64
Köszönetnyilvánítás Szakdolgozatom elkészítésében nyújtott segítségéért, meglátásaiért, javaslataiért és a konzultációk lehetőségéért köszönetet mondok konzulensemnek, Schulcz Róbertnek. Köszönöm
a
BME-Infokom
Innovátor
Nonprofit
Kft.-nek,
hogy
biztosították
a
megvalósíthatáshoz elengedhetetlenül szükséges készüléket, egy Google Nexus S-t. További köszönettel tartozom Szoboszlai Istvánnak és Gál Istvánnak, akikhez bátran fordulhattam segítségért.
VII
Ábra és táblázatjegyzék 2.1. ábra – Az UPC és az EAN-13 vonalkód .............................................................................. 2 2.2. ábra – QR-kód és Data matrix.............................................................................................. 2 2.3. ábra – A QR-kód felépítése [60] .......................................................................................... 3 2.4. ábra – Wikipedia linket tartalmazó QR-kód [60] ................................................................. 3 2.5. ábra – Az RFID rendszer felépítése ..................................................................................... 5 2.6. ábra – Kapacitív csatolás [10] .............................................................................................. 7 2.7. ábra – Az induktív csatolás [10]........................................................................................... 7 2.8. ábra – RFID működési frekvenciák [11] .............................................................................. 9 2.9. ábra – EPC kód felépítése [5]............................................................................................. 10 2.10. ábra – NFC eszközök kommunikációja [13] .................................................................... 13 2.11. ábra – NFC rendszerek felépítése (nem biztonságos) ...................................................... 13 2.12. ábra – NFC működési módok [53],[5] ............................................................................. 14 2.13. ábra – NFC eszköz felépítése ........................................................................................... 15 2.14. ábra – adatok tárolása NFC címkén [61].......................................................................... 15 3.1. ábra – Az Android platform felépítése [24] ....................................................................... 20 3.2. ábra – Mobil szoftverboltból letölthető alkalmazások számának alakulása [31] ............... 22 3.3. ábra – iPhone generációk, forrás: Wikipedia ..................................................................... 25 3.4. ábra – Androidos okostelefonok ........................................................................................ 26 3.5. ábra – Mobil operációs rendszerek elterjedtsége, 2011. második negyedév [73] .............. 27 3.6. ábra – Android verziók penetrációja, 2011. november 3. [29]........................................... 28 3.7. ábra – A Tablet PC-től a tabletekig .................................................................................... 29 4.1. ábra – Elérési útvonalak ..................................................................................................... 32 4.2. ábra – Új projekt létrehozása ............................................................................................. 33 4.3. ábra – Android HelloWorld ............................................................................................... 33 4.4. ábra – Android Emulátor.................................................................................................... 34 5.1. ábra – myNFC megállítótábla - koncepció ........................................................................ 35 5.2. ábra – A tervezett Android alkalmazás (illusztráció) ......................................................... 36 5.3. ábra – Akció feltöltése (illusztráció) .................................................................................. 36 6.1. ábra – Az adatbázis felépítése ............................................................................................ 40 6.2. ábra – Új üzleti egység, webes felület ................................................................................ 42 6.3. ábra – Új hirdetés feltöltése ............................................................................................... 43 6.4. ábra – Hirdetések szerkesztése ........................................................................................... 43 6.5. ábra – AndroidManifest.xml (részlet) ................................................................................ 45 6.6. ábra – Új Activity indítása ................................................................................................. 46 VIII
6.7. ábra – Felhasználói felület XML fájlban ........................................................................... 47 6.8. ábra – OptionsMenu és ContextMenu................................................................................ 47 6.9. ábra – A tervezett Android alkalmazás életciklusa ............................................................ 48 6.10. ábra – MainActivity elágazások ....................................................................................... 49 6.11. ábra – Szálkezelés ............................................................................................................ 50 6.12. ábra – SAX Parser inicializálás, Favourites osztály, getFeed() metódus ......................... 51 6.13. ábra – Egy hirdetés XML-formátumban .......................................................................... 52 6.14. ábra – Kiválasztott elem elérése ContextMenu-ből ......................................................... 53 6.15. ábra – Megosztás funkció (részlet) .................................................................................. 53 6.16. ábra – Beállítások és a regisztráció képernyő .................................................................. 56 6.17. ábra – Hirdetés és boltinformáció megjelenítése WebView-ban ..................................... 57 6.18. ábra – ScanNFC Activity, onCreate() metódus................................................................ 60 6.19. ábra – getNdefMessages metódus (részlet) ...................................................................... 61 6.20. ábra – NFC rekord elérése................................................................................................ 61 6.21. ábra – Tesztkörnyezet, QR-kód, és NFC címke ............................................................... 62
IX
Irodalomjegyzék [1]
Barcode - Wikipedia URL: http://en.wikipedia.org/wiki/Barcode
[2]
OTP Bank - PayPass URL: https://www.otpbank.hu/paypass/hu/Fooldal
[3]
NFC alapú megoldások a Sziget Fesztiválon URL: http://computerworld.hu/nfc-az-idei-szigeten-20110408.html
[4]
Deutsche Telekom: NFC alapú fizetés URL: http://mobilarena.hu/hir/deutsche_telekom_nfc_alapu_fizetes_vilagszerte.html
[5]
Matt Ward, Department of Design, Goldsmiths College, University of London: RFID: Frequency, standards, adoption and innovation, JISC Technology and Standards Watch, May 2006 URL: http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.102.3390&rep=rep1&type=pdf
[6]
EPC – nem csak egy szám – Ginnt Expo Budapest URL: http://www.ginnt.hu/mediacenter/epc-%E2%80%93-nem-csak-egy-sz%C3%A1m%E2%80%A6.html
[7]
Kósa Zsuzsanna: Rádiófrekvenciás azonosítás (és ami utána következik) URL: http://www.nhit-it3.hu/it3-cd/A23_%20Radiofrekvencias%20azonositas.pdf
[8]
GS1 Hungary – Cégtörténet URL: http://www.gs1hu.org/default.asp?idx=34
[9]
Dr. Bakonyi Péter c. Főiskolai tanár: Az Internet jövője - Internet of Things URL: http://www.sztaki.hu/~pbakonyi/oe-2010/Internet%20of%20Things-2010.pdf
[10] ANSWARE, ETIK, ELTE, JEDLIK ÁNYOS PROGRAM, RFID KUTATÁSI PROJEKT Dr. Imre Sándor, Kis Zoltán, Molnár László, Pogátsa Attila, Schulcz Róbert, Tóth Gábor: RFID RENDSZEREK VIZSGÁLATA FELHASZNÁLÁS ÉS TECHNOLÓGIA SZEMPONTJÁBÓL BME Híradástechnikai Tanszék (HIT), Egyetemközi Távközlési és Informatikai Központ (ETIK), 2006. URL: http://www.rfid.answare.hu:8080/site/kutatasi-erdmenyeink/radios-megoldasok/2006/rfid-rendszerekvizsgalata-felhasznalas-es-technologia-szempontjabol.pdf/view [11] Petyus Dániel: RFID technológia, Budapest, 2007 URL: http://pixel.weblabs.hu/nik/RFID.pdf [12] NJSZT Intelligens Kártya Fórum: NFC workshop URL: http://diadnfc.eu/data/NFC_workshop_IKF.pdf [13] Klaus Finkenzeller – RFID Handbook: Fundamentals and Applications in Contactless Smard Cards, Radio Frequency Identification and Near Field Communication, Wiley, 2010, ISBN: 978-0-470-69506-7 [14] SG.hu - 2011-től NFC-vel kapható minden Nokia okostelefon URL: http://www.sg.hu/cikkek/75199/2011_tol_nfc_vel_kaphato_minden_nokia_okostelefon [15] Biztonság mindennap - az állami nyomda blogja - Több tízmillió NFC telefon 2011-ben URL: http://allaminyomda.blogspot.com/2010/10/tobb-tizmillio-nfc-telefon-2011-ben.html [16] SG.hu - 2011 az NFC éve lesz URL: http://www.sg.hu/cikkek/80337/2011_az_nfc_eve_lesz [17] Android Hungary - Beépített bankkártya funkció a jövő Android készülékeiben URL: http://androidhungary.com/2010/11/beepitett-bankkartya-funkcio-a-jovo-android-keszulekeiben/ [18] MobilArena - Android 2.3.3: Bluetooth párosítás NFC segítségével URL: http://mobilarena.hu/hir/android_2_3_3_bluetooth_parositas_nfc_segitsegevel.html
X
[19] OTP Bank - PayPass URL: https://www.otpbank.hu/paypass/hu/PayPass_bevezetes [20] Index.hu - Pénztárcánkra hajt a Google és a Nokia / Kártyacsata indul URL: http://index.hu/tech/2011/01/12/penztarcankra_hajt_a_google_es_a_nokia/ [21] Nearfieldcommunicationsworld.com - A definitive list of NFC phones URL: http://www.nearfieldcommunicationsworld.com/nfc-phones-list/#available [22] TechCrunch - Breaking: Google Announces Android and Open Handset Alliance URL: http://techcrunch.com/2007/11/05/breaking-google-announces-android-and-open-handset-alliance/ [23] JavaForum.org - a platformról URL: http://www.javaforum.hu/javaforum/8/android/android_cikkek/20/show/mi_az_android_ [24] Reto Meier - PROFESSIONAL Android™ 2 Application Development Wiley Publishing, Inc. ISBN: 978-0-470-56552-0 [25] Wikipedia - Android (operating system) URL: http://en.wikipedia.org/wiki/Android_(operating_system) [26] BitPort - Intel processzorra is készül az Android http://www.bitport.hu/mobilitas/intel-processzorra-is-portoljak-az-android-honeycomb-mobil-operacios-rendszert [27] Wikipedia - Android version history URL: http://en.wikipedia.org/wiki/Android_version_history [28] Mobilport - Hivatalos: nem lesz két Android URL: http://www.mobilport.hu/hirek/20110216/hivatalos_nem_lesz_ket_android/ [29] Android Developers - Platform Versions URL: http://developer.android.com/resources/dashboard/platform-versions.html [30] Android Market URL: http://en.wikipedia.org/wiki/Android_Market [31] Ingyenes alkalmazások élén az Android URL: http://nonstopmobil.hu/ingyenes-alkalmazasok-elen-az-android-20110429.html [32] Teljes C és C++ támogatás Androidon URL: http://androidhungary.com/2011/01/teljes-c-es-c-tamogatas-androidon/ [33] AppInventor, avagy hogyan fejlesszünk Androidra programozás nélkül URL: http://androidhungary.com/2010/11/appinventor-avagy-hogyan-fejlesszunk-androidra-programozas-nelkul/ [34] Hogyan futtassunk PHP scriptet Android készüléken URL: http://androidhungary.com/2010/08/hogyan-futtassunk-php-scriptet-android-keszuleken/ [35] Android a legvonzóbb platform URL: http://androidarena.hu/2011/04/android-legvonzobb-platform/ [36] 30 millió GALAXY S és GALAXY S II okostelefont adott el a Samsung URL: http://www.mobilport.hu/30-millio-galaxy-s-es-galaxy-s-ii-okostelefont-adott-el-a-samsung-20111018.html [37] 200 Million Android Devices Activated; 550,000 Every Day URL: http://www.tomsguide.com/us/Android-sales-activations-phones-tablets,news-13226.html [38] Android alkalmazások Blackberry-n URL: http://androidarena.hu/2011/03/android-alkalmazasok-blackberry-n/comment-page-1/ [39] Mindent a Windows Phone 7-re tesz fel a Nokia URL: http://www.bitport.hu/mobilitas/nokia-microsoft-windows-phone-7-egyuttmukodes-bejelentes [40] ICE CREAM = GOOGLE TV + HONEYCOMB + GINGERBREAD URL: http://androidarena.hu/2011/04/ice-cream-google-tv-honeycomb-gingerbread/
XI
[41] Apple: 250 million iOS devices sold, 18 billion apps downloaded URL: http://www.engadget.com/2011/10/04/apple-250-million-ios-devices-sold/ [42] Minden a BlackBerry telefonokról és rendszerről URL: http://mobilarena.hu/teszt/minden_a_blackberry_telefonokrol_es_rendszerrol/bevezeto.html [43] 2015-re már a Windows Phone 7 is lenyomja az iOS-t URL: http://www.hwsw.hu/hirek/46412/idc-okostelefon-android-wp7-apple-piac-symbian-mobiltelefon.html [44] Tablet personal computer URL: http://en.wikipedia.org/wiki/Tablet_personal_computer [45] 15 millió iPad-et adott el az Apple 2010-ben URL: http://www.hasznaltalma.hu/cimlap/1-apple-hirek/88-15-millio-ipad-et-adott-el-az-apple-2010-ben [46] Több mint egymillió eladott Galaxy Tab URL: http://www.tablagep.hu/hirek/tobb-mint-egymillio-eladott-galaxy-tab [47] 10 Mobile Trends in 2011: Android Boom, Tablets Multiply URL: http://www.pbs.org/mediashift/2011/01/10-mobile-trends-in-2011-android-boom-tablets-multiply010.html [48] Wikipedia – Eclipse URL: http://hu.wikipedia.org/wiki/Eclipse [49] Sicz-Mesziár János: Android fejlesztő környezet kialakítása Windowson URL: http://szyrt.hu/downloads/Docs/Android_fejleszto_kornyezet_kialakitasa_Windowson.pdf [50]
Android fejlesztő környezet előkészítése Windows alatt URL: http://had.co.hu/node/18
[51] A rádiófrekvenciás azonosítás története Elektronet, XX. évfolyam, 3. szám, 2011. április – 16. oldal – ISSN 1219-705 X [52] NFC - a kis hatótávolságú kommunikáció nyomában URL: http://mobilarena.hu/teszt/nfc/specifikaciok.html [53] SpringCard - NFC URL: http://www.springcard.com/solutions/nfc.html [54] Solt Benedek Pál, BME Híradástechnika tanszék, Biztonság a Near Field Communication szabványaiban URL: http://www.hit.bme.hu/~buttyan/courses/BMEVIHIM219/HF-reports/SoltBenedek.pdf [55] A közösségi média vállalati alkalmazása URL: http://kozmedia.blogspot.com/2011/01/44-pelda-vonalkod-qr-kod-microsoft-tag.html [56] Google Shopper: Árkeresés fotók alapján URL: http://mobilarena.hu/hir/google_shopper_arkereses_fotok_alapjan.html , www.google.com/mobile/shopper/ [57] Hatmillió okostelefon lesz idehaza öt év múlva – [origo] URL: http://www.origo.hu/techbazis/20101109-hatmillio-okostelefon-lesz-idehaza-ot-ev-mulva.html [58] A definite list of NFC phones URL: http://www.nfcworld.com/nfc-phones-list/ [59] A magyarok ötöde használ okostelefont - HWSW URL: http://www.hwsw.hu/hirek/46388/okostelefon-piac-magyarorszag-xallis-consulting.html [60] QR-code, Wikipedia URL: http://en.wikipedia.org/wiki/QR_code [61] NFC Forum Type Tags – White Paper 1.0 URL: http://www.nfc-forum.org/resources/white_papers/NXP_BV_Type_Tags_White_Paper-Apr_09.pdf [62] NFC Forum Technical Specifications URL: http://www.nfc-forum.org/specs/spec_list/
XII
[63] Élesben indul a Google Wallet URL: http://www.hwsw.hu/hirek/47374/google-wallet-offers-nfc-okostelefon-mastercard-cellum.html [64] CellLink URL: http://www.cellum.hu/products/cellink [65] Huszonkilenc taggal bővült az NFC Forum URL: http://mobilarena.hu/hir/huszonkilenc_taggal_bovult_az_nfc_forum.html [66] Az Intel a PC-ket is NFC-képessé tenné URL: http://www.hwsw.hu/hirek/47689/intel-mastercard-paypass-nfc-fizetes-pc-ultrabook.html [67] Egyre többen terelik az NFC szekerét URL: http://ipon.hu/hir/egyre_tobben_terelik_az_nfc_szekeret/18219 [68] Itt a fizetős Android Market URL: http://www.hwsw.hu/hirek/46684/google-android-market-paid-fizetos-magyarorszag.html [69] Holnap jön az Amazon Android AppStore URL: http://bigyo.blog.hu/2011/03/21/holnap_jon_az_amazon_android_appstore [70] Megint magasra teszi a lécet az új Android URL: http://www.hwsw.hu/hirek/47558/google-android-4-ice-cream-sandwich-samsung-nexus-primeokostelefon.html [71] A legnagyobb szolgáltatók NFC SIM-et akarnak URL: http://mobilarena.hu/hir/a_legnagyobb_szolgaltatok_nfc_sim-et_akarnak.html [72] A Nokia bemutatta Windows Phone 7-es okostelefonjait URL: http://techline.hu/it/2011/10/26/A_Nokia_bemutatta_Windows_Phone_7es_okostel_7IQ4BY [73] Smartphone – Wikipedia URL: http://en.wikipedia.org/wiki/Smartphone [74] MasterCard Mobile URL: http://www.mastercard.com/hu/personal/hu/mobile/what-is-mastercard-mobile.html [75] NFC in 2011: NFC Network Launching Across 200,000 Digital Screens in U.S. URL: http://www.readwriteweb.com/mobile/2011/04/nfc-network-launching-across-200000-digital-screens-inUS.php [76] FCK Editor URL: http://ckeditor.com/download [77] PHP Upload and Resize Image URL: http://bgallz.org/502/php-upload-resize-image/?replytocom=7588 [78] 2.1. Android alkalmazások URL: http://www.javaforum.hu/javaforum/8/android/android_cikkek/32/show/az_alkalmazasok_szerkezete [79] Session-kezelés PHP 4.0-val URL: http://www.osztrak.sulinet.hu/webiskola/Dokumentumok/Session.pdf [80] Create a MD5-Hash and Dump as a Hex String URL: http://www.androidsnippets.com/create-a-md5-hash-and-dump-as-a-hex-string [81] XML feldolgozás URL: http://www.cs.ubbcluj.ro/~laura/webprg08-09/Foliak/10_XML-feldolgozas.pdf [82] PHPMailer URL: http://phpmailer.worxware.com/ [83] Basic NFC URL: http://developer.android.com/guide/topics/nfc/nfc.html
XIII
Rövidítésjegyzék15 Alkalmazásprogramozási interfész (angolul application programming interface,
API
röviden API) Az MD5 (Message-Digest algorithm 5) egy 128 bites, egyirányú kódolási
MD5
algoritmus, például jelszavak titkosítására MIME
A MIME (Multipurpose Internet Mail Extensions) internetes szabvány, ami eredetileg az SMTP-vel továbított e-mailek formátumának jelzésére szolgált, de később átvette a HTTP és a SIP is
MySQL
A MySQL egy többfelhasználós, többszálú, SQL (Structured Query Language) alapú relációs adatbázis-kezelő szerver.
NDEF
NFC Data Exchange Format – Az NFC Forum által szabványosított NFC címkék és eszközök által használt adatok tárolására használt formátum NFC (Near Field Communication – Közeltéri Kommunikáció). Az NFC a Philips
NFC
és a Sony által kifejlesztett kis hatótávolságon belül működő rádiófrekvenciás adatátviteli rendszer, elsősorban mobilkészülékekhez, mely kompatibilis az RFID-vel. A PHP (PHP: Hypertext Preprocessor) nyílt forráskódú weboldalak készítésére
PHP
használt programozási nyelv. QR-kód
A QR (Qucik Response – Gyors Válasz) kódok kétdimenziós vonalkódok, elsősorban termékek azonosítására és reklámcélra használják.
RFID
Az RFID (Radio Frequency IDentification – Rádió Frekvenciás Azonosítás) automatikus azonosításhoz és adatközléshez használt technológia, melynek lényege adatok tárolása és továbbítása RFID címkék és eszközök segítségével.
SAX
A SAX (Simple API for XML) XML fájlok szekvenciális feldolgozásra alkalmas API.
SDK
Software Development Kit – Szoftver Fejlesztő készlet.
SNR
Jel-zaj viszony, angol kifejezéssel Signal-to-noise ratio (rövidítésekben SNR vagy S/N)
UI
A felhasználói felület (angolul user interface, röviden UI)
XML
Az XML (Extensible Markup Language, Kiterjeszthető Leíró Nyelv) a W3C által ajánlott általános célú leíró nyelv, speciális célú leíró nyelvek létrehozására. Ezen alapszik az RSS és a HTML is.
15
Forrás: WikiPedia
XIV