Za´padoˇceska´ univerzita v Plzni Fakulta aplikovany´ch vˇed Katedra informatiky a vy´poˇcetn´ı techniky
Diplomov´ a pr´ ace Syst´ em pro spr´ avu a realizaci informaˇ cn´ıch maj´ aku
Plzeˇ n 2013
Bc. Ludˇek Vlk
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem diplomovou pr´aci vypracoval samostatnˇe a v´ yhradnˇe s pouˇzit´ım citovan´ ych pramen˚ u. V Plzni dne 14. kvˇetna 2013 Ludˇek Vlk
Dˇekuji vedouc´ımu pr´ace Ing. Ladislavu Peˇsiˇckovi za odborn´e veden´ı a cenn´e rady pˇri vypracov´an´ı diplomov´e pr´ace.
Abstract This diploma thesis deals with the problems of providing informations using information beacons. Market of available information systems is explored during this work. Universal system for providing informations to mobile devices was designed and implemented based on discovered problems. In this work was also created a mobile application for iOS and sent for approval to the App Store. Employees of institutions (zoo, museum, exhibitions, ...) can register their own institution through web interface for free and provide information about their institutions through information beacons. Information beacons is unique identifiable place, that contains informations. Users can find information beacons with mobile app using location, QR codes and 3-digit key.
Obsah ´ 1 Uvod 1.1 Informaˇcn´ı maj´aky . . . . . . . . . . . . . . . . . . . . . . . . 1.2 C´ıl pr´ace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1 1 1
2 Syst´ emy pro poskytov´ an´ı informac´ı 2.1 V´ yznam informaˇcn´ıch maj´ak˚ u . . . . . 2.1.1 Pouˇzit´ı v muze´ıch . . . . . . . . 2.1.2 Pouˇzit´ı v zoologick´e zahradˇe . . 2.1.3 Pouˇzit´ı v hromadn´e dopravˇe . . 2.1.4 Pouˇzit´ı ve vzdˇel´avac´ıch zaˇr´ızen´ı 2.2 Hustonsk´a Zoo . . . . . . . . . . . . . 2.3 Lunchtime . . . . . . . . . . . . . . . . 2.4 iZeeum . . . . . . . . . . . . . . . . . . 2.5 iTag . . . . . . . . . . . . . . . . . . .
. . . . . . . . .
2 2 2 2 3 3 3 4 5 7
. . . . . . . . . .
9 9 10 10 12 13 14 14 15 15 16
3 N´ avrh syst´ emu 3.1 Modelov´ y pˇr´ıklad . . . . . . . . . ´ cel syst´emu . . . . . . . . . . . 3.2 Uˇ 3.3 Funkce a vlastnosti syst´emu . . . 3.3.1 Syst´em . . . . . . . . . . . 3.3.2 Klientsk´a aplikace . . . . . 3.4 Uˇzivatel´e syst´emu . . . . . . . . . 3.4.1 Zamˇestnanec instituce . . 3.4.2 Uˇzivatel klientsk´e aplikace 3.4.3 Spr´avce Tagiee . . . . . . 3.5 N´avrh moˇzn´ ych alternativ . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . . .
. . . . . . . . .
. . . . . . . . . .
4 Realizace syst´ emu 17 4.1 Um´ıstˇen´ı syst´emu . . . . . . . . . . . . . . . . . . . . . . . . . 17 4.2 Pouˇzit´e technologie a knihovny . . . . . . . . . . . . . . . . . 17 4.2.1 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
OBSAH
4.3 4.4
4.5
OBSAH 4.2.2 MySQL . . . . . . . . . . . . . . . . . 4.2.3 Framework Nette . . . . . . . . . . . . 4.2.4 Google Maps JavaScript API v3 . . . . 4.2.5 Google Charts . . . . . . . . . . . . . . 4.2.6 JQuery . . . . . . . . . . . . . . . . . . 4.2.7 JQuery UI . . . . . . . . . . . . . . . . 4.2.8 Uploadify . . . . . . . . . . . . . . . . 4.2.9 Jcrop . . . . . . . . . . . . . . . . . . . Datab´azov´a vrstva . . . . . . . . . . . . . . . 4.3.1 Triggery . . . . . . . . . . . . . . . . . Tagiee API . . . . . . . . . . . . . . . . . . . 4.4.1 JSON format . . . . . . . . . . . . . . 4.4.2 API pro komunikaci . . . . . . . . . . Implementace webov´eho rozhran´ı . . . . . . . 4.5.1 Struktura . . . . . . . . . . . . . . . . 4.5.2 Datab´azov´a vrstva . . . . . . . . . . . 4.5.3 Spr´ava uˇzivatel˚ u a instituc´ı . . . . . . 4.5.4 Vytv´aˇren´ı a editov´an´ı obsahu instituc´ı
5 Klientsk´ aˇ c´ ast 5.1 Platforma iOS . . . . . . . . . . . . . . . 5.2 Pod´ıl verz´ı iOS na trhu . . . . . . . . . . 5.3 Pouˇzit´e knihovny . . . . . . . . . . . . . 5.3.1 AFNetworking . . . . . . . . . . 5.3.2 ZBarSDK . . . . . . . . . . . . . 5.3.3 OpenUDID . . . . . . . . . . . . 5.3.4 MWPhotoBrowser . . . . . . . . 5.3.5 DYRateView . . . . . . . . . . . 5.3.6 EGOTableViewPullRefresh . . . 5.3.7 ECGraph . . . . . . . . . . . . . 5.4 Implementace klientsk´e aplikace . . . . . 5.4.1 Komunikace se syst´emem Tagiee . 5.4.2 Datab´azov´a vrstva . . . . . . . . 5.4.3 Uˇzivatelsk´e rozhran´ı . . . . . . . 5.4.4 Verze pro iPad . . . . . . . . . . 5.4.5 Notifikace syst´emu Tagiee . . . . 5.5 Publikov´an´ı aplikace . . . . . . . . . . . 5.5.1 App Store . . . . . . . . . . . . . 5.5.2 iOS Developer Program . . . . . 5.5.3 iTunes Connect . . . . . . . . . . 5.5.4 Pˇr´ıprava certifik´at˚ u . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . .
17 18 22 22 23 24 24 24 25 27 29 30 30 33 34 35 37 38
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
42 42 42 43 43 44 44 45 45 45 46 47 47 48 52 61 62 63 63 63 63 64
OBSAH
OBSAH
5.5.5 5.5.6 5.5.7 5.5.8
Vytvoˇren´ı aplikace v iTunes Connect Nahr´an´ı aplikace . . . . . . . . . . . Schvalovac´ı proces . . . . . . . . . . Schv´alen´ı aplikace Tagiee . . . . . . .
6 Ovˇ eˇ ren´ı funkcionality 6.1 Syst´em Tagiee . . . . . . 6.1.1 Mapa maj´ak˚ u . . 6.2 Webov´e prostˇred´ı . . . . 6.2.1 Statistiky . . . . 6.3 Klientsk´a aplikace Tagiee
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
64 65 65 66
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
67 67 68 68 69 69
7 Z´ avˇ er A Pˇ r´ılohy A.1 Web API . . . . . . . . . . . . . . . . . . . . . . . . . . A.1.1 add_review . . . . . . . . . . . . . . . . . . . . A.1.2 beacon_found . . . . . . . . . . . . . . . . . . . A.1.3 device_visit_institution . . . . . . . . . . . A.1.4 get_institution_by_uiid . . . . . . . . . . . . A.1.5 get_institution_list . . . . . . . . . . . . . . A.1.6 get_institution_revision . . . . . . . . . . . A.1.7 get_reviews . . . . . . . . . . . . . . . . . . . A.2 App Store Review Guidelines . . . . . . . . . . . . . . A.2.1 Functionality . . . . . . . . . . . . . . . . . . . A.2.2 Metadata (name, descriptions, ratings, rankings, A.2.3 Location . . . . . . . . . . . . . . . . . . . . . . A.2.4 User interface . . . . . . . . . . . . . . . . . . . A.2.5 Damage to device . . . . . . . . . . . . . . . . . A.2.6 Personal attacks . . . . . . . . . . . . . . . . . . A.2.7 Privacy . . . . . . . . . . . . . . . . . . . . . . A.2.8 Legal requirements . . . . . . . . . . . . . . . . A.3 Instalaˇcn´ı pˇr´ıruˇcka syst´emu Tagiee . . . . . . . . . . . A.3.1 Z´akladn´ı poˇzadavky . . . . . . . . . . . . . . . A.3.2 Adres´aˇrov´a struktura . . . . . . . . . . . . . . . A.4 Uˇzivatelsk´a pˇr´ıruˇcka webov´eho rozhran´ı . . . . . . . . . A.5 Uˇzivatelsk´a pˇr´ıruˇcka mobiln´ı aplikace . . . . . . . . . .
73
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . etc) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . .
i i i i i ii iv iv iv vi vi vii viii viii viii ix ix ix x x x xi xii
´ 1 Uvod 1.1
Informaˇ cn´ı maj´ aky
V dneˇsn´ı modern´ı dobˇe jsou informace dostupn´e t´emˇeˇr na kaˇzd´em rohu, napˇr´ıklad na zast´avk´ach, na elektronick´ ych panelech nebo i v mobiln´ıch telefonech. Nejvˇetˇs´ı slabinou je poskytnut´ı tˇechto informac´ı lidem, kteˇr´ı je vyˇzaduj´ı. I v dneˇsn´ı dobˇe, ne kaˇzd´ y si um´ı vyhledat informace, kter´e zrovna potˇrebuje. Pˇredstavme si, co kdyby bylo nepsan´e pravidlo, ˇze u kaˇzd´eho obchodn´ıho centra by byla um´ıstˇena viditeln´a nebo neviditeln´a znaˇcka detekovateln´a mobiln´ım zaˇr´ızen´ım (napˇr. telefonem) a poskytla informace o vˇsech slev´ach nach´azej´ıc´ıch se v tomto centru. Mohli bychom vˇsak i toto pravidlo rozˇs´ıˇrit na zast´avky hromadn´e dopravy, kde na z´akladˇe detekov´an´ı zast´avky mobiln´ım zaˇr´ızen´ım by se zobrazil seˇrazen´ y v´ ypis nejbliˇzˇs´ıch spoj˚ u od aktu´aln´ıho ˇcasu. Pokud by se lid´e nauˇcili pˇrij´ımat takto informace, dostali by jen ty, kter´e je zaj´ımaj´ı a pomohou jim v kaˇzdodenn´ım ˇzivotˇe. Definujeme-li informaˇcn´ı maj´ak, jedn´a se o jednoznaˇcnˇe identifikovatelnou znaˇcku, jeˇz poskytne znalostn´ı informace o m´ıstˇe, na nˇemˇz se nach´az´ı. Tyto znalostn´ı informace se uk´aˇz´ı aˇz v pˇr´ıpadˇe detekov´an´ı znaˇcky mobiln´ım zaˇr´ızen´ım. Znaˇcka m˚ uˇze b´ yt viditeln´a (n´azev, kl´ıˇc, obr´azek) nebo neviditeln´a (poloha, sign´al).
1.2
C´ıl pr´ ace
C´ılem diplomov´e pr´ace je prozkoumat problematiku specializovan´ ych syst´em˚ u pro poskytov´an´ı informac´ı n´avˇstˇevn´ık˚ um. Na z´akladˇe zjiˇstˇen´ ych probl´emu navrhnout a realizovat univerz´aln´ı syst´em pro poskytov´an´ı informac´ı mobiln´ım zaˇr´ızen´ım. Souˇca´st´ı ˇreˇsen´ı bude tedy i klientsk´a mobiln´ı aplikace pro platformu iOS (viz 5.1), kter´a bude komunikovat s navrˇzen´ ym syst´emem, bude schopn´a detekovat informaˇcn´ı maj´aky a zobrazovat znalostn´ı informace maj´ak˚ u. Klientsk´a mobiln´ı aplikace bude pˇredloˇzena ke schv´alen´ı digit´aln´ımu obchodu App Store (viz 5.5.1).
1
2 Syst´emy pro poskytov´an´ı informac´ı Dnes mnoho instituc´ı vyuˇz´ıv´a syst´emy pro poskytov´an´ı informac´ı. Obecnˇe se jedn´a se o levn´ y zdroj informac´ı pro n´avˇstˇevn´ıky. V t´eto kapitole bude nejdˇr´ıve pops´ano vyuˇzit´ı tˇechto syst´em˚ u v r˚ uzn´ ych odvˇetv´ıch a n´aslednˇe budou uk´az´any re´aln´e syst´emy.
2.1
V´ yznam informaˇ cn´ıch maj´ ak˚ u
Syst´emy pro poskytov´an´ı informac´ı m˚ uˇzeme vyuˇz´ıt v r˚ uzn´ ych odvˇetv´ı. M˚ uˇzeme se s nimi setkat na ulici, v obchodech, v muze´ıch, v zoologick´e zahradˇe, ve vzdˇel´avac´ıch instituc´ıch nebo i v hromadn´e dopravˇe. V t´eto sekci jsou uvedeny pˇr´ıklady, kde se daj´ı syst´emy pro poskytov´an´ı informac´ı vyuˇz´ıt. Syst´em poskytne informace na z´akladˇe nalezen´ ych maj´ak˚ u mobiln´ım zaˇr´ızen´ım, respektive pomoc´ı aplikace v mobiln´ım zaˇr´ızen´ı.
2.1.1
Pouˇ zit´ı v muze´ıch
V muzeu se nach´az´ı r˚ uzn´e expon´aty, kter´e jsou um´ıstˇeny v oddˇelen´ ych sekc´ıch. Muzeum m´a v digit´aln´ım obchodˇe volnˇe dostupnou aplikaci. Pˇri pˇr´ıchodu do muzea se n´avˇstˇevn´ıkovi nab´ıdne mapa vˇsech sekc´ı s jejich kr´atk´ ym popisem. Kaˇzd´ y expon´at m´a ˇca´rov´ y k´od, kter´ y pomoc´ı aplikace n´avˇstˇevn´ık sejme a obdrˇz´ı informace v r˚ uzn´ ych jazyc´ıch. R˚ uzn´e jazyky cizinc˚ um dovol´ı pˇrekonat jazykovou bari´eru a mohou si tak l´epe uˇz´ıt prohl´ıdku muzea. Zamˇestnanc˚ um m˚ uˇze tento syst´em uˇsetˇrit pr´aci t´ım, ˇze nemusej´ı dˇelat prohl´ıdky v r˚ uzn´ ych jazyc´ıch. Staˇc´ı se jen omezit na ty nejrozˇs´ıˇrenˇejˇs´ı jazyky a pro ostatn´ı poskytnout lokalizovan´ y popis expon´atu skrze mobiln´ı aplikaci.
2.1.2
Pouˇ zit´ı v zoologick´ e zahradˇ e
Zoologick´a zahrada m´a nˇekolik v´ ybˇeh˚ u s r˚ uzn´ ymi exempl´aˇri. Pˇri vstupu do zoologick´e zahrady n´avˇstˇevn´ık skrze mobiln´ı aplikaci z´ısk´a mapu vˇsech druh˚ u zv´ıˇrat a rostlin. N´avˇstˇevn´ık navˇst´ıv´ı v´ ybˇeh, jenˇz aplikace rozezn´a a poskytne 2
Syst´emy pro poskytov´an´ı informac´ı
Hustonsk´a Zoo
uˇzivateli obr´azky a videa o zv´ıˇreti. Aplikace z´aroveˇ n zobraz´ı uˇzivateli seznam ˇcasovˇe nejbliˇzˇs´ıch komentovan´ ych krmen´ı a prezentac´ı zv´ıˇrat. T´ım, ˇze n´avˇstˇevn´ık navˇst´ıv´ı v´ ybˇeh, zamˇestnanci sb´ıraj´ı informace napˇr´ıklad, kter´ y v´ ybˇeh je atraktivn´ı pro n´avˇstˇevn´ıky, a kter´ y naopak je m´enˇe zaj´ımav´ y. Z´aroveˇ n m˚ uˇzou n´avˇstˇevn´ıci pˇrid´avat koment´aˇre skrze mobiln´ı aplikaci, ˇc´ımˇz zamˇestnanci zoo z´ıskaj´ı zpˇetnou vazbu.
2.1.3
Pouˇ zit´ı v hromadn´ e dopravˇ e
V u ´vodu byl zm´ınˇen´ y pˇr´ıklad zast´avek hromadn´e dopravy. Rozˇs´ıˇrit ho lze kromˇe zobrazen´ı ˇcasovˇe nejbliˇzˇs´ıch spoj˚ u i o vzd´alenost potenci´aln´ıho cestuj´ıc´ıho od zast´avky a nav´ıc za jak dlouho by mohl u n´ı norm´aln´ı ch˚ uz´ı b´ yt.
2.1.4
Pouˇ zit´ı ve vzdˇ el´ avac´ıch zaˇ r´ızen´ı
Univerzita se rozprost´ır´a po cel´em mˇestˇe, vˇetˇsina fakult m´a svoji budovu. Informaˇcn´ı maj´ak by mohl b´ yt um´ıstˇen u kaˇzd´e budovy univerzity a novˇe pˇr´ıchoz´ım student˚ um by mohl pomoci v orientaci a pˇr´ıpadnˇe studentovi nal´ezt jeho v´ yuku, z´ıskat j´ıdeln´ı l´ıstek menz ˇci historick´e u ´daje o univerzitˇe.
2.2
Hustonsk´ a Zoo
Hustonsk´a Zoo disponuje 6000 zv´ıˇrat a kaˇzd´ y rok ji navˇst´ıv´ı 1,84 mili´on˚ u n´avˇstˇevn´ık˚ u. [hus()] Hustonsk´a Zoo nab´ız´ı volnˇe staˇzitelnou mobiln´ı aplikaci pro syst´em iOS (viz Obr. 2.1) a Android skrze digit´aln´ı obchod App Store a Google Play. Aplikace pro obˇe platformy, jsou co se t´ yˇce funkcionality, totoˇzn´e. Aplikace nab´ız´ı uˇzivateli informace o zoo, jej´ı cen´ık, n´avˇstˇevn´ı doby a jej´ı polohu. Aplikace umoˇzn ˇuje ucelenou prohl´ıdku cel´e zoo (viz Obr. 2.1b), aniˇz by musel n´avˇstˇevn´ık bloudit po zoo a rozhodovat se, jak´ y v´ ybˇeh navˇst´ıv´ı jako dalˇs´ı. Pˇri prohl´ıdce nab´ız´ı aplikace mapu se vˇsemi moˇzn´ ymi v´ ybˇehy (viz Obr. 2.1c).
3
Syst´emy pro poskytov´an´ı informac´ı
´ (a) Uvodn´ ı obrazovka aplikace s rozcestn´ıkem.
Lunchtime
(b) Seznam v´ ybˇeh˚ u, kter´ ych se prohl´ıdka t´ yk´a.
(c) Mapa jednotliv´ ych v´ ybˇehu, kter´e jsou souˇc´ast´ı prohl´ıdky.
Obr´azek 2.1: Mobiln´ı aplikace Hustonsk´e Zoo Aplikace k v´ ybˇeh˚ um nab´ız´ı fotografie o exempl´aˇr´ıch a kr´atk´ y popisek. Jako bonus nab´ız´ı aplikace vyfocen´ı v´ ybˇehu s r´ameˇckem.
2.3
Lunchtime
Lunchtime je port´al inzeruj´ıc´ı nejbliˇzˇs´ı restaurace hladov´ ym z´akazn´ık˚ um, t´ım ˇze jim uk´aˇze poledn´ı menu, kter´e restaurace nab´ız´ı.
Princip Majitel´e restaurac´ı si pˇredplat´ı mˇes´ıˇcn´ı inzerci v katalogu Lunchtime. Kaˇzd´ y den majitel poskytne port´alu denn´ı nab´ıdku j´ıdel sv´e restaurace. Lunchtime tuto nab´ıdku rozˇs´ıˇr´ı skrze sv˚ uj port´al, email, pdf, RSS, exportuje na web majitele, zobraz´ı na Facebooku, rozeˇsle dalˇs´ım port´al˚ um a jeˇstˇe poskytne informace mobiln´ım aplikac´ım Lunchtime. [lun()]
4
Syst´emy pro poskytov´an´ı informac´ı
iZeeum
Pro majitele restaurac´ı se jedn´a o dobr´e zviditelnˇen´ı na internetu,umoˇzn´ı str´avn´ık˚ um zanechat zpˇetnou vazbu o jejich podniku a automatizuje u ´kony s denn´ım menu. Lunchtime ˇci host´e se pˇripomenou kaˇzd´ y vˇsedn´ı den, aby restaurace vyvˇesila sv´e poledn´ı menu. T´ım, ˇze restaurace dennˇe uvolˇ nuje nab´ıdku j´ıdel, se zvyˇsuje potencion´aln´ı n´avˇstˇevnost podniku. Host˚ um tento syst´em umoˇzn ˇuje skrze port´al, nebo mobiln´ı aplikaci nab´ıdnout seznam nejbliˇzˇs´ıch podnik˚ u s denn´ı nab´ıdkou j´ıdel, na z´akladˇe kter´e se mohou rozhodnout, jakou restauraci navˇst´ıv´ı. Host´e mohou skrze aplikaci prov´adˇet rezervace, aniˇz by museli hledat kontaktn´ı informace na str´ank´ach podniku.
Mobiln´ı aplikace Lunchtime Aplikace je volnˇe dostupn´a pro Android, Bada a iOS. Mobiln´ı aplikace umoˇzn ˇuje na z´akladˇe polohy uˇzivatele zobrazit nejbliˇzˇs´ı podniky a jejich denn´ı nab´ıdku. Pokud chce uˇzivatel prov´est rezervaci, lze pˇristoupit na kartu podniku v aplikaci a z´ıskat potˇrebn´e informace pro proveden´ı rezervace ˇci zanech´an´ı pˇripom´ınky. Na obr´azc´ıch (viz Obr. 2.2) je uk´azka z mobiln´ı aplikace pro syst´em iOS.
2.4
iZeeum
Pr˚ uvodce iZeeum je informaˇcn´ı syst´em poskytuj´ıc´ı informace o umˇen´ı v muze´ıch, galeri´ıch a exhibic´ıch skrze mobiln´ı aplikaci pro iOS.
Princip Zamˇestnanci instituc´ı pˇridaj´ı do syst´emu iZeeum informace a fotografie o expon´atech a informace o sv´e instituci (popis, poloha, cen´ık, otev´ırac´ı doby). Syst´em iZeeum si fotografie expon´at˚ u zpracuje a uloˇz´ı. Uˇzivatel aplikace vyfot´ı expon´at a fotografie se porovn´a se syst´emem iZeeum a podle shody nab´ıdne audiovizu´aln´ı informace o expon´atu. [ize()] Instituce pˇrid´an´ım se do syst´emu iZeeum z´ısk´a levn´ y a nen´aroˇcn´ y syst´em pro poskytov´an´ı informac´ı. Nav´ıc se nenaruˇsuje viz´aˇz expon´at˚ u, kter´e by se 5
Syst´emy pro poskytov´an´ı informac´ı
´ (a) Uvodn´ ı obrazovka aplikace se seznamem nejbliˇzˇs´ıch podnik˚ u.
iZeeum
(b) Skrze mobiln´ı aplikaci lze i pˇrid´avat nov´e restaurace.
(c) Karta podniku.
(d) Mapa nejbliˇzˇs´ıch restaurac´ı.
Obr´azek 2.2: Mobiln´ı aplikace Lunchtime pro iOS musely jinak identifikovat pomoc´ı QR k´od˚ u, hesel ˇci speci´aln´ıch obraz˚ u. T´ım, ˇze uvnitˇr muze´ı nebo galeri´ı nelze pouˇz´ıt lokalizaˇcn´ı sluˇzby (napˇr. GPS), se jedn´a o zaj´ımavou alternativu. N´avˇstˇevn´ık˚ um staˇc´ı k identifikaci expon´atu jen fotoapar´at a pˇripojen´ı k internetu, ˇc´ımˇz se zjednoduˇsuje pouˇzitelnost t´eto identifikace.
6
Syst´emy pro poskytov´an´ı informac´ı
iTag
Mobiln´ı aplikace iZeeum Mobiln´ı aplikace je opˇet volnˇe dostupn´a v obchodˇe App Store (viz Obr. 2.3). Aplikace si zakl´ad´a na jednoduchosti a obsahuje jednu obrazovku s informacemi, jak iZeeum funguje a tlaˇc´ıtko pro poˇr´ızen´ı fotografie. Na z´akladˇe vyhodnocen´e fotografie se zobraz´ı audiovizu´aln´ı a textov´e informace o expon´atu. Fotografie se odes´ıl´a syt´emu iZeeum, syst´em vyhodnot´ı fotografii a pˇri pˇr´ıpadn´e shodˇe poˇsle aplikaci informace o expon´atu. Syst´em iZeeum um´ı vyhodnotit fotografii do 1 vteˇriny.
´ (a) Uvodn´ ı obrazovka aplikace s moˇznost´ı poˇr´ızen´ı fotografie.
(b) Video o expon´atu.
(c) Textov´e informace o expon´atu.
Obr´azek 2.3: Mobiln´ı aplikace iZeeum pro iOS
2.5
iTag
Syst´em iTag poskytuje informace o odjezdech ze zast´avek mˇestsk´e hromadn´e dopravy PMDP v Plzni.
7
Syst´emy pro poskytov´an´ı informac´ı
iTag
Princip Na kaˇzd´e zast´avce je um´ıstˇen NFC tag a QR k´od. Pomoc´ı NFC technologie v telefonu nebo ˇcteˇcky QR k´odu se pˇreˇcte URL1 adresa, na kter´e je seznam ˇcasovˇe nejbliˇzˇs´ıch spoj˚ u z dan´e zast´avky. PMDP m´a tak nov´ y pohodln´ y zp˚ usob poskytnut´ı j´ızdn´ıho ˇra´du cestuj´ıc´ım. Z´akladn´ım poˇzadavkem je chytr´ y mobiln´ı telefon disponuj´ıc´ı mobiln´ım pˇripojen´ım k internetu a fotoapar´atem.
1
Uniform Resource Locator - slouˇz´ı k pˇresn´e specifikaci um´ıstˇen´ı zdroj˚ u na Internetu.
8
3 N´avrh syst´emu V t´eto kapitole je pops´an n´avrh univerz´aln´ıho komplexn´ıho syst´em Tagiee. Pod pojmem instituce se mysl´ı veˇrejnˇe dostupn´e zaˇr´ızen´ı napˇr´ıklad muzeum, zoo apod.
3.1
Modelov´ y pˇ r´ıklad
V t´eto sekci je uvedeno pouˇzit´ı syst´emu Tagiee, na z´akladˇe kter´eho jsem se rozhodoval pˇri n´avrhu. ZOO Plzeˇ n se rozl´eh´a na 21 hektarech, pracuje v n´ı 134 zamˇestnanc˚ ua celkem zde m˚ uˇzeme naj´ıt 1307 r˚ uzn´ ych zv´ıˇrat. [zoo()] V ZOO se budou nach´azet des´ıtky informaˇcn´ıch maj´ak˚ u. GPS poloha bude vyuˇzita u venkovn´ıch v´ ybˇeh˚ u a v pavil´onech QR k´od. V dinoparku budou naopak pouˇzity NFC tagy. Pomoc´ı tˇechto technologi´ı lze tyto maj´aky naj´ıt. N´avˇstˇevn´ık navˇst´ıv´ı plzeˇ nskou ZOO. Pˇri vstupu bude um´ıstˇeno znaˇcen´ı, ˇze ZOO vyuˇz´ıv´a syst´em Tagiee a je v nˇem zaregistrovan´a pod unik´atn´ım identifik´atorem ’zoopl’. N´avˇstˇevn´ık si st´ahne mobiln´ı aplikaci Tagiee, pokud ji uˇz d´avno nem´a staˇzenou, z obchodu s aplikacemi. Pot´e se v aplikaci n´avˇstˇevn´ık pˇrihl´as´ı k ZOO pomoc´ı seznamu nejbliˇzˇs´ıch instituc´ı nebo pomoc´ı unik´atn´ıho identifik´atoru. U vstupu se nach´az´ı volnˇe dostupn´a WiFi s´ıt’. Uˇzivatel se m˚ uˇze pˇrihl´asit k t´eto WiFi s´ıti a st´ahnout vˇsechen obr´azkov´ y obsah, ke kter´emu se m˚ uˇze dostat nalezen´ım maj´ak˚ u a uˇsetˇrit tak pˇrenos dat na mobiln´ım pˇripojen´ı. N´avˇstˇevn´ık pˇrijde napˇr´ıklad k tuˇcn ˇ´ak˚ um, kteˇr´ı maj´ı sv˚ uj venkovn´ı v´ ybˇeh. N´avˇstˇevn´ık by se r´ad dozvˇedˇel dalˇs´ı informace o tuˇcn ˇ´ac´ıch, o jejich potravˇe a stylu ˇzivota. Pomoc´ı aplikace zapne vyhled´av´an´ı maj´ak˚ u a aplikace n´avˇstˇevn´ıkovi nab´ıdne obr´azky, videa a informace o tuˇcn ˇa´c´ıch. N´avˇstˇevn´ık pokraˇcuje v prohl´ıdce a navˇst´ıv´ı pavil´on plaz˚ u. Pavil´on plaz˚ u je um´ıstˇen v budovˇe, ve kter´e nen´ı dostupn´ y sign´al GPS. Vedle ter´ari´ı jsou vˇsak QR k´ody. N´avˇstˇevn´ık otevˇre aplikaci a pomoc´ı ˇcteˇcky QR k´odu se mu 9
´ cel syst´emu Uˇ
N´avrh syst´emu zobraz´ı jednotliv´e informace o plaz´ıch.
N´asleduj´ıc´ı n´avrh syst´emu by mˇel b´ yt pouˇziteln´ y pro tento modelov´ y pˇr´ıklad (viz 3.3).
3.2
´ cel syst´ Uˇ emu
´ celem je tedy navrhnout volnˇe ˇsiˇriteln´ Uˇ y syst´em pro poskytov´an´ı informac´ı n´avˇstˇevn´ık˚ um instituc´ı. N´avˇstˇevn´ık z´ısk´a na z´akladnˇe navˇst´ıven´ ych informaˇcn´ıch maj´ak˚ u znalosti, ke kter´ ym by se pˇri bˇeˇzn´e prohl´ıdce nedostal (napˇr. z nedostatku m´ısta na informaˇcn´ıch cedul´ı). Informace by nemˇely b´ yt n´avˇstˇevn´ık˚ um nijak vnucov´any, naopak poskytnuty z´ajemc˚ um pokud moˇzno co nejrychleji a nejintuitivnˇeji.
3.3
Funkce a vlastnosti syst´ emu
Syst´em bude uchov´avat a poskytovat informace o instituci, o um´ıstˇen´ı informaˇcn´ıch maj´ak˚ u a obsahu maj´ak˚ u pˇri jejich nalezen´ı. Pokud se vr´at´ıme k pˇredeˇsl´emu motivaˇcn´ımu pˇr´ıkladu (viz. 3.1), tak instituce je zoo, informaˇcn´ı maj´ak bude napˇr´ıklad zemˇepisn´a poloha v´ ybˇehu opic a po nalezen´ı tohoto maj´aku se zobraz´ı dodateˇcn´e informace o opic´ıch. Syst´em se bude skl´adat ze serverov´e ˇca´sti Tagiee a klientsk´e aplikace Tagiee pro mobiln´ı telefony (viz Obr. 3.1). Syst´em s mobiln´ı aplikac´ı bude komunikovat pomoc´ı pevnˇe definovan´eho Web API1 . Serverov´a ˇca´st bude poskytovat webov´e prostˇred´ı, pˇres kter´e zamˇestnanci instituc´ı mohou pˇrid´avat a mˇenit obsah jejich instituc´ı. Klientsk´e aplikace budou dostupn´e skrze mobiln´ı obchody s aplikacemi (App Store, Google Play, Windows Phone Store). Tagiee m˚ uˇze slouˇzit i jako inovace v oblasti informaˇcn´ıch technologi´ı pro instituci. Zamˇestnanec instituce si vytvoˇr´ı u ´ˇcet v syst´emu Tagiee skrze webov´e prostˇred´ı. K tomuto u ´ˇctu si pˇrid´a jednu nebo v´ıce instituc´ı, ke kter´ ym m˚ uˇze pˇrid´avat r˚ uzn´e informaˇcn´ı maj´aky. Informaˇcn´ı maj´aky budou um´ıstˇeny po 1
Rozhran´ı pro komunikaci s webov´ ym serverem pomoc´ı HTTP protokolu a strukturovan´ ych dat.
10
N´avrh syst´emu
Funkce a vlastnosti syst´emu
Obr´azek 3.1: Architektura syst´emu Tagiee. cel´e instituci a budou detekovateln´e pomoc´ı n´asleduj´ıc´ıch technologi´ı: • Podle lokace - GPS2 , WiFi3 , Bluetooth4 . Maj´ak bude naleziteln´ y nejen podle zemˇepisn´ ych souˇradnic (ˇs´ıˇrka, v´ yˇska) ale i podle seznamu nejbliˇzˇs´ıch WiFi a Bluetooth. Posledn´ı dvˇe technologie usnadn´ı navigaci uvnitˇr budovy. • Podle NFC5 (kaˇzd´ y maj´ak m˚ uˇze b´ yt nalezen pomoc´ı NFC tagu). • Podle QR k´odu6 (kaˇzd´ y maj´ak m˚ uˇze b´ yt nalezen podle QR k´odu). • Podle 3-m´ıstn´eho hash kl´ıˇce (kaˇzd´ y maj´ak m˚ uˇze b´ yt nalezen podle kl´ıˇce). V´ıce o technologi´ıch a metod´ach nalezen´ı maj´ak˚ u se zab´ yv´a Bc. Jiˇr´ı Hrom´adka ve sv´e diplomov´e pr´aci Komunikace a identifikace informaˇcn´ıch ma” j´ak˚ u“. Po nalezen´ı informaˇcn´ıho maj´aku se uˇzivateli zobraz´ı obsah v podobˇe 2
Global Positioning System - glob´aln´ı druˇzicov´ y polohov´ y syst´em s jehoˇz pomoc´ı lze urˇcit polohu s pˇresnost´ı na deset metr˚ u. 3 Oznaˇcen´ı nˇekolika standard˚ u IEEE 802.11 popisuj´ıc´ı bezdr´atovou komunikaci v poˇc´ıtaˇcov´e s´ıti. 4 Standard pro bezdr´ atovou komunikaci mezi dvˇema ˇci v´ıce elektronick´ ymi zaˇr´ızen´ımi. 5 Near field communication - slouˇz´ı ke komunikaci mezi dvˇema zaˇr´ızen´ımi na kr´atkou vzd´ alenost. 6 Prostˇredek pro automatizovan´ y sbˇer dat.
11
N´avrh syst´emu
Funkce a vlastnosti syst´emu
text˚ u, obr´azk˚ u a videa. Zamˇestnanci budou m´ıt pˇr´ıstup ke statistik´am o n´avˇstˇevnosti jejich instituce a zpˇetnou vazbu od uˇzivatel˚ u pomoc´ı kr´atk´ ych hodnocen´ı, kter´a mohou n´avˇstˇevn´ıci pˇridat k instituci. Uˇzivatel si bude moci zdarma st´ahnout klientskou aplikaci do sv´eho telefonu. Pˇri zapnut´ı aplikace se uˇzivateli na z´akladˇe jeho polohy nab´ıdne seznam nejbliˇzˇs´ıch instituc´ı, ke kter´ ym se m˚ uˇze pˇrihl´asit. Pˇrihl´aˇsen´ı k instituci lze i zad´an´ım unik´atn´ıho identifik´atoru, jenˇz m´a kaˇzd´a instituce v syst´emu Tagiee. Po pˇrihl´aˇsen´ı k instituci m˚ uˇze uˇzivatel zobrazit d˚ uleˇzit´e informace jako jsou otev´ırac´ı doby, cen´ık, kontaktn´ı u ´daje. Uˇzivatel pomoc´ı aplikace m˚ uˇze naleznout informaˇcn´ı maj´aky pouze u pˇrihl´aˇsen´e instituce. Nalezen´ım maj´aku z´ısk´a znalost´ı informace o m´ıstˇe, kde se maj´ak nach´az´ı. Nalezen´e maj´aky se ukl´adaj´ı pro pozdˇejˇs´ı prohl´ıˇzen´ı. Mobiln´ı zaˇr´ızen´ı jako poskytovatel´e tˇechto informac´ı byla vybr´ana z d˚ uvodu jejich rozˇs´ıˇrenosti mezi n´avˇstˇevn´ıky. Dle studie ve 3. ˇctvrtlet´ı roku 2012 bylo prod´ano v´ıce neˇz 1083 mili´on˚ u chytr´ ych“ mobiln´ıch zaˇr´ızen´ı. [stu()] ” Mobiln´ı chytr´e“ zaˇr´ızen´ı vyuˇz´ıv´a fotoapar´at, lokalizaˇcn´ı sluˇzby, mobiln´ı in” ternet, umoˇzn ˇuje instalaci aplikac´ı tˇret´ıch stran apod. Syst´em a klientsk´a aplikace budou m´ıt tedy n´asleduj´ıc´ı vlastnosti a funkˇcnost (viz 3.3.1 a 3.3.2).
3.3.1
Syst´ em
• Syst´em bude navrˇzen pro snadn´e budouc´ı rozˇs´ıˇren´ı. • Syst´em bude disponovat webov´ ym rozhran´ım pro zamˇestnance instituc´ı. • Syst´em bude komunikovat s klientskou aplikac´ı skrze Web API. • Umoˇzn´ı zdarma registraci do syst´emu Tagiee. • Umoˇzn´ı pˇrid´an´ı a editov´an´ı instituc´ı, maj´ak˚ u pˇrihl´aˇsen´ ym uˇzivatel˚ um. • Obsah jednotliv´ ych maj´ak˚ u budou tvoˇrit texty, obr´azky a video, kter´e bude umˇet syst´em pˇridat a editovat. • Syst´em bude uchov´avat veˇsker´e textov´e informace a obr´azky. Videa budou uloˇzena na extern´ıch u ´loˇziˇst´ıch.
12
N´avrh syst´emu
Funkce a vlastnosti syst´emu
• Syst´em poskytne seznam nejbliˇzˇs´ıch instituc´ı na z´akladˇe polohy uˇzivatele. • Syst´em poskytne klientsk´ ym aplikac´ı vˇsechen obsah pˇridan´ y zamˇestnanci instituc´ı. • Syst´em mus´ı jednoznaˇcnˇe identifikovat vˇsechny zaˇr´ızen´ı, na kter´ ych bˇeˇz´ı klientsk´a aplikace, instituce, maj´aky a zdroje (obr´azky, videa apod.). • Syst´em bude pˇrij´ımat informace z klientsk´e aplikace a na z´akladˇe nich tvoˇrit statistiky o vyuˇzit´ı Tagiee v instituc´ıch. • Syst´em bude ukl´adat informace o nalezen´ı informaˇcn´ıho maj´aku. Pokud uˇzivatel smaˇze klientskou aplikaci, tak po znovu nainstalov´an´ı aplikace nepˇrijde o jednou jiˇz nalezen´e maj´aky. • Syst´em bude pˇrij´ımat hodnocen´ı uˇzivatel˚ u, kter´a budou slouˇzit jako zpˇetn´a vazba zamˇestnanc˚ um instituce.
3.3.2
Klientsk´ a aplikace
Klientsk´a aplikace by pokud moˇzno mˇela m´ıt n´asleduj´ıc´ı funkˇcnost, aby se zachovala u ´roveˇ n sluˇzby Tagiee. • Mobiln´ı aplikace bude splˇ novat podm´ınky pro vstup do digit´aln´ıch obchod˚ u s aplikacemi (App Store, Google Play, Windows Phone Store). • Aplikace bude vyuˇz´ıvat GPS, NFC, WiFi, Bluetooth, fotoapar´at a pˇripojen´ı k internetu. • Klientsk´a aplikace bude komunikovat se syst´emem Tagiee pomoc´ı API. • Aplikace bude schopn´a zobrazit nejbliˇzˇs´ı instituce vyuˇz´ıvaj´ıc´ı syst´em Tagiee a n´asledn´e pˇrihl´aˇsen´ı k nim. Pokud nebude dostupn´a GPS technologie pro z´ısk´an´ı aktu´aln´ı polohy, bude moˇznost se pˇrihl´asit k instituci pomoc´ı unik´atn´ıho identifik´atoru. Pˇrihl´aˇsen´ım se m´ın´ı staˇzen´ı informac´ı o instituci vˇcetnˇe vˇsech dostupn´ ych maj´ak˚ u a jejich textov´eho obsahu. Staˇzen´e textov´e informace se uchovaj´ı pro pozdˇejˇs´ı pouˇzit´ı. • Umoˇzn´ı nalezen´ı informaˇcn´ıch maj´ak˚ u n´avˇstˇevn´ıkem pomoc´ı jednoznaˇcn´e identifikovateln´e znaˇcky (lokalizaˇcn´ı sluˇzba - GPS, QR k´od, NFC, WiFi, bluetooth, 3-m´ıstn´ y hash kl´ıˇc). 13
N´avrh syst´emu
Uˇzivatel´e syst´emu
• Pˇri nalezen´ı maj´ak˚ u skrze lokalizaˇcn´ı sluˇzbu, mus´ı aplikace zobrazit vˇsechny naleziteln´e maj´aky na mapˇe. • Aplikace bude umˇet zobrazit seznam vˇsech nalezen´ ych maj´ak˚ u, jejich obsah vˇcetnˇe vˇsech obr´azk˚ u a vide´ı. Jednou jiˇz staˇzen´e obr´azky si aplikace uchov´a, aby se v budoucnu nestahovaly znovu. • Mobiln´ı aplikace Tagiee mus´ı b´ yt ˇsetrn´a k vyuˇzit´ı mobiln´ı datov´e s´ıtˇe. V pˇr´ıpadˇe pˇripojen´ı k WiFi s´ıti je moˇznost pˇred zaˇca´tkem prohl´ıdky instituce st´ahnout vˇsechny obr´azky obsahu maj´ak˚ u, kter´e se zobraz´ı v pˇr´ıpadˇe jejich nalezen´ı. • Aplikace mus´ı zobrazit vˇzdy aktu´aln´ı informace, pokud je dostupn´e pˇripojen´ı k internetu. • Klientsk´a aplikace bude sb´ırat statistiky o akc´ıch uˇzivatele. Akce jsou pˇrihl´aˇsen´ı k instituci a nalezen´ı maj´aku. Tyto akce bude umˇet poslat syst´emu Tagiee. Pokud nebude dostupn´e pˇripojen´ı k internetu, tyto statistiky se uloˇz´ı a poˇslou, aˇz pˇripojen´ı k internetu bude znovu nav´az´ano. • Aplikace bude umˇet pˇridat kr´atk´e hodnocen´ı. • Velikost cel´e aplikace mus´ı b´ yt minimalizov´ana pro moˇznost staˇzen´ı i pˇres mobiln´ı internetov´e pˇripojen´ı. • Aplikace mus´ı b´ yt ˇsetrn´a k baterii a zap´ınat / vyp´ınat lokalizaˇcn´ı sluˇzby dle potˇreby. • Aplikace mus´ı unik´atnˇe napˇr´ıˇc platformami identifikovat zaˇr´ızen´ı.
3.4
Uˇ zivatel´ e syst´ emu
K syst´emu budou pˇristupovat 3 typy uˇzivatel˚ u. Zamˇestnanci instituc´ı, n´avˇstˇevn´ıci vyuˇz´ıvaj´ıc´ı klientskou aplikaci a samotn´ı spr´avci syst´emu Tagiee.
3.4.1
Zamˇ estnanec instituce
Zamˇestnanec instituce bude povˇeˇren´a osoba, kter´a bude tvoˇrit obsah sv´e instituce v syst´emu Tagiee. Zamˇestnanec bude schopen vykon´avat tyto u ´kony. 14
N´avrh syst´emu
Uˇzivatel´e syst´emu
• Bezplatn´a registrace do syst´emu Tagiee. • Pˇrid´an´ı / editov´an´ı instituc´ı. • Pˇrid´an´ı / editov´an´ı maj´ak˚ u a jejich obsahu. S t´ım spojen´e nahr´av´an´ı obr´azk˚ u a vide´ı. • Prohl´ıˇzen´ı statistik n´avˇstˇevnosti a hodnocen´ı od uˇzivatel˚ u. • Nahl´aˇsen´ı nevhodn´eho hodnocen´ı od uˇzivatel˚ u.
3.4.2
Uˇ zivatel klientsk´ e aplikace
Uˇzivatel mus´ı vlastnit mobiln´ı chytr´ y“ telefon, kter´ y disponuje pˇripojen´ım ” k internetu.Uˇzivatel bude schopen vykon´avat tyto n´asleduj´ıc´ı u ´kony. • Bezplatnˇe st´ahnout klientskou aplikaci Tagiee z aplikaˇcn´ıch obchod˚ u. • Uˇzivatel m˚ uˇze povolit uˇz´ıv´an´ı lokalizaˇcn´ı sluˇzby v aplikaci. • Nalezen´ı informaˇcn´ıch maj´ak˚ u pomoc´ı lokalizaˇcn´ıch sluˇzeb, QR k´odu, 3-m´ıstn´eho hash kl´ıˇce a NFC tagu. • Pˇrid´an´ı kr´atk´e recenze k instituci. • Staˇzen´ı vˇsech obr´azk˚ u pˇred prohl´ıdkou instituce. • Pˇrihl´aˇsen´ı k instituci skrze jej´ı unik´atn´ı identifik´ator nebo na z´akladˇe polohy. • Zobrazit informace o instituci. • Zobrazit jiˇz jednou nalezen´e maj´aky s jejich obsahem.
3.4.3
Spr´ avce Tagiee
Spr´avce syst´emu Tagiee se mus´ı starat o kvalitu obsahu pˇridan´ ych zamˇestnanci instituc´ı. • Kontrolovat pravost instituc´ı, aby nedoch´azelo k znekvalitnˇen´ı sluˇzby Tagiee. 15
N´avrh syst´emu
N´avrh moˇzn´ych alternativ
• Mazat nevhodn´a (vulg´arn´ı a nemravn´a) hodnocen´ı uˇzivatel˚ u na z´akladˇe nahl´aˇsen´ı zamˇestnanci instituce.
3.5
N´ avrh moˇ zn´ ych alternativ
Alternativou m˚ uˇze b´ yt odstranˇen´ı pˇrihl´aˇsen´ı k instituci. Mobiln´ı aplikace by po zapnut´ı zaˇcala automaticky vyhled´avat nejbliˇzˇs´ı maj´aky, aniˇz by byla definov´ana instituce. Zjednoduˇsila by se klientsk´a aplikace, jeˇz by po startu odeslala informace o sv´e poloze syst´emu Tagiee, kter´ y by poskytl informace o nejbliˇzˇs´ıch maj´ac´ıch. Probl´emem zde m˚ uˇze b´ yt m´ıch´an´ı jednotliv´ ych maj´ak˚ u r˚ uzn´ ych instituc´ı a jejich ovˇeˇren´ı pravosti. Nen´ı probl´em pak nastrˇcit maj´ak do instituce, kter´ y m´a myln´e informace. Souˇcasn´ y navrˇzen´ y syst´em tohle odstraˇ nuje t´ım, ˇze si uˇzivatel s´am vybere, k jak´e instituci se chce pˇrihl´asit. Aplikace totiˇz rozpozn´a pouze ty maj´aky, kter´e pˇridali zamˇestnanci instituce.
16
4 Realizace syst´emu Pro realizaci syst´emu byla vybr´ana technologie MySQL (viz 4.2.2) a PHP (viz 4.2.1) pro rychl´ y v´ yvoj syst´emu. API pro komunikaci s klientsk´ ymi aplikacemi bylo naps´ano v ˇcist´em PHP. Pro v´ yvoj frontendov´eho webov´eho prostˇred´ı byl pouˇzit ˇcesk´ y Framework Nette (viz 4.2.3).
4.1
Um´ıstˇ en´ı syst´ emu
Syst´em Tagiee byl um´ıstˇen na placen´em webhostingu Onebit pod dom´enou tagiee.com. Hosting podporuje PHP 5.3/5.4, MySQL.
4.2 4.2.1
Pouˇ zit´ e technologie a knihovny PHP
PHP je technologie bˇeˇz´ıc´ı na serveru. Str´anky se p´ıˇs´ı pomoc´ı php skript˚ u, kter´e obsahuj´ı jak HTML, CSS a k´od PHP. Ve chv´ıli, kdy webov´ y server obdrˇz´ı poˇzadavek na zobrazen´ı str´anky vyuˇz´ıvaj´ıc´ı PHP skripty, server vezme HTML k´od, pot´e server provede ˇca´sti PHP skript˚ u a v´ ysledek spoj´ı do odpovˇedi. [php()]
4.2.2
MySQL
1 ˇ MySQL je relaˇcn´ı datab´azov´ y syst´em typu SRBD . Kaˇzd´a datab´aze v MySQL je tvoˇrena z jedn´e nebo v´ıce tabulek, kter´e maj´ı ˇr´adky a sloupce. V ˇra´dc´ıch jsou jednotliv´e z´aznamy a sloupce uvozuj´ı n´azev ˇci datov´ y typ jednotliv´ ych pol´ı. Pr´ace s daty se prov´ad´ı pomoc´ı deklarativn´ıho programovac´ıho jazyka SQL. 1
Syst´em ˇr´ızen´ı b´ aze dat - software zajiˇst’uj´ıc´ı pr´aci s datab´az´ı.
17
Realizace syst´emu
4.2.3
Pouˇzit´e technologie a knihovny
Framework Nette
Framework Nette je opensource framework pro tvorbu webov´ ych aplikac´ı v PHP 5. V´ yhody frameworku jsou eliminace bezpeˇcnostn´ıch rizik, ˇsablonovac´ı syst´em, podpora AJAXu, ˇcist´ y objektov´ y n´avrh, komponenty, ud´alostmi ˇr´ızen´e programov´an´ı, v´ ykon, dependency injection, pluginy a rozˇs´ıˇren´ı. Nette vyuˇz´ıv´a architekturu MVP: • Model - Datov´a a funkˇcn´ı vrstva, jeˇz se star´a o ukl´ad´an´ı dat a aplikaˇcn´ı logiku (napˇr. pˇrihl´aˇsen´ı, pˇrid´an´ı a zmˇena dat). • View - Star´a se pouze o vykreslen´ı v´ ysledku poˇzadavku uˇzivatele. V Nette jsou to ˇsablony. • Presenter - Spojuje Model a View vrstvu. Na z´akladˇe poˇzadavku od uˇzivatele vyvol´a pˇr´ısluˇsnou aplikaˇcn´ı logiku. Informace o Nette v t´eto podsekci vych´az´ı z jej´ı dokumentace. [net()] ˇ Sablony Silnou pˇrednost´ı Nette je ˇsablonovac´ı syst´em Latte. Latte uˇsetˇr´ı pr´aci a zabezpeˇc´ı v´ ystup napˇr´ıklad proti XSS2 apod. Z´akladem je Latte soubor, kter´ y obsahuje HTML, Javascript a Latte makra. V n´asleduj´ıc´ım pˇr´ıkladu je uveden rozd´ıl mezi PHP a Latte makry. V PHP bude vyps´ano pole prvk˚ u jako seznam, kde kaˇzd´ y ˇretˇezec bude zaˇc´ınat velik´ ym p´ısmenem: php if ( $items ): ? > php $counter = 1 ? >
php foreach ( $items as $item ): ? > // Tvoreni ID itemu . < li id = " item - php echo $counter ++ ? > " > php // Prvni znak retezce velke pismeno . 2
Cross-Site Scripting je metoda naruˇsen´ı webov´ ych str´anek zneuˇz´ıvaj´ıc´ı neoˇsetˇren´ ych ´ cn´ık pak dok´ v´ ystup˚ u. Utoˇ aˇze do str´anky podstrˇcit sv˚ uj vlastn´ı k´od a t´ım m˚ uˇze str´anku pozmˇenit nebo dokonce z´ıskat citliv´e u ´daje o n´avˇstˇevn´ıc´ıch.
18
Realizace syst´emu
Pouˇzit´e technologie a knihovny
echo htmlSpecialChars ( mb_convert_case ( $item , MB_CASE_TITLE )) ?> li > php endforeach ? > ul > php endif ? >
Tento k´od je vˇsak velmi nepˇrehledn´ y. Pomoc´ı Latte maker bude k´od vypadat n´asledovnˇe: < ul n : if = " $items " > < li n : foreach = " $items as $item " >{ $item | capitalize } li > ul >
Vˇsimnout si m˚ uˇzete tzv. helper˚ u, jsou to slova za znakem |“, kter´e umoˇz” n ˇuj´ı form´atov´an´ı v´ ysledn´eho textu, ˇc´ısel apod. V pˇredchoz´ım pˇr´ıkladˇe je helper slov´ıˇcko capitalize, kter´e znamen´a, ˇze ˇretˇezec bude vyps´an vˇzdy s prvn´ım velk´ ym p´ısmenem.
Presentery Presenter je objekt, jenˇz vezme poˇzadavek pˇreloˇzen´ y routerem (obousmˇern´e pˇrekl´ad´an´ı mezi URL a akc´ı presenteru) a vybere odpovˇed’. Odpovˇed´ı m˚ uˇze b´ yt HTML str´anka, obr´azek, XML dokument, soubor na disku, JSON, pˇresmˇerov´an´ı apod. Kaˇzd´ y presenter m´a sv˚ uj ˇzivotn´ı cyklus (viz obr. 4.1). Ihned po vytvoˇren´ı presenteru se zavol´a metoda startup(). Ta inicializuje promˇenn´e nebo oveˇr´ı uˇzivatelsk´a opr´avnˇen´ı. Metoda action provede urˇcit´ y u ´kon (pˇrihl´as´ı uˇzivatele, zap´ıˇse data do datab´aze) pˇr´ıpadnˇe pˇresmˇeruje na jin´ y presenter. Metoda handle zpracov´av´a sign´aly. Sign´aly jsou urˇceny pro komponenty a pro zpracov´an´ı AJAXov´ ych poˇzadavk˚ u. D˚ uleˇzitou metodou je render, pˇri n´ıˇz pˇred´a presenter ˇsablonˇe data, kter´a bude ˇsablona zobrazovat.
Datab´ aze Nette poskytuje vrstvu pro pr´aci s datab´az´ı, jeˇz za program´atora bude pokl´adat efektivn´ı dotazy, kter´e nebudou pˇren´aˇset zbyteˇcn´a data. Z´akladem je objekt nad PDO3 Nette/Database/Connection. Nad t´ımto objektem se daj´ı 3
Tˇr´ıda reprezentuj´ıc´ı spojen´ı mezi PHP a datab´azov´ ym serverem.
19
Realizace syst´emu
Pouˇzit´e technologie a knihovny
ˇ Obr´azek 4.1: Zivotn´ ı cyklus presenteru v Nette. pokl´adat klasick´e SQL dotazy Na n´asleduj´ıc´ım pˇr´ıkladu je uk´az´ano vytvoˇren´ı objektu Connection a a poloˇzen´ı SQL dotazu. use Nette \ Database \ Connection ; $database = new Connection ( $dsn , $user , $password ); $database - > query ( ’ SELECT * FROM categories WHERE id =? ’ , 123) -> dump ();
U sloˇzitˇejˇs´ıch dotaz˚ u lze vyuˇz´ıt n´astroj odvozen´ y od NotORM. NotORM je PHP knihovna pro snadnˇejˇs´ı pr´aci s datab´az´ı a obsahuje bal´ık metod, kter´e za n´as vygeneruj´ı poˇzadovan´e SQL dotazy. Nutn´e je vˇsak podotknout, pokud bychom chtˇeli vyuˇz´ıvat tuto funkci v Nette, je nutn´e m´ıt typ tabulek v datab´azi s ciz´ımi kl´ıˇci napˇr. InnoDB, kde n´azev sloupeˇcku ciz´ıch kl´ıˇc˚ u bude obsahovat n´azev tabulky, na kterou se odkazuje a suffix id. Na n´asleduj´ıc´ım pˇr´ıkladu je pouˇzit´ı n´astroje NotORM. use Nette \ Database \ Connection ; $database = new Connection ( $dsn , $user , $password ); $database - > table ( ’ categories ’) - > where ( array ( ’ id ’ = >123)) -> dump ();
20
Realizace syst´emu
Pouˇzit´e technologie a knihovny
T´ımto zp˚ usobem m˚ uˇzeme tvoˇrit mnohem sloˇzitˇejˇs´ı dotazy a vyuˇz´ıvat r˚ uzn´e agregaˇcn´ı a filtraˇcn´ı funkce. Poˇzadovan´a data jsou vr´acena jako ActiveRow objekt, se kter´ ym zach´az´ıme jako s polem.
Formul´ aˇ re Nette um´ı jednoduˇse vytvoˇrit formul´aˇre tˇr´ıdy Nette/Forms/Form. Formul´aˇre se validuj´ı jak na stranˇe serveru, tak i na stranˇe Javascriptu, podporuj´ı v´ıcejazyˇcnost a poskytuj´ı zabezpeˇcen´ı proti zranitelnosti syst´em˚ u. Jednoduch´ y pˇrihlaˇsovac´ı formul´aˇr vypad´a n´asledovnˇe. require ’ Nette / loader . php ’; use Nette \ Forms \ Form ; $form = new Form ; // Pridani poli $form - > addText ( ’ name ’ , ’ Jmeno : ’ ); $form - > addPassword ( ’ password ’ , ’ Heslo : ’ ); $form - > addSubmit ( ’ send ’ , ’ Registrovat ’ ); echo $form ; // vykresli formular
Nette m´a velikou ˇsk´alu validaˇcn´ıch pravidel od emailu aˇz po URL. V pˇr´ıpadˇe u ´spˇeˇsnˇe vyplnˇen´eho formul´aˇre se zavol´a metoda, kter´a se formul´aˇri nastav´ı n´asledovnˇe. $form - > onSuccess [] = $this - > loginSubmited ; public function loginSubmitted ( Form $form ) { // Zpracovani $jmeno = $form - > values - > name ; // Jmeno $password = $form - > values - > password ; // Heslo }
Metoda loginSubmitted bude zavol´ana pˇri odesl´an´ı formul´aˇre. K jednotliv´ ym hodnot´am z formul´aˇre se pˇristupuje pˇres instanci Form pˇredanou jako parametr t´eto metody.
21
Realizace syst´emu
4.2.4
Pouˇzit´e technologie a knihovny
Google Maps JavaScript API v3
Google Maps JavaScript API v3 umoˇzn ˇuje vloˇzen´ı Google mapy na vlastn´ı str´anky. API poskytuje funkce kter´e pracuj´ı s mapou a mohou j´ı nastavovat r˚ uzn´e anotace, polohu, ale i informace z mapy z´ısk´avat. [map()] Mapa se pˇripoj´ı k blokov´emu elementu pomoc´ı javascriptov´eho k´odu. var map ; function initialize () { var mapOptions = { zoom : 8 , // Nastaveni jake misto na mape ma byt zobrazeno . center : new google . maps . LatLng ( -34.397 , 150.644) , // Typ mapy mapTypeId : google . maps . MapTypeId . ROADMAP }; // Napojeni mapy na div s id =" map - canvas " map = new google . maps . Map ( document . getElementById ( ’map - canvas ’) , mapOptions ); } // Inicialize Google Map google . maps . event . addDomListener ( window , ’ load ’ , initialize );
4.2.5
Google Charts
Google Charts je n´astroj, kter´ y umoˇzn´ı vloˇzen´ı graf˚ u na str´anky pomoc´ı javascriptu. Podporuje velik´e mnoˇzstv´ı graf˚ u napˇr. kol´aˇcov´e, spojnicov´e, sloupcov´e apod. Nejprve je nutn´e inicializovat graf. [cha()] // Nacteni vizualizace grafu . google . load ( ’ visualization ’ , ’ 1.0 ’ , { ’ packages ’ :[ ’ corechart ’ ]}); // Nastaveni callbacku pro vykresleni grafu . google . setOnLoadCallback ( drawChart );
Po inicializaci se nadefinuj´ı data a napln´ı se jim instance grafu. function drawChart () { // Definice dat . var data = new google . visualization . DataTable (); data . addColumn ( ’ string ’ , ’ Topping ’ ); data . addColumn ( ’ number ’ , ’ Slices ’ );
22
Realizace syst´emu
Pouˇzit´e technologie a knihovny
data . addRows ([ [ ’ Mushrooms ’ , 3] , [ ’ Onions ’ , 1] , ]); // Nastaveni grafu . var options = { ’ width ’ :400 , ’ height ’ :300}; // Vytvoreni instance grafu , ktere se predaji // data a nastaveni . var chart = new google . visualization . PieChart ( document . getElementById ( ’ chart_div ’ )); // Vykresleni grafu . chart . draw ( data , options ); }
4.2.6
JQuery
JQuery je javascriptov´a knihovna usnadˇ nuj´ıc´ı pr´aci a pˇrehlednost javascriptu. [jqu()] Knihovna m´a n´asleduj´ıc´ı funkce: • V´ ybˇer DOM element˚ u. • Funkce pro proch´azen´ı a zmˇenu DOM. • Kompletn´ı podpora AJAX. • Manipulace s CSS. • Ud´alosti, na kter´e lze napojit vlastn´ı funkce. • Rozˇsiˇritelnost o dalˇs´ı pluginy. Pouˇzit´ı knihovny spoˇc´ıv´a v importov´an´ı javascriptov´e knihovny do str´anek: < script type = " text / javascript " src = " jquery . js " > script >
23
Realizace syst´emu
4.2.7
Pouˇzit´e technologie a knihovny
JQuery UI
JQuery UI je sada efekt˚ u, widget˚ u, t´emat a interaktivn´ıch prvk˚ u postaven´a nad knihovnou JQuery. Z´akladem je importov´an´ı CSS a javascriptov´eho souboru do HTML dokumentu a pot´e lze vyuˇz´ıvat funkce tohoto rozˇs´ıˇren´ı. [jqu()]
4.2.8
Uploadify
Uploadify je JQuery plugin, pomoc´ı kter´eho lze nahr´avat na server soubory. Jsou dvˇe r˚ uzn´e verze a to HTML5 a Flash. Uploadify podporuje nahr´an´ı v´ıce soubor˚ u, zobrazuje pr˚ ubˇeh nahr´av´an´ı souboru a v HTML5 verzi podporuje drag and drop pˇrid´an´ı souboru do nahr´avac´ıho formul´aˇre. Zobrazen´ı formul´aˇre pro nahr´av´an´ı soubor˚ u se provede nasazen´ım pluginu pomoc´ı JQuery nad blokov´ ym elementem
. [upl()] $ ( function () { $ ( " # file_upload " ). uploadify ({ width : 120 , height : 30 , // Nahravaci animace swf : ’/ uploadify / uploadify . swf ’ , // PHP skript pro zpracovani nahraneho obrazku . uploader : ’/ uploadify / uploadify . php ’ }); });
4.2.9
Jcrop
JCrop je JQuery plugin, kter´ y umoˇzn´ı vybrat v´ yseˇc v obr´azku. Nad elementem
nebo se nasad´ı JCrop plugin. [jcr()] $ ( function () { $ ( ’# jcrop_target ’ ). Jcrop (); });
24
Realizace syst´emu
4.3
Datab´azov´a vrstva
Datab´ azov´ a vrstva
Datab´aze v MySQL byla vytvoˇrena pomoc´ı n´astroje MySQL Workbench 5.2. MySQL Workbench je grafick´ y uˇzivatelsk´ y n´astroj pro architekty a v´ yvoj´aˇre datab´az´ı. Umoˇzn ˇuje tvorbu a modelov´an´ı datab´az´ı MySQL. Na obr´azku (Obr. 4.2) je datov´ y model syst´emu Tagiee. N´azvy vˇsech tabulek jsou anglicky mal´ ym p´ısmenem a v jednotn´em ˇc´ısle. Propojovac´ı tabulky ciz´ıch kl´ıˇc˚ u jsou tvoˇreny n´azvy propojen´ ych tabulek oddˇelen´e podtrˇz´ıtkem. Aby se datab´aze mohla vyuˇz´ıvat s frameworkem Nette, vˇsechny ciz´ı kl´ıˇce jsou pojmenov´any n´azvem tabulky, na kterou se odkazuj´ı se suffixem id. Z´akladem je tabulka uˇzivatel˚ u (user). Zamˇestnanec instituce si mus´ı nejprve vytvoˇrit tento u ´ˇcet, kde zad´a informace o sobˇe. Uˇzivatel m´a r˚ uzn´e role, pokud se jedn´a o spr´avce instituce, dovol´ı syst´em Tagiee pˇrid´an´ı jedn´e ˇci v´ıce instituc´ı (institution). K pˇrid´an´ı instituce staˇc´ı n´azev instituce, unik´atn´ı identifik´ator instituce (uiid) a adresa. Adresa se skl´ad´a ze zemˇe, kraje, mˇesta, ulice a poˇstovn´ıho smˇerovac´ıho ˇc´ısla. Na z´akladˇe tˇechto u ´daj˚ u se z´ıskaj´ı zemˇepisn´e souˇradnice z Google Maps. Novˇe vytvoˇren´a instituce nen´ı aktivn´ı a je nutn´e ji aktivovat pro zobrazen´ı v mobiln´ıch aplikac´ıch. Aktivovat instituci lze jen v tom pˇr´ıpadˇe, ˇze jsou vyplnˇeny poloˇzky: popis instituce, cen´ık, otev´ırac´ı doby a je pˇrid´an alespoˇ n jeden maj´ak. Cen´ık a otev´ırac´ı doby jsou uloˇzeny v datab´azi jako JSON (viz 4.4.1) pole. K instituci lze pˇridat maj´aky (beacon), zdroje (resource) a lokace (location). Zdroj je multimedi´aln´ı obsah, jako je napˇr´ıklad obr´azek. Zdroje jsou propojeny s instituc´ı pomoc´ı propojovac´ı tabulky resource institution. Lokace je um´ıstˇen´ı informaˇcn´ıho maj´aku. Nemus´ı se jednat pouze o zemˇepisn´e souˇradnice, ale i o seznam nejbliˇzˇs´ıch WiFi a Bluetooth s´ıt´ı, podle kter´ ych lze jednoznaˇcnˇe definovat polohu informaˇcn´ıho maj´aku. Seznam WiFi a Bluetooth je v datab´azi uloˇzen jako JSON pole. Instituce m˚ uˇze m´ıt libovoln´e mnoˇzstv´ı maj´ak˚ u. Maj´ak m´a unik´atn´ı identifik´ator ubid a 3-m´ıstn´ y kl´ıˇc, kter´ y je unik´atn´ı jen v r´amci instituce. QR k´od a NFC budou vyuˇz´ıvat ubid k identifikaci maj´aku a kl´ıˇc bude vyuˇz´ıvat 3-m´ıstn´eho kl´ıˇce. Kaˇzd´ y maj´ak m´a sv˚ uj popis a textov´ y obsah. Obsah je uloˇzen opˇet jako JSON pole v n´asleduj´ıc´ım form´atu: [1.. N array ] = > ( [ type ] = > String { image | text | audio | video }
25
Realizace syst´emu
Datab´azov´a vrstva
Obr´azek 4.2: Datov´ y model syst´emu Tagiee. [ heading ] = > String
26
Realizace syst´emu
Datab´azov´a vrstva
[ content ] = > String [ resource_id ] = > Array integer )
Rozliˇsuj´ı se 4 typy obsahu a to obr´azek, video, odkaz a text. V pˇr´ıpadˇe textu se vypln´ı kolonky heading, content a type se nastav´ı na text. U odkazu se vypln´ı tak´e heading a content, kde v heading bude n´azev odkazu a v content bude pˇr´ımo odkaz. U obr´azk˚ u se m˚ uˇze heading a content vynechat, ale mus´ı b´ yt vyplnˇen resource id. V resource id bude pole id referuj´ıc´ı na obr´azky. U videa bude pouze v content odkaz na Youtube video. Jeden maj´ak m˚ uˇze m´ıt tedy neomezen´e“ mnoˇzstv´ı text˚ u a odkaz˚ u (omezen´ı d´ano ” velikost´ı sloupeˇcku v datab´azi), 10 obr´azk˚ u a 1 Youtube video. O tohle omezen´ı se star´a webov´a aplikaˇcn´ı vrstva syst´emu Tagiee. Zdroje k maj´aku jsou zaznamen´any v tabulce beacon resource. Kaˇzd´e mobiln´ı zaˇr´ızen´ı se zaˇrad´ı do tabulky device s unik´atn´ım identifik´atorem. Pˇrihl´as´ı-li se zaˇr´ızen´ı k instituci, vloˇz´ı se z´aznam do tabulky device institution a v pˇr´ıpadˇe nalezen´ı maj´aku se vloˇz´ı z´aznam do beacon device. Tabulka review uchov´av´a hodnocen´ı uˇzivatel˚ u k dan´e instituci. Jedno zaˇr´ızen´ı m˚ uˇze pˇridat pouze jedno hodnocen´ı k jedn´e instituci.
4.3.1
Triggery
Od verze MySQL 5.0.2 pˇribyla podpora triger˚ u. Triger je pojmenovan´ y datab´azov´ y objekt, kter´ y je spojen s urˇcitou tabulkou a aktivuje se ud´alost´ı pˇri pr´aci nad n´ı. MySQL podporuje ud´alosti INSERT (vloˇzen´ı), UPDATE (aktualizace dat) a DELETE (smaz´an´ı). Jeˇstˇe se rozliˇsuj´ı akce BEFORE (pˇred vykon´an´ı ud´alosti) a AFTER (po vykon´an´ı ud´alosti). [mys()] Pˇri vykon´an´ı triggeru mohou b´ yt inicializov´any dvˇe promˇenn´e a to NEW a OLD. Pˇri ud´alosti INSERT m˚ uˇze b´ yt pouˇzita pouze promˇenn´a NEW. OLD promˇenn´a v ud´alosti INSERT nen´ı. U ud´alosti DELETE je moˇzno pouˇz´ıt zase naopak pouze promˇennou OLD. Nakonec u ud´alosti UPDATE lze pouˇz´ıt obˇe promˇenn´e. Promˇenn´a OLD je pouze urˇcen´a ke ˇcten´ı a nelze do n´ı zapisovat. [mys()]
27
Realizace syst´emu
Datab´azov´a vrstva
Revize instituce Kaˇzd´a instituce m´a ˇc´ıslo svoj´ı revize. Ta urˇcuje aktu´alnost dat pro klientsk´e aplikace. Pokud m´a klientsk´a aplikace ˇc´ıslo revize niˇzˇs´ı neˇz je v syst´emu, aplikace v´ı, ˇze m´a zastaral´a data a st´ahne si posledn´ı verzi dat. Revize se bude zvyˇsovat o ˇc´ıslo 1 pˇri kaˇzd´e zmˇenˇe / pˇrid´an´ı informac´ı v instituci a jejich maj´ac´ıch. Tuto logiku jsem pˇresunul z aplikaˇcn´ı vrstvy do datab´azov´e. V datab´azi je nad tabulkou institution, beacon a location trigger, kter´ y zajist´ı zvyˇsov´an´ı ˇc´ısla revize v instituci. Na n´asleduj´ıc´ım pˇr´ıkladˇe je trigger, kter´ y po kaˇzd´e zmˇenˇe informac´ı nad tabulkou beacon inkrementuje revizi instituce. DELIMITER // CREATE TRIGGER ‘ update_rev_beacon ‘ AFTER UPDATE ON ‘ beacon ‘ FOR EACH ROW BEGIN UPDATE institution i SET i . revision = i . revision + 1 WHERE i . id = NEW . institution_id ; END // DELIMITER ;
Trigger se spust´ı pˇri aktualizaci kaˇzd´eho z´aznamu v tabulce beacon d´ıky kl´ıˇcov´emu slovu FOR EACH ROW. Podobn´e triggery jsou v tabulk´ach location a institution. Pˇri pˇrid´an´ı hodnocen´ı uˇzivatelem, tedy aktualizace tabulky review, nedoch´az´ı ke zmˇenˇe revize. Hodnocen´ı nejsou kl´ıˇcov´e informace, pro kter´a by bylo nutn´e stahovat vˇsechny informace o instituci znovu.
N´ avˇ stˇ evnost maj´ ak˚ u, instituc´ı O n´avˇstˇevn´ıkovi, jenˇz navˇst´ıv´ı instituci, se do datab´aze tato ud´alost zaznamen´a. N´avˇstˇevn´ık m˚ uˇze navˇst´ıvit instituci v´ıcekr´at. Aby se neplnily statistiky, tak navˇst´ıven´ı instituce bude zaznamen´ano jen jednou za 24 hodin. Pokud by n´avˇstˇevn´ık navˇst´ıvil instituci ve 24 hodin´ach v´ıcekr´at, v datab´azi bude z´aznam pouze jednou. Naopak navˇst´ıv´ı-li instituci dvakr´at s intervalem jednoho mˇes´ıce, budou zaznamen´any v datab´azi dvˇe n´avˇstˇevy. V n´asleduj´ıy c´ım k´odu je uk´azka vytvoˇren´ı triggeru nad tabulkou device institution, kter´ nepovol´ı pˇrid´an´ı v´ıce z´aznam˚ u o navˇst´ıven´ı stejn´e instituce stejn´ ym n´avˇstˇevn´ıkem bˇehem 24 hodin. DELIMITER // CREATE TRIGGER ‘ device_institution_prevent ‘ BEFORE INSERT ON ‘ device_institution ‘ FOR EACH ROW BEGIN
28
Realizace syst´emu
Tagiee API
DECLARE count INT default 0; SET count = ( SELECT COUNT (*) FROM device_institution WHERE device_id = NEW . device_id AND institution_id = NEW . institution_id AND abs ( UNIX_TIMESTAMP ( NEW . timestamp ) UNIX_TIMESTAMP ( timestamp )) < 86400 );
IF ( count > 0) THEN SIGNAL SQLSTATE ’ 45000 ’ SET MESSAGE_TEXT = " device already visit institution in this day ! " ; END IF ; END // DELIMITER ;
Pˇred vloˇzen´ım nov´eho z´aznamu se projde tabulka device institution a porovn´a se, kolik z´aznam˚ u v tabulce je pˇridan´ ych do 24 hodin (86400 sekund) od pr´avˇe pˇrid´avan´eho z´aznamu v promˇenn´e NEW. Pokud takov´ y z´aznam existuje, jedn´a se o duplicitu za 24 hodin a je vyvol´ana v´ yjimka, kter´a zruˇs´ı pˇrid´an´ı z´aznamu. Stejn´ ym zp˚ usobem je ˇreˇseno nalezen´ı maj´aku n´avˇstˇevn´ıkem. Objeven´ı je zaznamen´ano pouze jednou za 24 hodin, stejnˇe jako u navˇst´ıven´ı instituce. K´od triggeru je obdobn´ y a nach´az´ı se nad tabulkou device beacon.
4.4
Tagiee API
Syst´em pˇredevˇs´ım komunikuje s mobiln´ımi zaˇr´ızen´ımi. Pro implementaci bylo pouˇzit´e ˇcist´e PHP. Komunikace prob´ıh´a formou dotaz / odpovˇed’, tedy na kaˇzd´ y dotaz je odpovˇed’. Komunikace je skrze HTTP Post poˇzadavek a samotn´a data jsou v JSON form´atu (viz 4.4.1).
29
Realizace syst´emu
4.4.1
Tagiee API
JSON format
JSON je form´at dat urˇcen´ y pˇredevˇs´ım k jejich pˇrenosu. Je jednoduch´ y na generov´an´ı a parsov´an´ı. V JSON se vyskytuj´ı dvˇe struktury: • Kolekce neseˇrazen´ ych p´ar˚ u (n´azev a hodnota) naz´ yv´ano jako objekt. Objekt zaˇc´ın´a z´avorkou { a konˇc´ı p´arovou z´avorkou }. Za kaˇzd´ ym n´azvem je dvojteˇcka a p´ary se oddˇeluj´ı ˇca´rkou. • Seˇrazen´e pole prvk˚ u. Pole zaˇc´ın´a hranatou z´avorkou [ a konˇc´ı druhou p´arovou z´avorkou ]. Prvky v poli jsou oddˇeleny ˇca´rkou. Struktury se m˚ uˇzou do sebe libovolnˇe vnoˇrovat a tvoˇrit tak spolu komplexnˇejˇs´ı datovou strukturu. Hodnotou m˚ uˇze b´ yt ˇretˇezec, ˇc´ıslo, pole, objekt, true, false a null. [jso()]
4.4.2
API pro komunikaci
Jak uˇz bylo zm´ınˇeno, poˇzadavek je v JSON form´atu. Server z´ısk´a poˇzadavek pomoc´ı funkce file get contents() nad php://input. $input = file_get_contents ( ’ php :// input ’ );
Funkce file get contents($file) pˇreˇcte cel´ y soubor nad vstupn´ım streamem. V pˇr´ıpadˇe POST poˇzadavku jsou vstupn´ım streamem data, kter´a POST pˇren´aˇs´ı, tedy v naˇsem pˇr´ıpadˇe JSON struktura. Otevˇren´ y stream sm´ı b´ yt ˇcten pouze jednou a nepodporuje operace pro vyhled´av´an´ı. T´ımto jsme dostali JSON strukturu, jeˇz je nutn´e dek´odovat. Dek´odov´an´ı je provedeno nativn´ı funkc´ı PHP json decode($json). $in = json_decode ( $input );
Pokud nen´ı nastaveno, v´ ysledek po parsov´an´ı je v objektu, kter´emu rozum´ı PHP a m˚ uˇzeme s n´ım d´ale pracovat. Kaˇzd´ y poˇzadavek mus´ı obsahovat pole type, kter´e urˇcuje, jak´ y obsah m´a b´ yt vr´acen. Dalˇs´ı povinn´ y parametr je udid, jenˇz je unik´atn´ı identifik´ator kaˇzd´eho zaˇr´ızen´ı. Spolu s unik´atn´ım identifik´atorem je povinn´ ym parametrem 30
Realizace syst´emu
Tagiee API
platform a version definuj´ıc´ı platformu, na kter´e zaˇr´ızen´ı bˇeˇz´ı. Pole version nen´ı povinn´e, ale je doporuˇcen´e. [ type ] = > string [ udid ] = > string [ platform ] = > ios / android / win [ version ] = > string
Po u ´spˇeˇsn´em dek´odov´an´ı a zkontrolov´an´ı je dle pole type vykon´ana odpovˇed’. Odpovˇed’ je sestavena do asociativn´ıho pole v PHP, ze kter´eho se generuje JSON struktura pomoc´ı funkce json encode($array) a nastaven´ı HTTP hlaviˇcky na content-type: application/json. /* Return as JSON array */ header ( " Content - type : application / json " ); echo json_encode ( $out );
Pokud byly parametry poˇzadavku zad´any spr´avnˇe, tak odpovˇed’ bude v n´asleduj´ıc´ım form´atu: [ status ] = > true [ response ]= > array / object
V pˇr´ıpadˇe ˇspatnˇe zadan´ ych parametr˚ u bude vyhozena v´ yjimka s chybou v n´asleduj´ıc´ım form´atu: [ status ] = > false [ error ] = > string [ code ] = > int
Syst´em Tagiee odpov´ıd´a na n´asleduj´ıc´ı typy poˇzadavk˚ u. Pro uk´azku bude uveden pˇr´ıklad jednoho dotazu nad API. Cel´a dokumentace API je v pˇr´ıloze.
get institution list Vrac´ı seznam instituc´ı do vzd´alenosti 100 km. Pˇredpokladem je urˇcen´ı zemˇepisn´e polohy uˇzivatele v poˇzadavku. Kromˇe povinn´ ych parametr˚ u poˇzadavku je nav´ıc potˇreba vyplnit tyto pole: /* Request */ [ type ] = > get_institution_list [ lat ] = > double [ lon ] = > double
31
Realizace syst´emu
Tagiee API
/* Response */ [ response ]= > ( [1.. N array ] [ revision ] = int [ logo ] = > string [ uiid ] = > string [ name ] = > string [ address ] = > string [ lat ] = > double [ lon ] = > double [ rating ] = > double [ number_reviews ] = > int )
V odpovˇedi je seznam instituc´ı se jm´enem, adresou, unik´atn´ıho identifik´atoru instituce uiid, zemˇepisn´e polohy a hodnocen´ı instituce uˇzivateli.
get institution by uiid Na z´akladˇe platn´eho unik´atn´ıho identifik´atoru vrac´ı textov´e informace o instituci. Informace o instituci jako je n´azev, adresa, zemˇepisn´e souˇradnice, otev´ırac´ı doby, hodnocen´ı uˇzivatel˚ u, cen´ık, kontaktn´ı informace. Seznam vˇsech maj´ak˚ u spolu s jejich textov´ ym obsahem a seznam vˇsech pouˇzit´ ych zdroj˚ uv obsahu maj´ak˚ u.
get institution revision Na z´akladˇe unik´atn´ıho identifik´atoru instituce vr´at´ı aktu´aln´ı revizi instituce. Aplikace si m˚ uˇze d´ıky tomuto poˇzadavku zjistit, jestli m´a nejnovˇejˇs´ı verzi dat.
device visit institution V pˇr´ıpadˇe pˇrihl´aˇsen´ı k instituci je posl´ana notifikace syst´emu Tagiee, kter´a uchov´a tuto informaci pro budouc´ı statistiky n´avˇstˇevnosti.
32
Realizace syst´emu
Implementace webov´eho rozhran´ı
beacon found Pokud n´avˇstˇevn´ık nalezene maj´ak, poˇsle syst´emu Tagiee notifikaci informuj´ıc´ı o tomto n´alezu, t´eˇz pro budouc´ı statistiky n´avˇstˇevnosti maj´ak˚ u.
get review Vr´at´ı seznam posledn´ıch hodnocen´ı instituce. D´ıky poˇzadavku get institutionby uiid mobiln´ı zaˇr´ızen´ı zjist´ı poˇcet hodnocen´ı a na z´akladˇe tohoto poˇctu si m˚ uˇze aplikace sama urˇcit, kolik recenz´ı chce vr´atit a hodnocen´ı str´ankovat.
add review Umoˇzn´ı pˇrid´an´ı hodnocen´ı uˇzivatelem. Jeden uˇzivatel m˚ uˇze pˇridat pouze jedno hodnocen´ı k dan´e instituci.
admin Na z´akladˇe pˇrihlaˇsovac´ıch u ´daj˚ u poskytne zamˇestnanci instituce informace o sv´ ych pˇridan´ ych instituc´ıch a maj´ac´ıch.
add location Pˇrihl´aˇsen´ı uˇzivatel´e m˚ uˇzou ke sv´ ym instituc´ım pˇridat lokace, na kter´ ych se nach´azej´ı. Pˇrid´an´ı nen´ı povoleno z d˚ uvodu bezpeˇcnosti, pokud nejsou pˇred´any pˇrihlaˇsovac´ı u ´daje spr´avce instituce.
4.5
Implementace webov´ eho rozhran´ı
K implementaci webov´eho prostˇred´ı syst´emu Tagiee jsem vyuˇzil PHP a framework Nette. Webov´e prostˇred´ı bude slouˇzit zamˇestnanc˚ um instituc´ı pro vytv´aˇren´ı a editov´an´ı obsahu o jejich instituci.
33
Realizace syst´emu
4.5.1
Implementace webov´eho rozhran´ı
Struktura
Struktura webov´e ˇc´asti (Obr. 4.3) Tagiee je rozdˇelena na 2 funkˇcn´ı moduly. Prvn´ım modulem je defaultn´ı prostˇred´ı pro pˇrihl´aˇsen´ı, registraci, pˇrid´an´ı instituce a druh´ y modulem je samotn´e editov´an´ı obsahu instituce. Prvn´ı modul se nach´az´ı ve sloˇzce app, respektive jeho presentery a ˇsablony ve sloˇzk´ach app/presenters a app/templates. Druh´ y modul je v podsloˇzce app/InstitutionModule a presentery, ˇsablony ve sloˇzk´ach app/InstitutionModule/presenter a app/InstitutionModule/templates.
Obr´azek 4.3: Struktura webov´eho rozhran´ı. Datov´a vrstva je spoleˇcn´a pro oba moduly a je um´ıstˇena ve sloˇzce app/model. O datov´e vrstvˇe (viz 4.5.2). Ve sloˇzce www/ jsou um´ıstˇeny CSS styly, Javascript, obr´azky souvisej´ıc´ı s grafikou webu a podp˚ urn´e soubory knihoven.
34
Realizace syst´emu
4.5.2
Implementace webov´eho rozhran´ı
Datab´ azov´ a vrstva
Z´akladem datab´azov´e vrstvy je tˇr´ıda Repository. Konstruktorem se pˇred´a instance Nette/Database/Connection, kter´a umoˇzn ˇuje pˇripojen´ı k datab´azi. Konkr´etn´ı pˇripojen´ı je definovan´e ve sloˇzce app/config/config.neon n´asleduj´ıc´ım zp˚ usobem: database : dsn : ’ mysql : host =127.0.0.1; dbname = tagieecom1 ’ user : ’ tagiee . com ’ password : ’ XXXXXX ’
Tˇr´ıda Repository m´a d˚ uleˇzitou metodu getTable(). Tato metoda na z´akladˇe jm´ena tˇr´ıdy vybere tabulku, ze kter´e bude ˇc´ıst z´aznamy. Pravidlo pro jmenov´an´ı tˇr´ıd je jm´eno tabulky zaˇc´ınaj´ıc´ı velik´ ym p´ısmenem n´asleduj´ıc´ı slovem Repository. Pokud tedy chceme vr´atit vˇsechny uˇzivatele syst´emu Tagiee, zavol´ame metodu getTable() nad instanc´ı tˇr´ıdy UserRepository. Tˇr´ıda UserRepository je definovan´a n´asledovnˇe. class UserRepository extends Repository { }
Tˇr´ıda UserRepository je bez metod, protoˇze si plnˇe vystaˇc´ı s tˇr´ıdami sv´eho rodiˇce. Metoda getTable() na z´akladˇe n´azvu tˇr´ıdy bude vyb´ırat z´aznamy z tabulky user. Pokud bychom si nevystaˇcili s metodami rodiˇce, nen´ı probl´em rozˇs´ıˇrit tuto tˇr´ıdu o sv´e metody. Rozdˇelen´ı na podtˇr´ıdy pˇrid´av´a na pˇrehlednosti datov´e vrstvy a jasnˇe definuje i jej´ı chov´an´ı. Tˇr´ıda Repository obsahuje tyto metody pro pr´aci s tabulkami: • getTable() - Vr´at´ı objekt reprezentuj´ıc´ı datab´azovou tabulku. Pokud jinak nespecifikujeme v´ ybˇer, vrac´ı vˇsechny z´aznamy v tabulce jako Nette/Database/Table/Selection, j´ımˇz se d´a proch´azet jako polem. • findBy(array $condition) - Najde specifick´ y z´aznam v tabulce, parametrem je podm´ınka jako asociativn´ı pole, tedy n´azev sloupeˇcku => hodnota. Vrac´ı se jako objekt Nette/Database/Table/Selection. • insert(array $values) - Vloˇz´ı nov´ y z´aznam do tabulky, parametrem je opˇet asociativn´ı pole n´azev sloupeˇcku => hodnota. 35
Realizace syst´emu
Implementace webov´eho rozhran´ı
• update(array $condition, array $values) - Aktualizuje z´aznam v tabulce. Parametrem jsou dvˇe asociativn´ı pole. Prvn´ı je podm´ınka, jak´ y z´aznam se bude aktualizovat a druh´ ym parametrem jsou hodnoty, kter´e se maj´ı aktualizovat. • delete(array $condition) - Smaˇze z´aznam z tabulky. Parametrem je podm´ınka, kter´a vybere z´aznam, jenˇz se smaˇze. • exec($query, $data) - Vykon´a nad datab´az´ı SQL pˇr´ıkaz. Prvn´ım parametrem je pˇr´ıkaz obsahuj´ıc´ı jeden nebo v´ıce znak˚ u ?“ a druh´ ym ” parametrem je pole hodnot, kter´e se dosad´ı m´ısto otazn´ık˚ u. Aby byly tˇr´ıdy model˚ u jednoduˇseji pouˇziteln´e, zaregistruj´ı se jako sluˇzby, tud´ıˇz se presenter nemus´ı starat o jejich vytv´aˇren´ı. Jako sluˇzby se zaregistruj´ı do souboru app/config/config.neon n´asleduj´ıc´ım zp˚ usobem: services : userRepository : DB \ UserRepository ... institutionRepository : DB \ InstitutionRepository
N´azev na lev´e stranˇe pˇred dvojteˇckou definuje instanci UserRepository jako sluˇzbu, kterou je moˇzn´e pouˇz´ıt kdykoliv v presenterech. Prav´a strana urˇcuje, jak´a instance bude vytvoˇrena. Objekt UserRepository dˇed´ıc´ı od tˇr´ıdy Repository vˇsak vyˇzaduje pˇri vytvoˇren´ı instance v konstruktoru instanci tˇr´ıdy Connection. Avˇsak Nette m´a funkci Auto-Wiring, kter´a pozn´a, ˇze je tˇreba instance Connection a tuto instanci za program´atora vytvoˇr´ı. Pro u ´plnost bude uk´az´ano pouˇzit´ı tˇechto modelov´ ych tˇr´ıd v presenterech: class RegisterPresenter extends BasePresenter { /* * @var DB \ UserRepository * */ private $userRepository ;
protected function startup () { parent :: startup (); // Ziskani instance DB \ UserRepository $this - > userRepository = $this - > context - > userRepository ; }
public function registerFormSucceeded ( $form ) {
36
Realizace syst´emu
Implementace webov´eho rozhran´ı
.... $data = array ( ’ username ’ = > $values - > username , ’ password ’ = > Authenticator :: calculateHash ( $values - > password ) , ..... ’ post_code ’ = > $values - > post_code ); // Pridani uzivatele do tabulky $this - > userRepository - > insert ( $data ); }
}
4.5.3
Spr´ ava uˇ zivatel˚ u a instituc´ı
Po pˇristoupen´ı na adresu http://tagiee.com se zobraz´ı u ´vodn´ı pˇrihlaˇsovac´ı obrazovka s informacemi o sluˇzbˇe Tagiee, k ˇcemu slouˇz´ı a pro koho je urˇcena. Pˇrihl´asit se p˚ ujde pod u ´ˇctem, kter´ y si zamˇestnanec vytvoˇr´ı. Na u ´vodn´ı str´ance je tak´e odkaz k registraci nov´eho uˇzivatele. Na cel´em webu je dostupn´a horn´ı liˇsta, spr´ava pˇrihl´aˇsen´eho uˇzivatele a moˇznost jeho odhl´aˇsen´ı. Na adrese http://tagiee.com/register/ je registraˇcn´ı formul´aˇr nov´eho uˇzivatele. Po uˇzivateli je poˇzadov´ano kromˇe uˇzivatelsk´eho jm´ena a hesla detailn´ı kontaktn´ı u ´daje. Detailn´ı informace jsou potˇreba z d˚ uvodu, aby se neregistroval kaˇzd´ y a aby obsah sluˇzby Tagiee byl hodnotn´ y. K pˇrihl´aˇsen´ı se vyuˇz´ıv´a tˇr´ıda Authenticator a jej´ı statick´a metoda calculateHash($heslo, $s˚ ul = null), kter´a pomoc´ı PHP funkce crypt($heslo, $s˚ ul = null) vytvoˇr´ı z hesla osolen´ y“ zak´odovan´ y ˇretˇezec, kter´ y se pˇri pˇrihl´aˇsen´ı ” porovn´av´a se zadan´ ym heslem. Pro vytvoˇren´ı se zak´oduje ˇretˇezec pomoc´ı t´eto metody: /* Zakodovani hesla */ Authenticator :: calculateHash ( $form - > values - > password );
Pˇri pˇrihl´aˇsen´ı se pak porovn´a zak´odovan´ y ˇretˇezec z datab´aze s touto metodou. Metoda pak vr´at´ı u ´plnˇe stejn´ y zak´odovan´ y ˇretˇezec. T´ım dojde k porovn´an´ı a ovˇeˇren´ı, ˇze se heslo shoduje. /* Heslo k overeni . */ $password = $form - > values - > password ;
37
Realizace syst´emu
Implementace webov´eho rozhran´ı
/* Ziskani zakodovaneho retezce z databaze . */ $row = $this - > database - > table ( ’ user ’) -> where ( ’ username ’ , $username ) - > fetch (); if ( $row - > password !== $this - > calculateHash ( $password , $row - > password )) { /* Hesla se neshoduji . */ }
Pokud je uˇzivatel pˇrihl´aˇsen, na u ´vodn´ı str´ance se mu zobraz´ı seznam jeho instituc´ı a moˇznost jejich pˇrid´an´ı. Pro pˇrid´an´ı instituce je nutn´e zadat jej´ı n´azev, unik´atn´ı identifik´ator a informace o um´ıstˇen´ı. Pokud chce zamˇestnanec smazat instituci, je nutn´e kontaktovat spr´avce syst´emu Tagiee z bezpeˇcnostn´ıch d˚ uvod˚ u a nechtˇen´eho smaz´an´ı instituce. V pˇr´ıpadˇe potˇreby je moˇzn´e deaktivovat instituci pˇri jej´ım editov´an´ı (viz 4.5.4). Z u ´vodn´ı obrazovky lze vybr´an´ım instituce pˇrej´ıt k jej´ı editaci.
4.5.4
Vytv´ aˇ ren´ı a editov´ an´ı obsahu instituc´ı
Editace instituce je dostupn´a na adrese http://tagiee.com/institution/. Editov´an´ı instituce je jen pro pˇrihl´aˇsen´e uˇzivatele. Kaˇzd´ y uˇzivatel si m˚ uˇze editovat jen svoje vytvoˇren´e instituce. Editov´an´ı instituce je rozdˇeleno na nˇekolik ˇca´st´ı, kter´e maj´ı svou specifickou adresu a ke kter´ ym se lze dostat z lev´e postrann´ı nab´ıdky.
Informace a statistiky Tato str´anka se zobraz´ı pod adresou http://tagiee.com/institution/. Lze zde aktivovat / deaktivovat instituci. Deaktivovan´a instituce nebude dostupn´a skrze klientskou aplikaci. Novˇe vytvoˇren´a instituce nen´ı aktivovan´a a lze ji aktivovat pouze, pokud obsahuje n´azev, popisek, logo instituce, kontaktn´ı telefon a email, otev´ırac´ı dobu, cen´ık, zemˇepisn´e souˇradnice a obsahuje alespoˇ n jeden aktivn´ı maj´ak. Na str´ance lze nal´ezt r˚ uzn´e statistiky t´ ykaj´ıc´ı se instituce a jej´ıch maj´ak˚ u, poˇcet pˇr´ıstup˚ u, nalezen´ı maj´ak˚ u dle technologi´ı a pod´ıl zaˇr´ızen´ı s operaˇcn´ım syst´em a jejich jednotliv´ ych verz´ı. K zobrazen´ı jsou vyuˇzity tabulky a ko38
Realizace syst´emu
Implementace webov´eho rozhran´ı
l´aˇcov´e grafy pomoc´ı Google Charts (viz 4.2.5). V pˇr´ıpadˇe statistik jsou dotazy nad datab´az´ı sestavov´any ruˇcnˇe a kv˚ uli rychlosti se nevyuˇz´ıv´a NotORM Nette. ´ Uprava instituce ´ Uprava u ´daj˚ u o instituci vyuˇz´ıv´a adresu http://tagiee.com/institution//edit/. Na u ´pravu se lze dostat i z lev´e postrann´ı nab´ıdky. Vˇsechny informace o instituci jsou mˇeniteln´e kromˇe unik´atn´ıho identifik´atoru uiid instituce. Logo se nahr´av´a skrze knihovnu Uploadify (viz 4.2.8). Logo mus´ı b´ yt obr´azek ve form´atu PNG, JPG ˇci JPEG, mus´ı m´ıt minim´aln´ı rozliˇsen´ı 250x250px a velikost menˇs´ı neˇz 300 Kb. Minim´aln´ı rozliˇsen´ı je pro zachov´an´ı kvality obsahu. Omezen´ı velikosti obr´azku je z d˚ uvodu sn´ıˇzen´ı pˇrenosu dat mobiln´ı datovou s´ıt´ı. Nahran´ y obr´azek je oˇr´ıznut do ˇctverce. Po nahr´an´ı je moˇzno tento obr´azek upravit pomoc´ı knihovny Jcrop (viz 4.2.9) a zvolit si jinou ˇctvercovou v´ yseˇc v obr´azku. Editace u ´daj˚ u o instituci se prov´ad´ı bez nutnosti znovu naˇcten´ı str´anky.
Pˇ rid´ an´ı, u ´ prava maj´ ak˚ u Pˇrid´an´ı maj´ak˚ u m´a adresu http://tagiee.com/institution//beacons. Zde je um´ıstˇen seznam maj´ak˚ u, jejich pˇrehled a je moˇzno kdykoliv maj´aky smazat. Pro pˇrid´an´ı staˇc´ı n´azev maj´aku. Novˇe pˇridan´ y maj´ak je neaktivn´ı. Nov´emu maj´aku se vygeneruje unik´atn´ı identifik´ator UBID, kter´ y se skl´ad´a z unik´atn´ıho identifik´atoru instituce a n´azvu maj´aku. D´ale se nov´emu maj´aku vygeneruje n´ahodn´ y unik´atn´ı 3-m´ıstn´ y kl´ıˇc, jenˇz je unik´atn´ı u vˇsech maj´ak˚ uv instituci. Pomoc´ı tohoto 3-m´ıstn´eho kl´ıˇce lze pak tak´e nal´ezt maj´ak klientskou aplikac´ı. ´ Uprava maj´ak˚ u m´a vlastn´ı str´anku, na maj´ak se lze dostat i pomoc´ı adresy http://tagiee.com/institution//beacons//. Pro u ´pravu maj´ak˚ u nen´ı nutnost znovu naˇcten´ı str´anky, komunikace prob´ıh´a AJAXov´ ymi poˇzadavky. Neaktivovan´ y maj´ak lze aktivovat pouze, pokud je vyplnˇeno jm´eno, popisek a vytvoˇren obsah, kter´ y se zobraz´ı po jeho nalezen´ı. Nespln´ı-li se tyto podm´ınky, formul´aˇr pro aktivaci maj´aku nebude zobrazen. Obsah maj´aku podporuje pˇrid´an´ı text˚ u, odkaz˚ u, obr´azk˚ u a jednoho You39
Realizace syst´emu
Implementace webov´eho rozhran´ı
tube videa. Obsah maj´ak˚ u je uloˇzen do datab´aze jako JSON pole a je omezen velikost´ı sloupeˇcku content v tabulce beacon, coˇz je 15000 znak˚ u. Pˇrid´an´ı textu a odkazu se prov´ad´ı pˇretaˇzen´ım elementu do kontejneru, ve kter´em se m˚ uˇzou libovolnˇe ˇradit. K tomu se pouˇz´ıv´a knihovna JQuery, respektive JQuery UI. Nad kontejneru je plugin .sortable(), kter´ y ˇrad´ı elementy v kontejneru a nad elementy je plugin .draggable(), kter´ y umoˇzn´ı jejich pˇretaˇzen´ı do kontejneru. /* Plugin pro text a odkaz */ $ ( " # text , # href " ). draggable ({ connectToSortable : " # sortable " , helper : " clone " , revert : " invalid " }); /* Plugin pro kontainer */ $ ( " # sortable " ). sortable ();
Po kliknut´ı na elementy v kontejneru se zobraz´ı dialogov´e okno, kter´e umoˇzn´ı jejich editaci. Pro zobrazen´ı dialogu se vyuˇz´ıv´a plugin dialog z knihovny JQuery UI. Elementy pro pˇrid´an´ı obr´azk˚ u a videa se nevkl´adaj´ı do kontejneru. Jsou samostatn´e a umoˇzn ˇuj´ı pˇrid´an´ı aˇz deseti obr´azk˚ u a jednoho videa. Poloha maj´ak˚ u se ud´av´a pomoc´ı lokac´ı, kter´e se definuj´ı v samotn´e sekci.
Lokace Lokace jsou dostupn´e na adrese http://tagiee.com/institution//location. Lokace se pouˇz´ıvaj´ı pro definov´an´ı polohy maj´ak˚ u pˇri jejich u ´pravˇe. Lokace je zobrazena pomoc´ı komponenty LocationControl. Jednotliv´e zobrazen´e komponenty LocationControl mus´ı m´ıt vlastn´ı instanci a b´ yt navz´ajem nez´avisl´e. K tomu se vyuˇz´ıv´a tˇr´ıda Multiplier, kter´a pro kaˇzdou komponentu vytvoˇr´ı vlastn´ı instanci. D´ıky t´eto tˇr´ıdˇe je moˇzn´e m´ıt v´ıce nez´avisl´ ych komponent na jedn´e str´ance.
40
Realizace syst´emu
Implementace webov´eho rozhran´ı
Nahr´ an´ı obr´ azk˚ u Obr´azky jsou na adrese http://tagiee.com/institution//resource/ a vkl´adaj´ı se pomoc´ı knihovny Uploadify (viz 4.2.8). Obr´azek mus´ı m´ıt minim´aln´ı rozliˇsen´ı 250x250px a velikost menˇs´ı neˇz 2 Mb. Velikost je omezena kv˚ uli hardwarovˇe slabˇs´ım mobiln´ım zaˇr´ızen´ı (nˇekter´a zaˇr´ızen´ı se syst´emem Android nedok´aˇz´ı zobrazit obr´azek vˇetˇs´ı neˇz 2 Mb).
41
5 Klientsk´a ˇc´ast Klientsk´a ˇc´ast byla implementov´ana pro platformu iOS (viz 5.1). V t´eto kapitole vych´az´ım ze sv´e bakal´aˇrsk´e pr´ace, kde jsem se zab´ yval v´ yvojem aplikac´ı pro platformu iOS v jazyce Objective-C 2.0 a popisoval vlastnosti jazyka a principy v´ yvoje mobiln´ıch aplikac´ı. Realizace klientsk´e ˇca´sti Tagiee byla vyv´ıjena na operaˇcn´ım syst´emu OS X 10.8.3 ve v´ yvojov´em prostˇred´ı Xcode 4.6.1. a bude dostupn´a pro platformu iOS 6 a novˇejˇs´ı. Minim´aln´ı verze 6.0 byla vybr´ana d´ıky novink´am ve v´ yvoji aplikac´ı a tomu, ˇze 81,2% zaˇr´ızen´ı iOS bˇeˇz´ı ve verzi 6 a v´ıce (viz 5.2).
5.1
Platforma iOS
Mobiln´ı operaˇcn´ı syst´em iOS byl vytvoˇren firmou Apple Inc. P˚ uvodnˇe byl urˇcen pro mobiln´ı zaˇr´ızen´ı iPhone. Nyn´ı je vˇsak operaˇcn´ı syst´em vyuˇz´ıv´an i v zaˇr´ızen´ıch jako iPod Touch, iPad a Apple TV. [ios()] Syst´em iOS je odvozen z operaˇcn´ıho syst´emu OS X. Tyto dva operaˇcn´ı syst´emy spolu sd´ılej´ı OS X kernel, BSD sokety pro s´ıt’ovou komunikaci, jazyk Objective-C a C/C++ kompilery. OS X pro tvorbu grafick´ ych interaktivn´ıch aplikac´ı vyuˇz´ıv´a framework Cocoa, kter´ y se skl´ad´a z knihoven a vysokou ´rovˇ nov´eho API. Aplikace, vytvoˇren´e nad t´ımto frameworkem, z´ıskaj´ı vzhled a funkˇcnost nativn´ıch aplikac´ı syst´emu OS X. Cocoa vyuˇz´ıv´a architekturu MVC1 . Syst´em iOS vyuˇz´ıv´a framework Cocoa Touch, kter´ y je uzp˚ usoben pro dotykov´a zaˇr´ızen´ı. [ios()]
5.2
Pod´ıl verz´ı iOS na trhu
Dle v´ yzkumu spoleˇcnosti 14 Oranges Software Inc. je pod´ıl zaˇr´ızen´ı iOS 6 dominantn´ı na trhu (viz Obr. 5.1) k 14. u ´noru 2013. [ora()] 1
Model-View-Controller rozdˇeluje datovou vrstvu, ˇr´ıd´ıc´ı logiku a uˇzivatelsk´e rozhran´ı do tˇr´ı nez´ avisl´ ych komponent.
42
Klientsk´a ˇc´ast
Pouˇzit´e knihovny
Obr´azek 5.1: Pod´ıl verz´ı iOS na trhu.
5.3
Pouˇ zit´ e knihovny
Vˇsechny uveden´e knihovny jsou volnˇe dostupn´e a ˇsiˇriteln´e. Na knihovn´ach je uk´az´an zp˚ usob jejich z´akladn´ıho pouˇzit´ı. V implementaˇcn´ı ˇca´sti aplikace (viz 5.4) je pops´ana jejich u ´prava pro pouˇzit´ı v aplikaci.
5.3.1
AFNetworking
AFNetworking je s´ıt’ov´a knihovna pro iOS a OS X postaven´a na frameworku Foundation, tedy hlavnˇe na NSURLConnection a NSOperation. Knihovna dovoluje pos´ılat HTTP poˇzadavky nebo stahovat obr´azky pˇr´ıpadnˇe soubory. T´emˇeˇr vˇsechny metody knihovny vyuˇz´ıvaj´ı bloky k´od˚ u, kter´e se zavolaj´ı pˇri u ´spˇeˇsn´em / ne´ uspˇeˇsn´em HTTP poˇzadavku. Knihovna umoˇzn ˇuje vytvoˇren´ı HTTP klienta, kter´ y m˚ uˇze b´ yt nastaven pro komunikaci s webov´ ymi sluˇzbami. HTTP klient vyuˇz´ıv´a frontu poˇzadavk˚ u, tud´ıˇz napˇr. pˇri stahov´an´ı galerie obr´azk˚ u se obr´azky st´ahnou postupnˇe a nevyt´ıˇz´ı tolik datovou linku. Na n´asleduj´ıc´ım pˇr´ıkladu je pouˇzit´ı knihovny AFNetworking pro komunikaci s webov´ ym API, kter´e vr´at´ı odpovˇed’ ve formˇe JSON struktury. [afn()] /* Adresa pro komunikaci s API */ NSURL * url = [ NSURL URLWithString : @ " https :// api . net / posts /0/ " ];
43
Klientsk´a ˇc´ast
Pouˇzit´e knihovny
/* Vytvoreni HTTP pozadavku . */ NSURLRequest * request = [ NSURLRequest requestWithURL : url ]; AFJSONRequestOperation * operation = [ AFJSONRequestOperation JSONRequestOperationWithRequest : request success :^( NSURLRequest * request , NSHTTPURLResponse * response , id JSON ) { /* Komunikace uspesna . */ } failure : nil ]; /* Zahajeni komunikace . */ [ operation start ];
5.3.2
ZBarSDK
ZBarSDK je volnˇe ˇsiˇriteln´a knihovna, kter´a umoˇzn ˇuje v re´aln´em ˇcase ˇcten´ı k´od˚ u EAN-13/UPC-A, UPC-E, EAN-8, Code 128, Code 39, Interleaved 2 of 5 a QR k´od˚ u. Pro pouˇzit´ı staˇc´ı implementovat metody protokolu ZBarReaderDelegate a vytvoˇrit instanci ZBarReaderViewController. Pokud je vˇse pˇripraven´e, je moˇzn´e zobrazit Zbar ˇcteˇcku napˇr´ıklad jako mod´aln´ı okno. [zbd()]
5.3.3
OpenUDID
Od verze iOS 5.0 Apple zak´azal pouˇzit´ı syst´emov´eho unik´atn´ıho identifik´atoru zaˇr´ızen´ı takzvan´e UDID. Vˇsechny nov´e aplikace vyuˇz´ıvaj´ıc´ı tohoto identifik´atoru budou zam´ıtnuty k publikov´an´ı do obchodu App Store. St´avaj´ıc´ı aplikace vyuˇz´ıvaj´ıc´ı UDID budou do konce kvˇetna 2013 vyˇrazeny z obchodu. Proto vznikla voln´a implementace UDID, kter´a m˚ uˇze unik´atnˇe identifikovat zaˇr´ızen´ı napˇr´ıˇc mobiln´ımi platformami. K identifikaci se vyuˇz´ıv´a s´eriov´e ˇc´ıslo procesoru a MAC adresa WiFi adapt´eru. Pouˇzit´ı je n´asleduj´ıc´ı: # include " OpenUDID . h " NSString * openUDID = [ OpenUDID value ];
Statick´a metoda value vrac´ı unik´atn´ı ˇretˇezec zaˇr´ızen´ı o d´elce 40ti znak˚ u. Pˇr´ıklad takov´eho ˇretˇezce je 1c2cf41ab0e5c4a83702ee0c7e77c11d2cdfb3d6“. ” [ope()]
44
Klientsk´a ˇc´ast
5.3.4
Pouˇzit´e knihovny
MWPhotoBrowser
MWPhotoBrowser (viz Obr. 5.2) je voln´a implementace nativn´ı obr´azkov´e galerie syst´emu iOS. Snaha knihovny je b´ yt pˇresnou kopi´ı nativn´ı galerie. Knihovna zvl´ad´a cachov´an´ı a stahov´an´ı obr´azk˚ u v pr˚ ubˇehu prohl´ıˇzen´ı. [mwp()]
Obr´azek 5.2: Uk´azka MWPhoto galerie. Implementace je pomoc´ı mod´aln´ıho okna nebo pomoc´ı navigaˇcn´ıho controlleru.
5.3.5
DYRateView
DYRateView je univerz´aln´ı komponenta, kter´a zobrazuje hodnocen´ı ve formˇe pˇeti hvˇezdiˇcek. Komponenta m˚ uˇze b´ yt i editovateln´a a slouˇzit jako zdroj hodnocen´ı od uˇzivatel˚ u aplikace. [dyr()] DYRateView je objekt UIView, pouˇzit´ı je tedy n´asleduj´ıc´ı: DYRateView * rateView = [[ DYRateView alloc ] initWithFrame : frame ]; rateView . rate = 4.7; rateView . alignment = RateViewAlignmentRight ; [ self . view addSubview : rateView ];
5.3.6
EGOTableViewPullRefresh
EGOTableViewPullRefresh (viz Obr. 5.3) je rozˇs´ıˇren´ı UITableView o moˇznost st´ahnout prstem tabulku a znovu naˇc´ıst jej´ı obsah. EGOTableView45
Klientsk´a ˇc´ast
Pouˇzit´e knihovny
PullRefresh se pˇrid´a do tabulky jako jej´ı hlaviˇcka a implementov´an´ım scrollView protokolu tabulky se vloˇz´ı funkˇcnost. [ego()]
Obr´azek 5.3: Znovu naˇcten´ı tabulky st´ahnut´ım prstem.
5.3.7
ECGraph
ECGraph je knihovna, kter´a vykresl´ı v jak´emkoliv UIView graf. Knihovna podporuje kreslen´ı sloupcov´ ych a spojnicov´ ych graf˚ u. Na n´asleduj´ıc´ım pˇr´ıkladu je implementace sloupcov´eho grafu. [ecg()] CGContextRef _context = UIGraphicsGetCurrentContext (); ECGraph * graph = [[ ECGraph alloc ] initWithFrame : CGRectMake (10 ,10 , 480 , 320) withContext : _context isPortrait : NO ]; NSArray * items = [[ NSArray alloc ] initWithObjects : item1 , item2 , nil ]; [ graph setXaxisTitle : @ " name " ]; [ graph setYaxisTitle : @ " Percentage " ]; [ graph setGraphicTitle : @ " Histogram " ]; [ graph setDelegate : self ]; [ graph drawHistogramWithItems : items lineWidth :2 color :[ UIColor blackColor ]];
Pro vykreslen´ı se vyuˇz´ıv´a funkce UIGraphicsGetCurrentContext(), kter´a slouˇz´ı pro kreslen´ı uvnitˇr UIView. Pˇredpokladem je vol´an´ı t´eto funkce v me46
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
todˇe drawRect() kaˇzd´eho UIView, kter´ y chce implementovat graf.
5.4
Implementace klientsk´ e aplikace
Klientsk´a aplikace byla implementov´ana na z´akladˇe n´avrhu (viz 3.3.2).
5.4.1
Komunikace se syst´ emem Tagiee
Ke komunikaci s klientsk´ ym API byla vyuˇzita knihovna AFNetworking (viz 5.3.1). Z´akladem je spoleˇcn´ y HTTP klient, kter´ y je singletonem a m´a spoleˇcnou instanci pro komunikaci s API v cel´e aplikaci. Klient je jiˇz pˇrednastaven pro komunikaci pomoc´ı JSON struktur. Komunikace nad t´ımto klientem se prov´ad´ı postupnˇe a tud´ıˇz nedoch´az´ı k zahlcen´ı s´ıtˇe. static NSString * const kAPIURL = @ " http :// api . tagiee . com " ; @implementation TagieeClient + ( TagieeClient *) sharedClient { static TagieeClient * _sharedClient = nil ; static dispatch_once_t onceToken ; dispatch_once (& onceToken , ^{ _sharedClient = [[ TagieeClient alloc ] initWithBaseURL : [ NSURL URLWithString : kAPIURL ]]; }); return _sharedClient ; } - ( id ) initWithBaseURL :( NSURL *) url { self = [ super initWithBaseURL : url ]; if (! self ) { return nil ; } // Response type JSON [ self registerHTTPOperationClass : [ AFJSONRequestOperation class ]]; // Request type JSON [ self setParameterEncoding : AFJSONParameterEncoding ];
47
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
// Accept HTTP Header ; [ self setDefaultHeader : @ " Accept " value : @ " application / json " ]; return self ; } @end
Takto pˇrednastaven´ y klient je jiˇz schopn´ y komunikovat s Tagiee Web API (viz 4.4) pomoc´ı definovan´ ych poˇzadavk˚ u. Pouˇzit´ı klienta pro pˇr´ıstup k instituci vypad´a n´asledovnˇe: NSDictionary * jsonParams = @ { @ " type " : @ " get_institution_by_uiid " , @ " uiid " : uiid , @ " udid " :[ OpenUDID value ] , @ " platform " : @ " ios " , @ " version " :[[ UIDevice currentDevice ] systemVersion ]}; [[ TagieeClient sharedClient ] postPath : @ " " parameters : jsonParams success :^( AFHTTPRequestOperation * operation , id JSON ) { NSDictionary * response = JSON ; // Komunikace uspesna , zpracovani instituce } failure :^( AFHTTPRequestOperation * operation , NSError * error ) { // Doslo k chybe pro komunikaci }
Poˇzadavek i odpovˇed’ jsou ve formˇe objektu NSDictionary, tedy asociativn´ıho pole. Pro zjednoduˇsen´ı jsou jednotliv´e typy poˇzadavk˚ u Web API ve vlastn´ıch tˇr´ıd´ach, kter´e definuj´ı protokolov´e metody, kter´e se zavolaj´ı v pˇr´ıpadˇe u ´spˇechu ˇci ne´ uspˇechu. Vˇsechny typy poˇzadavk˚ u syst´emu Tagiee byly implementov´any.
5.4.2
Datab´ azov´ a vrstva
Framework Core Data Framework Core Data je persistentn´ı u ´loˇziˇstˇe, kter´e se definuje entitami a vazbami mezi nimi. Framework m´a v sobˇe podporu funkc´ı pro editov´an´ı textu, lazy loading2 , vyhled´av´an´ı v datech, migraci dat a spr´avu vazeb mezi 2
N´ avrhov´ y vzor naˇc´ıt´ an´ı objekt˚ u z datab´aze aˇz kdyˇz jsou potˇreba. Zvyˇsuje se v´ ykon ˇcten´ı dat a sniˇzuj´ı se pamˇet’ov´e n´ aroky.
48
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
entitami. Data se mohou uloˇzit do souboru XML nebo jako SQLite soubor.
Datov´ y model Datov´ y model v aplikaci (viz Obr. 5.4) byl vytvoˇren pomoc´ı editoru Xcode. Model v sobˇe ukl´ad´a informace o instituci a jej´ıch maj´ac´ıch. St´ahnut´e obr´azky jsou tak´e uloˇzeny v datab´azi a to jako BLOBs3 data. Apple uv´ad´ı, ˇze s ukl´ad´an´ım obr´azk˚ u do Core Data se mus´ı opatrnˇe. D´a se dos´ahnout dobr´ ych v´ ykonnostn´ıch v´ ysledk˚ u s daty do 10 MB, s t´ım ˇze BLOBs budou uloˇzeny v samotn´e entitˇe a bude na nˇe vazba. T´ım, ˇze Core Data pouˇz´ıv´a lazy loading, bude obr´azek naˇcten aˇz v pˇr´ıpadˇe jeho potˇreby.
Obr´azek 5.4: Datov´ y model Core Data v aplikaci. 3
Binary Large OBjects - Velik´ a nadmˇern´a data napˇr´ıklad obr´azky nebo zvuky.
49
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
Pouˇ zit´ı Core Data v aplikaci V aplikaci je pouˇzito u ´loˇziˇstˇe SQLite pro Core Data. Pomoc´ı Xcode se vygeneruje objektov´ y model, kter´ y odpov´ıd´a datov´emu modelu. Kaˇzd´a entita bude reprezentovan´a tˇr´ıdou oddˇedˇenou od NSManagedObject. Vazby mezi entitami budou propojeny pomoc´ı pole, pokud se jedn´a o vazbu 1:N nebo o referenci na jinou tˇr´ıdu vazby 1:1. Nejprve se nahraje objektov´ y model do pamˇeti. - ( NSManagedObjectModel *) managedObjectModel { if ( _managedObjectModel != nil ) { return _managedObjectModel ; } _managedObjectModel = [ NSManagedObjectModel mergedModelFromBundles : nil ]; return _managedObjectModel ; }
Pokud je naˇcten´ y objektov´ y model, z´ısk´a se koordin´ator na Core Data u ´loˇziˇstˇe. V tomto pˇr´ıpadˇe na soubor TagieeModel.sqlite. Koordin´ator slouˇz´ı jako prostˇredn´ık mezi objektov´ ym modelem a t´ım datov´ ym, tud´ıˇz mapuje objekty na jednotliv´e entity. - ( NSPersistentStoreCoordinator *) persistentStoreCoordinator { if ( _persistentStoreCoordinator != nil ) { return _persistentStoreCoordinator ; } NSURL * storeURL = [[ self applicationDocumentsDirectory ] URLByAppendingPathComponent : @ " TagieeModel . sqlite " ]; NSError * error = nil ; _persistentStoreCoordinator = [[ NSPersistentStoreCoordinator alloc ] initWithManagedObjectModel :[ self managedObjectModel ]]; if (![ _persistentStoreCoordinator addPersistentStoreWithType : NSSQLiteStoreType configuration : nil URL : storeURL options : nil error :& error ]) { // Nelze pouzit model } return _persistentStoreCoordinator ; }
Pro koordin´ator je nutn´e vytvoˇrit prostor nebo-li kontext, ve kter´em se 50
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
bude pracovat s daty (ˇc´ıst je a mˇenit). To zajist´ı objekt NSManagedObjectContext, kter´emu se pˇred´a koordin´ator, podle kter´eho bude vˇedˇet, jak´ y typ dat si m´a uchovat a jak´e informace poskytnout. - ( NSManagedObjectContext *) managedObjectContext { if ( _managedObjectContext != nil ) { return _managedObjectContext ; } NSPersistentStoreCoordinator * coordinator = [ self persistentStoreCoordinator ]; if ( coordinator != nil ) { _managedObjectContext = [[ NSManagedObjectContext alloc ] init ]; [ _managedObjectContext setPersistentStoreCoordinator : coordinator ]; } return _managedObjectContext ; }
ˇ ı dat z kontextu se pak prov´ad´ı pomoc´ı objektu NSFetchRequest, Cten´ kter´ y na z´akladˇe form´aln´ıho popisu objektu NSEntityDescriptor vr´at´ı napˇr´ıklad vˇsechny instituce uloˇzen´e v Core Data. NSFetchRequest * fetchRequest = [[ NSFetchRequest alloc ] init ]; NSEntityDescription * entity = [ NSEntityDescription entityForName : @ " InstitutionModel " inManagedObjectContext : context ]; [ fetchRequest setEntity : entity ]; NSError * error ; for ( InstitutionModel * institution in [ context executeFetchRequest : fetchRequest error :& error ]){ // Instituce }
T´ımto se dostane objekt InstitutionModel, ve kter´em jsou data o instituci. Tyto data se m˚ uˇzou mˇenit a n´aslednˇe pak uloˇzit. Uloˇzen´ı se provede metodou save: nad kontextem. Aby se uloˇzen´ı projevilo, je nutn´e aby se jednalo o stejnou instanci tˇr´ıdy InstitutionModel, jak´a byla vr´acena z objektu NSFetchRequest. Pro uk´azku bude uvedeno pˇrid´an´ı nov´e instituce do Core Data pomoc´ı metody insertNewObjectForEntityForName:inManagedObjectContext: nad tˇr´ıdou NSEntityDescription. InstitutionModel * institution = [ NSEntityDescription insertNewObjectForEntityForName : @ " InstitutionModel " inManagedObjectContext : context ];
51
Klientsk´a ˇc´ast
5.4.3
Implementace klientsk´e aplikace
Uˇ zivatelsk´ e rozhran´ı
Tato ˇc´ast se bude zab´ yvat popisem uˇzivatelsk´eho rozhran´ı jen pro iPhone a iPod Touch. Aplikace se skl´ad´a z nˇekolika obrazovek (viz Obr. 5.5), kde z´akladn´ım kamenem je UINavigationViewController. UINavigationViewController je komponenta, kter´a um´ı zobrazit obsah (UIViewControllery) v hierarchick´e struktuˇre. Z´akladn´ım prvkem UINavigationViewController je navigaˇcn´ı liˇsta, kter´a obsahuje titulek popisuj´ıc´ı, kde se uˇzivatel pr´avˇe nach´az´ı a pˇr´ıpadn´e tlaˇc´ıtko zpˇet, kter´e um´ı vr´atit na pˇredchoz´ı zobrazenou obrazovku. ´ Uvodn´ ı obrazovka Po zapnut´ı aplikace se uˇzivateli zobraz´ı nejbliˇzˇs´ı dostupn´e instituce (viz Obr. 5.6). Nejbliˇzˇs´ı instituce jsou zobrazeny pomoc´ı UITableViewControlleru, kter´ y je rozˇs´ıˇren o EGOTableViewPullRefresh (viz 5.3.6) aktualizaci obsahu posunut´ım prstu smˇerem dol˚ u. Seznam nejbliˇzˇs´ıch instituc´ı je zobrazen jako UIView containment, jenˇz umoˇzn ˇuje vloˇzen´ı UIViewControlleru do jin´eho. T´ım je moˇzn´e na obrazovce zobrazit spodn´ı tlaˇc´ıtko spolu se seznamem nejbliˇzˇs´ıch instituc´ı. Uˇzivatel se m˚ uˇze pˇrihl´asit k instituci i pomoc´ı unik´atn´ıho identifik´atoru instituce dotykem na spodn´ı tlaˇc´ıtko. Pomoc´ı tlaˇc´ıtek v navigaˇcn´ı liˇstˇe se m˚ uˇze uˇzivatel dostat do administrace a historie.
Zobrazen´ı instituce Po pˇrihl´aˇsen´ı k instituci se zobraz´ı obrazovka (viz Obr. 5.7), ve kter´e je moˇzn´e pˇristoupit k nalezen´ı maj´ak˚ u, k informac´ım o instituci, k jednou jiˇz nalezen´ ym maj´ak˚ um, zobrazit hodnocen´ı uˇzivatel˚ u a pˇresnou polohu instituce. Uprostˇred se nach´az´ı UISegmentController, tedy z´aloˇzky, kter´e definuj´ı obsah pod n´ım. V pˇr´ıpadˇe ˇze obsah, kter´ y se nach´az´ı pod z´aloˇzkami, bude dlouh´ y a nevejde se na obrazovku, je moˇzno jej posunout d´ıky UIScrollView. Pˇri posunu se z´aloˇzky pˇripnou k horn´ımu ˇc´asti obrazovky, tud´ıˇz jsou vˇzdy vidˇet. Pod z´aloˇzkami je obsah opˇet pomoc´ı UIView containment. Tedy schr´anka, kter´a m˚ uˇze v sobˇe zobrazovat dalˇs´ı UIViewControllery (informace o instituci, nalezen´e maj´aky, hodnocen´ı uˇzivatel˚ u,...). Schr´anka m´a sv´eho rodiˇce, tedy UIViewController, kter´ y zobrazuje hlaviˇcku s logem instituce a z´aloˇzky. Mezi tˇemito UIViewControllery se pˇrep´ın´a n´asleduj´ıc´ım zp˚ usobem. 52
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
Obr´azek 5.5: Uˇzivatelsk´e rozhran´ı mobiln´ı aplikace. - ( void ) cycleFromViewController : ( UIViewController *) oldC toViewController : ( UIViewController *) newC { /* Odebere se stary UIViewController . */ [ oldC willMoveToParentViewController : nil ]; [ oldC . view removeFromSuperview ]; [ oldC removeFromParentViewController ];
/* Prida se novy UIViewController . */
53
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
´ Obr´azek 5.6: Uvodn´ ı obrazovka aplikace. [ self addChildViewController : newC ]; newC . view . frame = _container . bounds ; [ _container addSubview : newC . view ]; [ newC didMoveToParentViewController : self ]; }
Bohuˇzel t´ım, jak jsou UIViewControllery ve schr´ance (berou vˇsechny doteky rodiˇcovsk´eho UIViewControlleru a zpracov´avaj´ı si je samy), je probl´em dos´ahnout posouv´an´ı cel´e obrazovky. Trikem je pˇrepoˇc´ıst velikost obsahu (UIViewControlleru ve schr´ance), a nastavit tak schr´ance poˇzadovanou velikost. UIScrollView se bohuˇzel tak´e neum´ı s´am od sebe se roztahovat dle obsahu, proto je nutn´e i jemu nastavit velikost. - ( void ) updateScrollViewWithView :( UIView *) view { /* Vypocte se velikost noveho obsahu . */ CGSize size = [ view sizeThatFits : CGSizeMake ( _container . frame . size . width , CGFLOAT_MAX )]; /* Spocte se celkova velikost i s hlavickou a schrankou */ CGFloat height = _container . frame . origin . y + view . frame . size . height ; /* Pokud je velikost mensi nez cela obrazovka , nastavi se velikost + 1 */ if ( height <= _scrollView . frame . size . height ) height = _scrollView . frame . size . height + 1;
54
Klientsk´a ˇc´ast
(a) Obrazovka pro nalezen´ı maj´ ak˚ u.
Implementace klientsk´e aplikace
(b) Nalezen´e maj´aky.
(d) Obrazovka s hodnocen´ım uˇzivatel˚ u.
(c) Informace o instituci.
(e) Zobrazen´ı polohy instituce.
Obr´azek 5.7: Obrazovka zobrazuj´ıc´ı informace o instituci. /* Upravy se velikost UIScrollView */ _scrollView . contentSize = CGSizeMake ( _scrollView . frame . size . width , height ); /* Upravy se velikost containeru */
55
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
CGRect frame = _container . frame ; frame . size . height = height ; _container . frame = frame ; }
Zmˇen´ı-li se ve schr´ance UIViewController, tak nov´ y UIViewController zavol´a nad sv´ ym rodiˇcem metodu updateScrollViewWithView:, kter´a zjist´ı velikost jeho hlavn´ıho UIView podle metody sizeThatFits:. Pokud je velikost nov´eho UIViewControlleru, respektive jeho UIView, menˇs´ı neˇz velikost obrazovky, pouˇzije se velikost obrazovky zv´ yˇsen´a o jeden pixel. T´ım se zajist´ı 4 tzv. bounce efekt“ . Pot´e se jiˇz nastav´ı nov´a velikost obsahu UIScrollView ” a velikost schr´anky.
Nalezen´ı maj´ aku podle lokalizaˇ cn´ı sluˇ zby Jednou z metod nalezen´ı maj´aku je pomoc´ı lokalizaˇcn´ı sluˇzby. Pokud uˇzivatel chce nal´ezt maj´ak dle jeho lokace, mus´ı stisknout ikonu lokalizaˇcn´ı sluˇzby (viz Obr. 5.7a) a zobraz´ı se mu nov´e okno (viz Obr. 5.8), kter´e nalezne maj´aky v bl´ızkosti uˇzivatele.
Obr´azek 5.8: Nalezen´ı maj´aku dle lokalizaˇcn´ı sluˇzby. K tomu byl vyuˇzit objekt MKMapView, kter´ y poskytuje mapov´e roz4
Obsah, kter´ y se vejde do UIScrollView, nen´ı jiˇz posunuteln´ y. Bounce efekt umoˇzn ˇuje posouvat i nad t´ımto obsahem. Ve fin´ale to potom vypad´a, jakoby obsah sk´akal.
56
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
hran´ı aplikac´ım. MKMapView je nastaven na sledov´an´ı uˇzivatelsk´e polohy. V bl´ızkosti 20 metr˚ u se zaznamen´a informaˇcn´ı maj´ak, kter´ y se zobraz´ı uˇzivateli v UITableView tabulce pod mapou. Vˇsechny maj´aky, kromˇe tˇech s nulov´ ymi zemˇepisn´ ymi souˇradnicemi, se zobraz´ı uˇzivateli na mapˇe. MKMapView pouˇz´ıv´a protokol MKMapViewDelegate, kter´ y v pˇr´ıpadˇe zmˇeny polohy uˇzivatele notifikuje metodu mapView:mapView didUpdateUserLocation:. V t´eto metodˇe se zkontroluje vzd´alenost se vˇsemi informaˇcn´ımi maj´aky. Pokud bude maj´ak v bl´ızkosti 20 metr˚ u, zobraz´ı se v tabulce a zbarv´ı se do zelen´e barvy. Maj´aky ve vzd´alenosti vˇetˇs´ı jak 20 metr˚ u jsou zbarveny ˇcervenˇe a z tabulky smaz´any. Zobrazen´ ym maj´ak˚ um na mapˇe se ˇr´ık´a anotace a jsou instanc´ı tˇr´ıdy MKAnnotationView. Pro zmˇenu jejich barev je nutn´e vˇsechny anotace z mapy odebrat a n´aslednˇe znovu pˇridat. Tato zmˇena se dˇeje pˇri kaˇzd´e zmˇenˇe polohy uˇzivatele. T´ım, ˇze se anotace odeberou a znovu pˇridaj´ı, se zavol´a metoda mapView:viewForAnnotation:, ve kter´e se dle vzd´alenosti nastav´ı barvy maj´ak˚ u. Hled´an´ı maj´ak˚ u dle polohy je povoleno, aˇz kdyˇz je pˇresnost GPS vertik´alnˇe a horizont´alnˇe 10 metr˚ u. Kdyby nebyla uplatnˇena tato podm´ınka, pˇri zapnut´ı GPS kol´ıs´a poloha uˇzivatele a nab´ıdne maj´aky uˇzivateli, i kdyˇz se u nich zrovna nenach´az´ı. To sam´e plat´ı, kdyˇz se vypne displej zaˇr´ızen´ı, na pozad´ı bˇeˇz´ı zjiˇst’ov´an´ı souˇcasn´e polohy , kter´e je jiˇz pˇresn´e a naleze maj´aky, i kdyˇz se u nich uˇzivatel pr´avˇe nenach´az´ı. Aby se tomuhle pˇredeˇslo, je nastaven deleg´at MKMapView na nil pˇri vypnut´ı displeje. Pˇri zapnut´ı displeje zase naopak je deleg´at MKMapView nastaven pro sledov´an´ı polohy. - ( void ) viewDidLoad { [[ NSNotificationCenter defaultCenter ] addObserver : self selector : @selector ( applicationWillResign ) name : UIApplicationWillResignActiveNotification object : NULL ];
[[ NSNotificationCenter defaultCenter ] addObserver : self selector : @selector ( applicationWillEnterForeground ) name : UIApplicationWillEnterForegroundNotification object : NULL ]; } - ( void ) applicationWillResign { _mapView . delegate = nil ; }
57
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
- ( void ) applicationWillEnterForeground { _mapView . delegate = self ; }
Aby se zachytila ud´alost zapnut´ı a vypnut´ı displeje, je nutn´e si zaregistrovat observer na UIApplicationWillResignActiveNotification pro detekci vypnut´ı displeje a UIApplicationWillEnterForegroundNotification pro detekci zapnut´ı displeje. Operaˇcn´ı syst´em iOS nepodporuje z´ısk´an´ı informac´ı o okoln´ıch WiFi a Bluetooth s´ıt´ıch, kter´e by mohly pomoci urˇcen´ı polohy uvnitˇr budov. Existuj´ı knihovny, kter´e dok´aˇz´ı z´ıskat seznam okoln´ıch WiFi a Bluetooth vys´ılaˇc˚ u, ale vyuˇz´ıvaj´ı neokomentovan´e priv´atn´ı API, kter´e Apple nepovoluje ve sv´ ych aplikac´ıch. ˇ Cten´ ı QR k´ odu a 3-m´ıstn´ eho kl´ıˇ ce Dalˇs´ı metodou nalezen´ı maj´aku je pˇreˇcten´ı QR k´odu (viz Obr. 5.9a). K tomu je pouˇzita knihovna ZBarSDK (viz 5.3.2). Knihovna ZbarSDK rozk´oduje obr´azek a unik´atn´ı identifik´ator maj´aku se porovn´a s uloˇzen´ ymi maj´aky, pokud se najde shoda, nab´ıdne se uˇzivateli pˇr´ısluˇsn´ y maj´ak. Dalˇs´ı metoda nalezen´ı je pomoc´ı 3-m´ıstn´eho kl´ıˇce (viz Obr. 5.9b). K tomu je vyuˇzito textov´e pole UITextField. Ten vyuˇz´ıv´a protokol UITextFieldDelegate a implementac´ı jeho metody textChanged: se zjiˇst’uje velikost zadan´eho ˇretˇezce. Pokud je velikost ˇretˇezce rovn´a tˇrem, porovn´a se kl´ıˇc s maj´aky. Pokud se najde shoda, uˇzivateli se nab´ıdne maj´ak pˇr´ısluˇsej´ıc´ı kl´ıˇci.
Zobrazen´ı obsahu maj´ aku Obsah maj´aku se zobraz´ı po jeho nalezen´ı. Obsahem m˚ uˇze b´ yt text, odkaz, obr´azky a video z YouTube5 . Obsah je vytv´aˇren dynamicky, tud´ıˇz je moˇzn´e libovolnˇe kombinovat vˇsechny typy obsahu. Syst´em Tagiee ale jako prvn´ı pos´ıl´a sadu obr´azk˚ u, pak kombinuje hypertextov´ y odkaz s textem. Text m˚ uˇze m´ıt nadpis a odstavec. Nakonec je zobrazeno video z Youtube. 5
Sluˇzba pro sd´ılen´ı videa.
58
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
(a) Nalezen´ı maj´ aku pomoc´ı QR k´ odu
(b) Nalezen´ı maj´aku pomoc´ı 3-m´ıstn´eho kl´ıˇce
Obr´azek 5.9: Dalˇs´ı moˇznosti nalezen´ı maj´ak˚ u. Odkaz je ˇreˇsen pomoc´ı tlaˇc´ıtka UIButton. Text je zobrazen pomoc´ı textov´eho popisku BeaconContentLabel oddˇedˇen´e od UILabel. Od verze iOS 6.0 lze vyuˇz´ıt k zobrazen´ı textu NSAttributedString. NSAttributedString je ˇretˇezec, kter´ y m˚ uˇze b´ yt obohacen o r˚ uzn´e form´atov´an´ı. BeaconContentLabel pˇretˇeˇzuje metodu setAttributedText:, kter´a nastav´ı potˇrebn´e parametry textu. -( void ) setAttributedText :( NSAttributedString *) attributedText { /* Vytvoreni odstavce */ NSMutableParagraphStyle * paragraph = [[ NSMutableParagraphStyle alloc ] init ]; /* Zarovnani do bloku */ paragraph . alignment = NSTextAlignmentJustified ; /* Atributovany retezec */ NSMutableAttributedString * attributtedString = [[ NSMutableAttributedString alloc ] initWithAttributedString : attributedText ]; [ attributtedString addAttributes : @ { NSParagraphStyleAttributeName : paragraph } range : NSMakeRange (0 , [ attributtedString length ])]; [ super setAttributedText : attributtedString ]; /* Libovolny pocet radek , zalamovani slov */
59
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
self . numberOfLines = 0; self . lineBreakMode = NSLineBreakByWordWrapping ; /* Prepocitat a nastavit */ [ self sizeToFit ]; }
Obr´azky jsou zobrazeny v horizont´aln´ım UIScrollView, ten m´a pod sebou UIPageControl, kter´ y str´ankuje jednotliv´e obr´azky. Po kliknut´ı na obr´azek se otevˇre galerie MWPhotoBrowser (viz 5.3.4). Obr´azky jsou naˇc´ıt´any skrze AFNetworking (viz 5.3.1). Jiˇz jednou staˇzen´ y obr´azek se uloˇz´ı do Core Data, tud´ıˇz, pokud si uˇzivatel znovu zobraz´ı obsah, obr´azky se naˇctou z Core Data m´ısto z Internetu. Youtube video je zobrazeno jako webov´e okno v UIWebView n´asledovnˇe: NSString * urlString = @ " http :// www . youtube . com / embed / ID " ; NSString * html = [ NSString stringWithFormat : @ " < html > < head > < style type = ’ text / css ’> body { background - color : transparent ; color : white ;} style > head > < body style = ’ margin :0 ’ > < iframe width = ’% f ’ height = ’% f ’ src = ’% @ ’ frameborder = ’0 ’ allowfullscreen > iframe > body > html > " , 300.0 , 200.0 , urlString ]; UIWebView * videoView = [[ UIWebView alloc ] initWithFrame : CGRectMake (x , y , 300 , 200)]; [ videoView loadHTMLString : html baseURL : nil ]; [ self . scrollView addSubview : videoView ];
Do UIWebView je vloˇzena str´anka, kde pˇres tag <iframe> je spuˇstˇeno embedovan´e video z Youtube.
Administr´ atorsk´ aˇ c´ ast V r´amci pˇredmˇetu KIV/MKZ vznikla administr´atorsk´a ˇca´st aplikace (viz Obr. 5.10). K administr´atorsk´e ˇca´sti se lze dostat z u ´vodn´ı obrazovky tlaˇc´ıtkem v navigaˇcn´ım menu. Administr´atorsk´a ˇca´st umoˇzn ˇuje z´ıskat pˇrehled o instituc´ıch, maj´ac´ıch, hodnocen´ı uˇzivatel˚ u a umoˇzn ˇuje pˇrid´an´ı souˇcasn´e polohy do syst´emu Tagiee. Souˇcasn´a poloha je pouˇziteln´a ve webov´em prostˇred´ı syst´emu Tagiee jako poloha maj´aku. Pˇr´ıstup do administr´atorsk´e ˇc´asti je povolen pouze pˇrihl´aˇsen´ ym uˇzivatel˚ um. Pˇrihlaˇsovac´ı u ´daje jsou stejn´e jako v pˇr´ıpadˇe webov´eho prostˇred´ı syst´emu Tagiee. Zamˇestnanec instituce m´a pˇr´ıstup pouze ke sv´ ym vytvoˇren´ ym instituc´ım a maj´ak˚ um. 60
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
(a) Seznam instituc´ı.
(b) Seznam maj´ak˚ u.
Obr´azek 5.10: Administr´atorsk´a ˇca´st aplikace Tagiee.
5.4.4
Verze pro iPad
V r´amci oborov´eho projektu KIV/OPSWI byla vytvoˇrena verze pro zaˇr´ızen´ı iPad. Tˇr´ıdy pro pr´aci s datab´az´ı a komunikaci s Web API jsou spoleˇcn´e s verz´ı pro iPhone. Grafick´e komponenty jako jsou informace o instituci, obrazovky pro nalezen´ı maj´ak˚ u, seznam nalezen´ ych maj´ak˚ u, hodnocen´ı a obsah maj´ak˚ u, byly kompletnˇe pˇrevzaty z verze pro iPhone. Uspoˇr´ad´an´ı komponent se zmˇenilo a optimalizovalo pro vˇetˇs´ı displej tabletu iPad (viz Obr. 5.11). Z´akladem je UINavigationViewController, seznam nejbliˇzˇs´ıch instituc´ı je zobrazen pomoc´ı UIViewCollectionViewController, kter´ y zobrazuje narozd´ıl od UITableViewControlleru buˇ nky do mˇr´ıˇzky. Pˇri pˇrihl´aˇsen´ı k instituci jsou na jedn´e obrazovce (viz Obr. 5.12) zobrazeny informace o instituci, poloha instituce, hodnocen´ı instituce, seznam nalezen´ ych maj´ak˚ u a moˇznosti pro nalezen´ı maj´ak˚ u. Nalezen´ı maj´ak˚ u pomoc´ı GPS, QR k´odu a kl´ıˇce jsou identick´e s verz´ı pro iPhone, s t´ım ˇze m´ısto nov´eho okna je pouˇzito mod´aln´ı okno, aby nedoch´azelo ke zbyteˇcn´emu pˇrekreslov´an´ı komponent. Verze pro iPad nebude zaˇclenˇena v prvn´ı verzi klientsk´e aplikace do obchodu AppStore, ale vyjde jako aktualizace aplikace.
61
Klientsk´a ˇc´ast
Implementace klientsk´e aplikace
Obr´azek 5.11: Rozloˇzen´ı grafick´ ych komponent pro zaˇr´ızen´ı iPad.
Obr´azek 5.12: Obrazovka instituce na zaˇr´ızen´ı iPad.
5.4.5
Notifikace syst´ emu Tagiee
Klientsk´a aplikace notifikuje syst´em Tagiee o akc´ıch uˇzivatele. Akcemi jsou jiˇz zm´ınˇen´e nalezen´ı maj´aku uˇzivatelem a pˇrihl´aˇsen´ı k instituci. Komunikace prob´ıh´a skrze Web API. V pˇr´ıpadˇe nedostupnosti pˇripojen´ı se uloˇz´ı tato notifikace a odeˇsle se aˇz v pˇr´ıpadˇe znovu zapnut´ı aplikace, tedy v metodˇe ap62
Klientsk´a ˇc´ast
Publikov´an´ı aplikace
plication:didFinishLaunchingWithOptions:. Pro uloˇzen´ı notifikac´ı se vyuˇz´ıv´a Core Data u ´loˇziˇstˇe.
5.5
Publikov´ an´ı aplikace
Klientsk´a aplikace byla odesl´ana na schv´alen´ı do digit´aln´ıho obchodu s aplikacemi App Store. (viz 5.5.1).
5.5.1
App Store
App Store je obchod s digit´aln´ım obsahem pro platformu iOS. V lednu 2013 bylo v obchodu dostupn´ ych v´ıce neˇz 775 tis´ıc aplikac´ı a to ve 119 zem´ı svˇeta. Aby aplikace mohla b´ yt zveˇrejnˇena v obchodˇe, mus´ı splˇ novat podm´ınky obchodu App Store. Vybran´e podm´ınky t´ ykaj´ıc´ı se klientsk´e aplikace Tagiee jsou v pˇr´ıloze (viz pˇr´ıloha A.2).
5.5.2
iOS Developer Program
K publikov´an´ı aplikace do obchodu App Store je nutn´e si pˇredplatit iOS Developer Program za 99 dolar˚ u roˇcnˇe. Existuje i iOS Developer Enterprise Program za 299 dolar˚ u roˇcnˇe, kter´ y je urˇcen spoleˇcnostem a umoˇzn ˇuje kromˇe klasick´e distribuce distribuovat aplikace pomoc´ı vlastn´ıho obchodu urˇcen´eho jen pro zamˇestnance spoleˇcnosti. Pokud si uˇzivatel´e koup´ı aplikaci, Apple si bere provizi 30% a zbyl´ ych 70% jde v´ yvoj´aˇri. Stejn´e je to i s transakcemi uvnitˇr aplikace, Apple si n´arokuje tak´e provizi 30%.
5.5.3
iTunes Connect
Po pˇredplacen´ı iOS Developer Programu dostane v´ yvoj´aˇr pˇr´ıstup do iTunes Connect, kter´ y dovol´ı v´ yvoj´aˇri nahr´at svou aplikaci do obchodu App Store. Sekce iTunes Connect poskytuje informace o aplikaci, poˇcet jej´ıho staˇzen´ı, 63
Klientsk´a ˇc´ast
Publikov´an´ı aplikace
poˇcet n´akup˚ u, informace o platb´ach a moˇznost editov´an´ı popisku aplikace v App Store.
5.5.4
Pˇ r´ıprava certifik´ at˚ u
Pro odesl´an´ı aplikace do AppStore je nutn´e v Member Center pod Identifiers zaloˇzit App ID. App ID je unik´atn´ı ˇretˇezec specifikuj´ıc´ı aplikaci. Klientsk´a aplikace m´a com.tagiee.Tagiee. Pokud je App ID nastaven´e, vytvoˇr´ı se v Provisioning Profiles Distribution certifik´at pro odesl´an´ı aplikace do iTunes Connect.
5.5.5
Vytvoˇ ren´ı aplikace v iTunes Connect
V iTunes Connect se vytvoˇr´ı aplikace a vypln´ı se informace v n´asleduj´ıc´ım poˇrad´ı: • V´ ychoz´ı jazyk aplikace. • N´azev aplikace. • SKU Number - Unik´atn´ı identifik´ator aplikace. • Bundle ID - Identifik´ator, kter´ y umoˇzn´ı budouc´ı aktualizace aplikace. Bundle ID se bere z vytvoˇren´eho App ID. • Kdy bude dostupn´a aplikace v App Store. • Cenov´a politika. • Verze aplikace. Mus´ı b´ yt 1.0 a vyˇsˇs´ı. • Copyright, kategorie v App Store, vˇekov´e omezen´ı. • Metadata aplikace - Popisek, kl´ıˇcov´a slova( podle kter´ ych se bude aplikace hledat v App Store), odkaz na podporu. • Kontaktn´ı informace na v´ yvoj´aˇre. • Nahr´an´ı ikony a uk´azkov´ ych obr´azk˚ u z aplikace.
64
Klientsk´a ˇc´ast
5.5.6
Publikov´an´ı aplikace
Nahr´ an´ı aplikace
Pokud je jiˇz aplikace hotov´a (naprogramovan´a), uˇz j´ı zb´ yv´a pouze nahr´at do iTunes Connect na schv´alen´ı. V iTunes Connect se zm´aˇckne tlaˇc´ıtko Ready to Submit. V Xcode se vybere z menu Product->Archive. Otevˇre se Organizer, ve kter´em je tlaˇc´ıtko Distribute.... Stisknut´ım tohoto tlaˇc´ıtka se otevˇre dialogov´e okno, ve kter´em je potˇreba vybrat Submit to the App Store. T´ım se nahraje aplikace k iTunes Connect.
5.5.7
Schvalovac´ı proces
Odeslan´a aplikace m´a sv˚ uj schvalovac´ı proces. Schvalovac´ı proces m´a nˇekolik etap. Z tˇechto etap vyberu jen ty, kter´e se t´ ykaj´ı odesl´an´ı aplikace skrze Xcode a klientsk´e aplikace Tagiee. • Prepare for Upload - Prvn´ı stav aplikace, ˇcek´a se na vyplnˇen´ı korektn´ıch metadat (kl´ıˇcov´a slova, popis aplikace, ...) o aplikaci. • Waiting for Upload - Metadata jsou vyplnˇena, je nutn´e nahr´at aplikaci skrze Xcode. • Waiting for Review - Aplikace je odesl´ana, ale d´ıky velk´emu mnoˇzstv´ı odeslan´ ych aplikac´ı ˇcek´a ve frontˇe na schv´alen´ı. Tato operace trv´a obvykle t´ yden aˇz dva. • In Review - Aplikace je ve schvalovac´ım procesu, zamˇestnanci Applu testuj´ı aplikaci a prov´ad´ı na n´ı automatizovan´e testy. Apple ud´av´a statistiku schvalov´an´ı (viz Obr. 5.13). • Pending Developer Release - Aplikace byla schv´alena, ˇcek´a se na povolen´ı v´ yvoj´aˇre, aby um´ıstil svou aplikaci do obchodu. • Processing for App Store - Aplikace byla povolena v´ yvoj´aˇrem, aplikace se indexuje do App Store. Aplikace by se mˇela objevit v App Store do 24 hodin. • Ready for Sale - Aplikace byla u ´spˇeˇsnˇe um´ıstˇena v App Store. • Rejected - Aplikace nevyhovuje podm´ınk´am obchodu App Store a je vr´acena na pˇrepracov´an´ı. Pracovn´ıci Apple kontaktuj´ı v´ yvoj´aˇre pomoc´ı emailu nebo telefonicky. 65
Klientsk´a ˇc´ast
Publikov´an´ı aplikace
• Metadata Rejected - Aplikace byla zam´ıtnuta kv˚ uli ˇspatn´ ym metadat˚ um (ˇspatnˇe vyplnˇen´ y popis aplikace, kl´ıˇcov´a slova apod). • Removed from Sale - Aplikace byla vyˇrazena z obchodu kv˚ uli novˇe ustanoven´ ym podm´ınk´am. • Missing Screenshot - Obr´azky aplikace pro App Store nesplˇ nuj´ı podm´ınky.
Obr´azek 5.13: Statistika, kolik odeslan´ ych aplikac´ı na schv´alen´ı je vyˇr´ızeno.
5.5.8
Schv´ alen´ı aplikace Tagiee
V prvn´ım schvalovac´ım kole nebyla aplikace schv´alena pro vstup do obchodu App Store z d˚ uvodu nepochopen´ı u ´ˇcelu aplikace hodnot´ıc´ı komis´ı. Funkˇcnost aplikace je z´avisl´a na poloze uˇzivatele. Doporuˇcen´a poloha pro testov´an´ı aplikace byla uvedena ve zpr´avˇe pro komisi, avˇsak komise vyˇzaduje video, kter´e demonstruje funkˇcnost syst´emu Tagiee. Cel´a zpr´ava komise: We began the review of your app but are not able to continue because we need access to a video that demonstrates your app in use. You can provide a link to a demo video of your app in iTunes Connect. Go to ”Manage Your Applications,”select your app, click ”Edit Information,”then scroll to the ”Review Notes”section and add the demonstration video access details. Na z´akladˇe poˇzadavk˚ u komise bylo vytvoˇreno video a odesl´ano na schv´alen´ı. V dobˇe odevzd´an´ı diplomov´e pr´ace je klientsk´a aplikace ve schvalovac´ım procesu.
66
6 Ovˇeˇren´ı funkcionality Syst´em Tagiee byl ovˇeˇren na vytvoˇren´e instituci Z´apadoˇcesk´e univerzity v Plzni a jej´ı prohl´ıdkou pomoc´ı mobiln´ıch aplikac´ı.
6.1
Syst´ em Tagiee
Na Z´apadoˇcesk´e univerzitˇe bylo vytvoˇreno 12 maj´ak˚ u. Kaˇzd´ y maj´ak je detekovateln´ y pomoc´ı QR k´odu, unik´atn´ıho kl´ıˇce a NFC tagu. Maj´aky po nalezen´ı zobraz´ı informace v podobˇe text˚ u, obr´azk˚ u, odkaz˚ u ˇci vide´ı o dan´em m´ıstˇe. Seznam maj´ak˚ u je n´asleduj´ıc´ı: • Fakulta aplikovan´ ych vˇ ed - Fakulta aplikovan´ ych vˇed se nach´az´ı v budovˇe na Univerzitn´ı 22 a lze ji naj´ıt i pomoc´ı GPS lokace. • Katedra tˇ elesn´ e v´ ychovy a sportu - Katedra tˇelesn´e v´ ychovy a sportu se nach´az´ı v budovˇe na Univerzitn´ı 14 a lze ji tak´e nal´ezt pomoc´ı GPS lokace a WiFi s´ıt´ı. • Fakulta elektrotechnick´ a - Fakulta elektronick´a se nach´az´ı v budovˇe na Univerzitn´ı 26 a t´eˇz ji lze nal´ezt pomoc´ı GPS souˇradnic. ˇ Bory - Menza Bory je um´ıstˇena na univerzitn´ım troj´ • Menza ZCU uheln´ıku a lze ji tak´e detekovat pomoc´ı GPS polohy. ˇ Koll´ • Menza ZCU arova - Menza Koll´arova je na rozd´ıl od pˇredchoz´ıch maj´ak˚ u um´ıstˇena v centru mˇesta a ne v univerzitn´ım are´alu. Lze ji tak´e nal´ezt pomoc´ı GPS polohy na adrese Koll´arova 19 v Plzni. • Knihovna Bory - Knihovna bory je um´ıstˇena v univerzitn´ım are´alu na adrese Univerzitn´ı 18 a je naleziteln´a tak´e pomoc´ı GPS souˇradnic. • Katedra informatiky a v´ ypoˇ cetn´ı techniky - Katedra informatiky je v budovˇe Fakulty aplikovan´ ych vˇed ve 4t´em patˇre. • Uˇ cebna poˇ c´ıtaˇ cov´ e grafiky - Uˇcebna poˇc´ıtaˇcov´e grafiky je ve ˇctvrt´em patˇre katedry informatiky a v´ ypoˇcetn´ı techniky. Uˇcebna je detekovateln´a pomoc´ı WiFi s´ıt´ı.
67
Ovˇeˇren´ı funkcionality
Webov´e prostˇred´ı
• Uˇ cebna poˇ c´ıtaˇ cov´ ych s´ıt´ı - Uˇcebna poˇc´ıtaˇcov´ ych s´ıt´ı je ve ˇctvrt´em patˇre katedry informatiky a v´ ypoˇcetn´ı techniky. Uˇcebna je detekovateln´a pomoc´ı WiFi s´ıt´ı. • EEG ERP uˇ cebna - Uˇcebna EEG a ERP je ve ˇctvrt´em patˇre katedry informatiky a v´ ypoˇcetn´ı techniky. Uˇcebna je detekovateln´a pomoc´ı WiFi s´ıt´ı. • Laboratoˇ r digit´ aln´ı fabriky - Laboratoˇr digit´aln´ı fabriky je ve tˇret´ım patˇre katedry pr˚ umyslov´eho inˇzen´ yrstv´ı a managmentu. Uˇcebna je detekovateln´a pomoc´ı WiFi s´ıt´ı. • Kancel´ aˇ r UK422 - Kancel´aˇr Doc. Ing. Pˇremka Brady MSc. PhD. je ve ˇctvrt´em patˇre katedry informatiky a v´ ypoˇcetn´ı techniky. Uˇcebna je detekovateln´a pomoc´ı WiFi a Bluetooth s´ıt´ı. Vytvoˇren´a instituce umoˇzn´ı novˇe pˇr´ıchoz´ım student˚ um k orientaci v area´lu Z´apadoˇcesk´e univerzity. N´avˇstˇevn´ıci z´ıskaj´ı informace o jednotliv´ ych budov´ach Univerzity. Pˇri n´avˇstˇevˇe menz se uˇzivateli zobraz´ı odkaz na j´ıdeln´ıˇcek a pˇri n´avˇstˇevˇe knihovny odkaz pro vyhled´av´an´ı knih apod.
6.1.1
Mapa maj´ ak˚ u
Na obr´azku (viz Obr. 6.1) je mapa vˇsech maj´ak˚ u, kter´e jsou detekovateln´e pomoc´ı GPS souˇradnic.
6.2
Webov´ e prostˇ red´ı
Instituce a maj´aky byli pˇrid´any pomoc´ı webov´eho prostˇred´ı na adrese tagiee.com. Webov´e prostˇred´ı bylo testov´ano na n´asleduj´ıc´ıch prohl´ıˇzeˇc´ıch. • Safari 6.0.3 - OS X 10.8.3 • Chrome 25 - OS X 10.8.3 • Opera 12.15 - OS X 10.8.3 • IE 10 - Windows 7 SP1 x64 68
Ovˇeˇren´ı funkcionality
Klientsk´a aplikace Tagiee
ˇ naleziteln´ Obr´azek 6.1: Mapa maj´ak˚ u instituce ZCU ych pomoc´ı GPS souˇradnic.
6.2.1
Statistiky
Syst´em sb´ır´a statistiky o vyuˇz´ıvanosti instituce Z´apadoˇcesk´e univerzity (viz Obr. 6.2). Statistiky byly sesb´ır´any za 20 dn´ı existence instituce. Statistiky jsou aktu´aln´ı k datu 14.kvˇetna 2013. Dalˇs´ımi statistikami jsou kol´aˇcov´e informace o maj´ac´ıch, tedy procentua´ln´ı nalezen´ı maj´ak˚ u (viz Obr. 6.3a), pod´ıl technologi´ı, kter´e byly vyuˇzity pro nalezen´ı maj´ak˚ u (viz Obr. 6.3b) a pod´ıl mobiln´ıch platforem (viz Obr. 6.3c).
6.3
Klientsk´ a aplikace Tagiee
Mobiln´ı aplikace Tagiee byla ovˇeˇrena na vytvoˇren´e instituci Z´apadoˇcesk´e univerzity (viz 6.1). Postupnˇe byly nalezeny vˇsechny maj´aky, vˇsemi detekovateln´ ymi moˇznostmi, kter´e syst´em iOS nab´ız´ı, tedy pomoc´ı zemˇepisn´e polohy, kl´ıˇce a QR k´odu. Zbyl´e technologie NFC, Wifi a Bluetooth byly vyzkouˇseny na platformˇe Android v diplomov´e pr´aci Komunikace a identifikace infor” maˇcn´ıch maj´ak˚ u“ vypracovan´e Bc. Jiˇr´ı Hrom´adkou. 69
Ovˇeˇren´ı funkcionality
Klientsk´a aplikace Tagiee
Obr´azek 6.2: Statistiky o vyuˇzit´ı Z´apadoˇcesk´e univerzity skrze syst´em Tagiee.
70
Ovˇeˇren´ı funkcionality
Klientsk´a aplikace Tagiee
(a) Statistika maj´ak˚ u.
(b) Statistiky o vyuˇzit´ı technologi´ı pro detekov´ an´ı maj´ ak˚ u.
(c) Pod´ıl platforem.
Obr´azek 6.3: Kol´aˇcov´e statistiky. Klientsk´a aplikace byla spuˇstˇena a otestov´ana na zaˇr´ızen´ı iPhone 4, 4S, 5 a iPad 2. Testov´an´ı probˇehlo i bez pˇr´ıstupu k internetu a bez podpory lokalizaˇcn´ıch sluˇzeb. V pˇr´ıpadˇe vypnut´ı lokalizaˇcn´ı sluˇzby se d´a pˇrihl´asit k Z´apadoˇcesk´e univerzitˇe pomoc´ı unik´atn´ıho identifik´atoru zcu“. Pˇri nedo” stupnosti internetov´eho pˇripojen´ı se ukl´ad´a aktivita uˇzivatele a pˇri pˇr´ıˇst´ım zapnut´ı aplikace se uloˇzen´a aktivita odeˇsle syst´emu Tagiee. Bˇehem prohl´ıdky Z´apadoˇcesk´e univerzity v Plzni, byly poˇr´ızeny obr´azky pro ovˇeˇren´ı funkˇcnosti (viz Obr. 6.4).
71
Ovˇeˇren´ı funkcionality
Klientsk´a aplikace Tagiee
(a) Nalezen´ a Z´ apadoˇcesk´ a instituce.
(b) Nalezen´ı maj´ aku pomoc´ı GPS.
(c) Nalezen´ı maj´aku pomoc´ı kl´ıˇce.
(d) Nalezen´ı maj´aku QR k´odem.
(e) Maj´ ak katedry informatiky a v´ ypoˇcetn´ı techniky.
(f) Maj´ ak fakulty aplikovan´ ych vˇed.
(g) Informace o instituci.
(h) Seznam jiˇz nalezen´ ych maj´ak˚ u.
Obr´azek 6.4: Ovˇeˇren´ı klientsk´e aplikace Tagiie.
72
7 Z´avˇer Syst´emy pro poskytov´an´ı informac´ı lze vyuˇz´ıt t´emˇeˇr ve vˇsech oblastech a odvˇetv´ıch. Tyto syst´emy umoˇzn´ı uˇzivatel˚ um z´ıskat pr´avˇe ty informace, kter´e potˇrebuj´ı. D´ıky rozˇs´ıˇrenosti byla vybr´ana mobiln´ı zaˇr´ızen´ı jako poskytovatel´e tˇechto informac´ı. V´ ysledkem je univerz´aln´ı syst´em pro poskytov´an´ı informac´ı Tagiee. Syst´em umoˇzn ˇuje skrze webov´e rozhran´ı zamˇestnanc˚ um instituc´ı pˇridat svou instituci do syst´emu spolu s informaˇcn´ımi maj´aky, kter´e uˇzivatel˚ um ˇci n´avˇstˇevn´ık˚ um poskytnou informace o instituci. N´avˇstˇevn´ık bude k informac´ım pˇristupovat pomoc´ı mobiln´ı aplikace. Syst´em Tagiee poskytuje Web API, pomoc´ı kter´eho mobiln´ı aplikace komunikuj´ı se syst´emem a z´ısk´avaj´ı potˇrebn´a informace. Uˇzivatel´e mobiln´ı aplikace mohou nach´azet informaˇcn´ı maj´aky po cel´e instituci v podobˇe lokalizaˇcn´ıch sluˇzeb, WiFi, Bluetooth, NFC, QR k´od˚ u a 3-m´ıstn´eho kl´ıˇce. Spolu se syst´emem byla vytvoˇrena mobiln´ı aplikace Tagiee pro platformu iOS. Aplikace byla vytvoˇren´a s ohledem na pravidla a podm´ınky obchodu App Store, do kter´eho byla odesl´ana na schv´alen´ı. Mobiln´ı aplikace umoˇzn ˇuje nalezen´ı maj´ak˚ u pomoc´ı lokalizaˇcn´ıch sluˇzeb, QR k´od˚ u a 3-m´ıstn´ ych kl´ıˇc˚ u. Nalezen´ı pomoc´ı WiFi a Bluetooth nen´ı operaˇcn´ım syst´emem podporov´ano. Ovˇeˇren´ı syst´emu a mobiln´ı aplikace probˇehlo na vytvoˇren´e instituci Z´apadoˇcesk´e univerzity v Plzni. Z´apadoˇcesk´a univerzita m´a 11 maj´ak˚ u rozm´ıstˇen´ ych po are´alu na Borech a v centru mˇesta. Syst´em by se v budoucnu dal rozˇs´ıˇrit o syst´em soutˇeˇz´ı. Pokud by uˇzivatel nalezl vˇsechny maj´aky instituce, vyplnil by kontaktn´ı u ´daje a mohl b´ yt zaˇrazen o slosov´an´ı cen. Nebo by mohla prob´ıhat soutˇeˇz o nejlepˇs´ı fotografii, kterou by n´avˇstˇevn´ık poˇr´ıdil v pr˚ ubˇehu prohl´ıdky a nahr´al ji do syst´emu skrze mobiln´ı aplikaci, kterou by pak zamˇestnanci vyhodnotili. Naopak rozˇs´ıˇren´ım aplikace by mohly b´ yt notifikace, kter´e by zamˇestnanec instituce poslal vˇsem uˇzivatel˚ um, kteˇr´ı navˇst´ıvili instituci a informovat je o novink´ach ˇci slev´ach.
73
Seznam obr´ azk˚ u 2.1 2.2 2.3
Mobiln´ı aplikace Hustonsk´e Zoo . . . . . . . . . . . . . . . . . Mobiln´ı aplikace Lunchtime pro iOS . . . . . . . . . . . . . . . Mobiln´ı aplikace iZeeum pro iOS . . . . . . . . . . . . . . . .
3.1
Architektura syst´emu Tagiee. . . . . . . . . . . . . . . . . . . 11
4.1 4.2 4.3
ˇ Zivotn´ ı cyklus presenteru v Nette. . . . . . . . . . . . . . . . . 20 Datov´ y model syst´emu Tagiee. . . . . . . . . . . . . . . . . . . 26 Struktura webov´eho rozhran´ı. . . . . . . . . . . . . . . . . . . 34
5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13
Pod´ıl verz´ı iOS na trhu. . . . . . . . . . . . . . . . . . . . . Uk´azka MWPhoto galerie. . . . . . . . . . . . . . . . . . . . Znovu naˇcten´ı tabulky st´ahnut´ım prstem. . . . . . . . . . . . Datov´ y model Core Data v aplikaci. . . . . . . . . . . . . . . Uˇzivatelsk´e rozhran´ı mobiln´ı aplikace. . . . . . . . . . . . . . ´ Uvodn´ ı obrazovka aplikace. . . . . . . . . . . . . . . . . . . . Obrazovka zobrazuj´ıc´ı informace o instituci. . . . . . . . . . Nalezen´ı maj´aku dle lokalizaˇcn´ı sluˇzby. . . . . . . . . . . . . Dalˇs´ı moˇznosti nalezen´ı maj´ak˚ u. . . . . . . . . . . . . . . . . Administr´atorsk´a ˇca´st aplikace Tagiee. . . . . . . . . . . . . Rozloˇzen´ı grafick´ ych komponent pro zaˇr´ızen´ı iPad. . . . . . . Obrazovka instituce na zaˇr´ızen´ı iPad. . . . . . . . . . . . . . Statistika, kolik odeslan´ ych aplikac´ı na schv´alen´ı je vyˇr´ızeno.
. . . . . . . . . . . . .
ˇ naleziteln´ Mapa maj´ak˚ u instituce ZCU ych pomoc´ı GPS souˇradnic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Statistiky o vyuˇzit´ı Z´apadoˇcesk´e univerzity skrze syst´em Tagiee. 6.3 Kol´aˇcov´e statistiky. . . . . . . . . . . . . . . . . . . . . . . . . 6.4 Ovˇeˇren´ı klientsk´e aplikace Tagiie. . . . . . . . . . . . . . . . .
4 6 7
43 45 46 49 53 54 55 56 59 61 62 62 66
6.1
69 70 71 72
Seznam zkratek • API, Application Programming Interface - sb´ırka procedur, funkc´ı ˇci tˇr´ıd nˇejak´e knihovny (ale tˇreba i jin´eho programu nebo j´adra operaˇcn´ıho syst´emu), kter´e m˚ uˇze program´ator vyuˇz´ıvat. API urˇcuje, jak´ ym zp˚ usobem se funkce knihovny volaj´ı ze zdrojov´eho k´odu. • GPS, Global Positioning System - glob´aln´ı druˇzicov´ y polohov´ y syst´em s jehoˇz pomoc´ı lze urˇcit polohu s pˇresnost´ı na deset metr˚ u. • NFC, Near Field Communication - slouˇz´ı ke komunikaci mezi dvˇema zaˇr´ızen´ımi na kr´atkou vzd´alenost. • QR k´ od - prostˇredek pro automatizovan´ y sbˇer dat. • RSS - rodina XML form´at˚ u urˇcen´ ych pro ˇcten´ı novinek na webov´ ych str´ank´ach • PMDP, Plzeˇ nsk´e mˇestsk´e dopravn´ı podniky, a.s. - hromadn´a mˇestsk´a doprava mˇesta Plzeˇ n. • URL, Uniform Resource Locator - slouˇz´ı k pˇresn´e specifikaci um´ıstˇen´ı zdroj˚ u na Internetu. • WiFi - oznaˇcen´ı mnoˇziny standard˚ u IEEE 802.11 popisuj´ıc´ı bezdr´atovou komunikaci v poˇc´ıtaˇcov´e s´ıti. • HTTP, Hypertext Transfer Protocol - internetov´ y protokol urˇcen´ y pro v´ ymˇenu hypertextov´ ych dokument˚ u ve form´atu HTML • PHP, Hypertext Preprocessor - je skriptovac´ı programovac´ı jazyk. • HTML, HyperText Markup Language - je znaˇckovac´ı jazyk pro hypertext. Je hlavn´ım z jazyk˚ u pro vytv´aˇren´ı str´anek v syst´emu World Wide Web, kter´ y umoˇzn ˇuje publikaci dokument˚ u na Internetu.
• CSS, Cascading Style Sheets - jazyk pro popis zp˚ usobu zobrazen´ı str´anek napsan´ ych v jazyc´ıch HTML, XHTML nebo XML. ˇ • SRBD, Syst´em ˇr´ızen´ı b´aze dat - software zajiˇst’uj´ıc´ı pr´aci s datab´az´ı. • AJAX, Asynchronous JavaScript and XML je obecn´e oznaˇcen´ı pro technologie v´ yvoje interaktivn´ıch webov´ ych aplikac´ı, kter´e mˇen´ı obsah sv´ ych str´anek bez nutnosti jejich znovunaˇc´ıt´an´ı. • MVC, Model-View-Controller rozdˇeluje datovou vrstvu, ˇr´ıd´ıc´ı logiku a uˇzivatelsk´e rozhran´ı do tˇr´ı nez´avisl´ ych komponent. • MVP, Model-View-Presenter - MVP je podobn´a architektuˇre MVC. Obˇe architektury se liˇs´ı hlavnˇe v u ´loze jejich centr´aln´ıho kamene, tedy Presenter × Controller. Presenter hraje ˇcistˇe roli prostˇredn´ıka, kter´ y jen vol´a model a v´ ysledky pˇred´av´a view, kdeˇzto Controller m´a nav´ıc na starosti i nˇekter´e ud´alosti uˇzivatelsk´eho rozhran´ı. • XSS, Cross-Site Scripting je metoda naruˇsen´ı webov´ ych str´anek zneu´ cn´ık pak dok´aˇze do str´anky podstrˇcit ˇz´ıvaj´ıc´ı neoˇsetˇren´ ych v´ ystup˚ u. Utoˇ sv˚ uj vlastn´ı k´od a t´ım m˚ uˇze str´anku pozmˇenit nebo dokonce z´ıskat citliv´e u ´daje o n´avˇstˇevn´ıc´ıch. • XML, Extensible Markup Language - obecn´ y znaˇckovac´ı jazyk. Jazyk je urˇcen pˇredevˇs´ım pro v´ ymˇenu dat mezi aplikacemi a pro publikov´an´ı dokument˚ u, u kter´ ych popisuje strukturu z hlediska vˇecn´eho obsahu jednotliv´ ych ˇca´st´ı, nezab´ yv´a se vzhledem. • JSON, JavaScript Object Notation - odlehˇcen´ y form´at pro v´ ymˇenu dat. Je jednoduˇse ˇciteln´ y i zapisovateln´ y ˇclovˇekem a snadno analyzovateln´ y i generovateln´ y strojovˇe. • SQL, Structured Query Language - dotazovac´ı jazyk pouˇz´ıvan´ y pro pr´aci s daty v relaˇcn´ıch datab´az´ıch. • DOM, Document Object Model - je objektovˇe orientovan´a reprezentace XML nebo HTML dokumentu • UI, User Interface - uˇzivatelsk´e rozhran´ı (grafick´e komponenty, okna). • UIID, Unique Institution ID - unik´atn´ı identifik´ator instituce v syst´emu Tagiee. • UBID, Unique Beacon ID - unik´atn´ı identifik´ator maj´aku v syst´emu Tagiee.
• UDID, Unique Device ID - unik´atn´ı identifik´ator zaˇr´ızen´ı v syst´emu Tagiee. • BLOBs, Binary Large OBjects - objemn´a data napˇr´ıklad obr´azky nebo zvuky. • MAC adresa, Media Access Control - jedineˇcn´ y identifik´ator s´ıt’ov´eho zaˇr´ızen´ı.
Literatura [afn()] AFNetworking [online]. [cit. 10.5.2013]. https://github.com/AFNetworking/AFNetworking. [cha()] Google Chart Tools [online]. [cit. 10.5.2013]. https://developers.google.com/chart/. [dyr()] DYRateView [online]. [cit. 10.5.2013]. https://github.com/dyang/DYRateView.
Dostupn´e
z:
Dostupn´e z: Dostupn´e
z:
[ecg()] Draw charts with quartz2d for iPhone and iPod [online]. [cit. 10.5.2013]. Dostupn´e z: http://code.google.com/p/ecgraph/. [ego()] EGOTableViewPullRefresh [online]. [cit. 10.5.2013]. Dostupn´e z: https://github.com/enormego/EGOTableViewPullRefresh. [hus()] Huston Zoo [online]. [cit. 20.4.2013]. http://www.houstonzoo.org/about-the-zoo/. [ios()] Develop Apps for iOS [online]. [cit. 20.4.2013]. https://developer.apple.com/technologies/ios/.
Dostupn´e
z:
Dostupn´e z:
[ize()] iZeeum [online]. [cit. 20.4.2013]. Dostupn´e z: http://www.izeeum.com. [jcr()] JCrop [online]. [cit. 10.5.2013]. Dostupn´e z: http://www.jcrop.com. [jqu()] jQuery [online]. [cit. 10.5.2013]. Dostupn´e z: http://jquery.com. [jso()] Introducing JSON [online]. http://www.json.org.
[cit.
20.4.2013].
Dostupn´e
z:
[lun()] Proˇc Lunchtime ? [online]. [cit. 20.4.2013]. http://o.lunchtime.cz.
Dostupn´e z:
[map()] Google Maps API [online]. [cit. 10.5.2013]. https://developers.google.com/maps/.
Dostupn´e z:
[mwp()] MWPhotoBrowser — A simple browser [online]. [cit. 10.5.2013]. https://github.com/mwaterfall/MWPhotoBrowser.
iOS photo Dostupn´e z:
[mys()] Using Triggers [online]. [cit. 20.4.2013]. Dostupn´e http://dev.mysql.com/doc/refman/ 5.0/en/triggers.html. [net()] Nette Documentation [online]. [cit. 20.4.2013]. http://doc.nette.org. [ope()] OpenUDID [online]. [cit. 10.5.2013]. https://github.com/ylechelle/OpenUDID.
z:
Dostupn´e z: Dostupn´e
z:
[ora()] iOS Version Statistics – February 14th 2013 [online]. [cit. 20.4.2013]. Dostupn´e z: http://www.14oranges.com/2013/02/ios-version-statistics--february-14th-2013/. [php()] PHP (2) - Jak to funguje [online]. [cit. 20.4.2013]. Dostupn´e z: http://www.linuxsoft.cz/article.php?id_article=172. [stu()] Study finds smartphone users top 1B for first time ever [online]. [cit. 20.4.2013]. Dostupn´e z: http://appleinsider.com/articles/12/10/17/study-findssmartphone-users-top-1b-for-first-time-ever. [upl()] Uploadify [online]. [cit. http://www.uploadify.com.
10.5.2013].
[zbd()] ZBar iPhone SDK [online]. [cit. 10.5.2013]. http://zbar.sourceforge.net/iphone/sdkdoc/.
Dostupn´e
z:
Dostupn´e z:
[zoo()] Zoo Plzeˇ n v ˇc´ıslech [online]. [cit. 20.4.2013]. Dostupn´e z: http://www.zooplzen.cz/o-nas/zoo-v-cislech/zoo-v-cislech.aspx.
A Pˇr´ılohy A.1
Web API
V t´eto ˇc´asti uvedu plnou dokumentaci k Web API syst´emu Tagiee. Web API m´a slouˇzit mobiln´ım aplikac´ım k z´ısk´an´ı informac´ı o instituc´ıch a maj´ac´ıch.
A.1.1
add_review
[ type ] = > add_review [ udid ] = > string - unikatni identifikator zarizeni [ uiid ] = > string - instituce , ke ktere se hodnoceni pridava [ review ] = > string - kratke slovni hodnoceni [ rating ] = > int [ platform ] = > string { ios | android | win } [ version ] = > string - ve formatu x . x . x ODPOVED [ status ] = > boolean
A.1.2
beacon_found
[ type ] = > device_found_beacon [ udid ] = > string - unikatni identifikator zarizeni [ uiid ] = > string - instituce , ke ktere se pozadavek tyka [ tech ] = > string { gps | qr | nfc | key } - pouzita technologie [ discovered_datetime ] = > datetime [ platform ] = > string { ios | android | win } [ version ] = > string - ve formatu x . x . x ODPOVED [ status ] = > boolean
A.1.3
device_visit_institution
[ type ] = > device_visit_institution [ udid ] = > string - unikatni identifikator zarizeni [ uiid ] = > string - instituce , ke ktere se pozadavek tyka [ discovered_datetime ] = > datetime [ platform ] = > string { ios | android | win } [ version ] = > string - ve formatu x . x . x ODPOVED
i
Pˇr´ılohy
Web API
[ status ] = > boolean
A.1.4
get_institution_by_uiid
[ type ] = > get_institution_by_uiid [ udid ] = > string - unikatni identifikator zarizeni [ uiid ] = > string - instituce , ke ktere se pozadavek tyka [ platform ] = > string { ios | android | win } [ version ] = > string - ve formatu x . x . x ODPOVED [ status ] = > boolean [ response ]= > ( [ revision ] = int [ logo ] = > string - url obrazku [ uiid ] = > string [ name ] = > string [ description ] = > string [ address ] = > string [ lat ] = > double [ lon ] = > double [ tel ] = > string [ support_email ] = > string [ prices ] = > ( [1.. N array ] [ type ] = > string [ price ] = > string [ currency ] = > string ) [ opening_hours ] = > ( [1.. N array ] [ days ] = > string [ time ] = > string ) [ allow_offline ] = > boolean [ allow_uploads ] = > boolean [ allow_reviews ] = > boolean [ number_reviews ] = > int [ rating ] = > float [ user_posted_review ] = > boolean [ beacons ] = > ( [1.. N array ] = > ( [ ubid ] = > string
ii
Pˇr´ılohy
Web API
[ name ] = > string [ description ] = > string [ lat ] = > double [ lon ] = > double [ key ] = > int [ additional ] = > ( [1.. N array ] = > - sila signalu urcena poradim ( [ tech ] = > string [ data ] = > string ) ) [ content ] = > ( [1.. N array ] = > ( [ type ] = > string { image | text | youtube | href } [ heading ] = > string [ content ] = > string [ resource_id ] = > ( [0.. N array ] = > int ) ) ) [ discovered ] = > boolean ) ) [ resources ] = > ( [1.. N array ] = > ( [ id ] = > int [ type ] = > string [ size ] = > double [ path ] = > string [ metadata ] = > ( [ width ] = > int [ height ] = > int [ caption ] = > string ) ) ) ) )
iii
Pˇr´ılohy
A.1.5
Web API
get_institution_list
[ type ] = > get_institution_list [ udid ] = > string - unikatni identifikator zarizeni [ platform ] = > string { ios | android | win } [ version ] = > string - ve formatu x . x . x [ lat ] = > double [ lon ] = > double ODPOVED [ status ] = > boolean [ response ]= > ( [1.. N array ] [ revision ] = int [ logo ] = > string - url obrazku [ uiid ] = > string [ name ] = > string [ address ] = > string [ lat ] = > double [ lon ] = > double [ rating ] = > double [ number_reviews ] = > int )
A.1.6
get_institution_revision
[ type ] = > get_institution_revision [ udid ] = > string - unikatni identifikator zarizeni [ uiid ] = > string - instituce , ke ktere se pozadavek tyka [ platform ] = > string { ios | android | win } [ version ] = > string - ve formatu x . x . x ODPOVED [ status ] = > boolean [ response ]= > ( [ revision ] = int )
A.1.7
get_reviews
[ type ] = > get_reviews [ udid ] = > string - unikatni identifikator zarizeni [ uiid ] = > string - instituce , ke ktere se pozadavek tyka [ platform ] = > string { ios | android | win } [ version ] = > string - ve formatu x . x . x
iv
Pˇr´ılohy
Web API
[ from ] = > int - spodni limit [ to ] = > int - horni limit ODPOVED [ status ] = > boolean [ response ]= > ( [1.. N array ] [ added ] = > string [ rating ] = > double [ review ] = > string )
v
Pˇr´ılohy
A.2
App Store Review Guidelines
App Store Review Guidelines
V t´eto sekci budou uvedeny podm´ınky vztahuj´ıc´ı se k aplikaci Tagiee pro vstup aplikace do App Store. Podm´ınky se vztahuj´ı ke dnu 5. kvˇetna 2013. Podm´ınky jsou pro u ´plnost uvedeny v origin´aln´ım anglick´em znˇen´ı. Cel´e znˇen´ı App Store Review Guidelines bude uloˇzen´e na pˇriloˇzen´em CD.
A.2.1
Functionality
• Apps that crash will be rejected • Apps that exhibit bugs will be rejected • Apps that include undocumented or hidden features inconsistent with the description of the App will be rejected • Apps that use non-public APIs will be rejected • Apps that read or write data outside its designated container area will be rejected • Apps that download code in any way or form will be rejected • Apps that install or launch other executable code will be rejected • iPhone Apps must also run on iPad without modification, at iPhone resolution, and at 2X iPhone 3GS resolution • Apps that duplicate Apps already in the App Store may be rejected, particularly if there are many of them, such as fart, burp, flashlight, and Kama Sutra Apps. • Apps that are not very useful, unique, are simply web sites bundled as Apps, or do not provide any lasting entertainment value may be rejected • Apps that are primarily marketing materials or advertisements will be rejected • Multitasking Apps may only use background services for their intended purposes: VoIP, audio playback, location, task completion, local notifications, etc. • Apps that browse the web must use the iOS WebKit framework and WebKit Javascript vi
Pˇr´ılohy
App Store Review Guidelines
• Apps that arbitrarily restrict which users may use the App, such as by location or carrier, may be rejected • Apps must follow the iOS Data Storage Guidelines or they will be rejected
A.2.2
Metadata (name, descriptions, ratings, rankings, etc)
• Apps or metadata that mentions the name of any other mobile platform will be rejected • Apps with placeholder text will be rejected • Apps with descriptions not relevant to the application content and functionality will be rejected • App names in iTunes Connect and as displayed on a device should be similar, so as not to cause confusion • Small and large App icons should be similar, so as to not to cause confusion • Apps with App icons and screenshots that do not adhere to the 4+ age rating will be rejected • Apps with Category and Genre selections that are not appropriate for the App content will be rejected • Developers are responsible for assigning appropriate ratings to their Apps. Inappropriate ratings may be changed/deleted by Apple • Developers are responsible for assigning appropriate keywords for their Apps. Inappropriate keywords may be changed/deleted by Apple • Developers who attempt to manipulate or cheat the user reviews or chart ranking in the App Store with fake or paid reviews, or any other inappropriate methods will be removed from the iOS Developer Program • Apps which recommend that users restart their iOS device prior to installation or launch may be rejected • Apps should have all included URLs fully functional when you submit it for review, such as support and privacy policy URLs vii
Pˇr´ılohy
A.2.3
App Store Review Guidelines
Location
• Apps that do not notify and obtain user consent before collecting, transmitting, or using location data will be rejected • Apps that use location-based APIs for automatic or autonomous control of vehicles, aircraft, or other devices will be rejected • Apps that use location-based APIs for dispatch, fleet management, or emergency services will be rejected • Location data can only be used when directly relevant to the features and services provided by the App to the user or to support approved advertising uses
A.2.4
User interface
• Apps must comply with all terms and conditions explained in the Apple iOS Human Interface Guidelines • Apps that look similar to Apps bundled on the iPhone, including the App Store, iTunes Store, and iBookstore, will be rejected • Apps that do not use system provided items, such as buttons and icons, correctly and as described in the Apple iOS Human Interface Guidelines may be rejected • Apps that create alternate desktop/home screen environments or simulate multi-App widget experiences will be rejected • Apps that alter the functions of standard switches, such as the Volume Up/Down and Ring/Silent switches, will be rejected • Apple and our customers place a high value on simple, refined, creative, well thought through interfaces. They take more work but are worth it. Apple sets a high bar. If your user interface is complex or less than very good, it may be rejected
A.2.5
Damage to device
• Apps that encourage users to use an Apple Device in a way that may cause damage to the device will be rejected • Apps that rapidly drain the device’s battery or generate excessive heat will be rejected viii
Pˇr´ılohy
A.2.6
App Store Review Guidelines
Personal attacks
• Any App that is defamatory, offensive, mean-spirited, or likely to place the targeted individual or group in harms way will be rejected • Professional political satirists and humorists are exempt from the ban on offensive or mean-spirited commentary
A.2.7
Privacy
• Apps cannot transmit data about a user without obtaining the user’s prior permission and providing the user with access to information about how and where the data will be used • Apps that require users to share personal information, such as email address and date of birth, in order to function will be rejected • Apps that target minors for data collection will be rejected
A.2.8
Legal requirements
• Apps must comply with all legal requirements in any location where they are made available to users. It is the developer’s obligation to understand and conform to all local laws • Apps that contain false, fraudulent or misleading representations or use names or icons similar to other Apps will be rejected • Apps that solicit, promote, or encourage criminal or clearly reckless behavior will be rejected • Apps that enable illegal file sharing will be rejected • Apps that enable anonymous or prank phone calls or SMS/MMS messaging will be rejected • Developers who create Apps that surreptitiously attempt to discover user passwords or other private user data will be removed from the iOS Developer Program • Apps which contain DUI checkpoints that are not published by law enforcement agencies, or encourage and enable drunk driving, will be rejected
ix
Pˇr´ılohy
A.3
Instalaˇcn´ı pˇr´ıruˇcka syst´emu Tagiee
Instalaˇ cn´ı pˇ r´ıruˇ cka syst´ emu Tagiee
Pro nasazen´ı syst´emu Tagiee na server, je nutn´e splnit poˇzadavky na syst´em a dodrˇzet adres´aˇrovou strukturu. Pot´e uˇz staˇc´ı pˇrekop´ırovat soubory a syst´em bude funkˇcn´ı.
A.3.1
Z´ akladn´ı poˇ zadavky
• Server dostupn´ y na adrese tagiee.com • MySQL 5.5 a novˇejˇs´ı s moˇznost´ı vytvoˇren´ı trigger˚ u. • PHP 5.3 a novˇejˇs´ı. • Schopnost vytvoˇren´ı poddom´en. • Moˇznost nastaven´ı pr´av pro z´apis a u ´pravu soubor˚ u.
A.3.2
Adres´ aˇ rov´ a struktura
Pro nasazen´ı je tak´e nutn´e dodrˇzet tuto adres´aˇrovou strukturu :
x
Pˇr´ılohy
A.4
Uˇzivatelsk´a pˇr´ıruˇcka webov´eho rozhran´ı
Uˇ zivatelsk´ a pˇ r´ıruˇ cka webov´ eho rozhran´ı
Na u ´vodn´ı stranˇe webov´eho rozhran´ı http://tagiee.com lze vytvoˇrit u ´ˇcet do syst´emu Tagiee, poˇzadavkem na nov´eho uˇzivatele je zad´an´ı pˇrihlaˇsovac´ıch u ´daj˚ u a informace o uˇzivateli (bydliˇstˇe a kontaktn´ı u ´daje). Po u ´spˇeˇsn´e registraci je moˇzno vytvoˇrit novou instituci, kde je vyˇzadov´an jej´ı n´azev, unik´atn´ı identifik´ator a um´ıstˇen´ı. K vytvoˇren´ı instituce a jej´ı editace slouˇz´ı postrann´ı lev´e menu. Vytvoˇren´a instituce nen´ı aktivn´ı a pro jej´ı aktivaci je nutn´e vyplnit tyto u ´daje: • Popis instituce. • Logo instituce. • Telefonn´ı kontakt na instituci. • Emailov´ y kontakt na instituci. • Vyplnit cen´ık. • Vyplnit otev´ırac´ı doby instituce. • Pˇridat alespoˇ n jeden maj´ak. Pro pˇrid´an´ı maj´aku je potˇreba jeho n´azev. Nov´ y maj´ak t´eˇz nen´ı aktivn´ı a pro aktivaci se mus´ı vyplnit n´asleduj´ıc´ı u ´daje: • Popisek maj´aku. • Pˇrid´an´ı obsahu maj´aku. Text a odkaz k maj´aku se pˇridaj´ı pˇretaˇzen´ım do stˇredov´eho kontejneru. Obr´azkov´ y obsah se nepˇretahuje, ale po kliknut´ı na obr´azkov´ y element se zobraz´ı dialogov´e okno, jenˇz umoˇzn´ı pˇrid´an´ı obr´azk˚ u. Pokud nejsou nahr´any ˇz´adn´e obr´azky, rozhran´ı vyzve k jejich pˇrid´an´ı na dalˇs´ı str´ance. Video pomoc´ı YouTube se pˇrid´a obdobnˇe jako obr´azek.
xi
Pˇr´ılohy
A.5
Uˇzivatelsk´a pˇr´ıruˇcka mobiln´ı aplikace
Uˇ zivatelsk´ a pˇ r´ıruˇ cka mobiln´ı aplikace
Instalace aplikace se provede jej´ım staˇzen´ım z digit´aln´ıho obchodu App Store, aˇz tam bude uveˇrejnˇena. V dobˇe psan´ı diplomov´e pr´ace jeˇstˇe nebyla aplikace schv´alena hodnot´ıc´ı komis´ı. Aplikace pro sv˚ uj bˇeh vyˇzaduje pˇripojen´ı k internetu. Po jej´ım zapnut´ı se zobraz´ı v´ yzva k povolen´ı lokalizaˇcn´ıch sluˇzeb uvnitˇr aplikace. Pokud jsou lokalizaˇcn´ı sluˇzby dostupn´e a uˇzivatel se nach´az´ı ve 100 kilometrech od Plznˇe, nalezne se Z´apadoˇcesk´a univerzita. V pˇr´ıpadˇe nedostupnosti lokalizaˇcn´ıch sluˇzeb se lze pˇrihl´asit k Z´apadoˇcesk´e univerzitˇe pomoc´ı jej´ıho identifik´atoru zcu“. ” Pro nalezen´ı maj´ak˚ u lze vyuˇz´ıt GPS. Informaˇcn´ı maj´aky se nach´azej´ı v univerzitn´ım are´alu na Borech. V pˇr´ıpadˇe nalezen´ı pomoc´ı QR k´odu a 3m´ıstn´eho kl´ıˇce lze vyuˇz´ıt tyto obr´azky a kl´ıˇce :
(a) Maj´ ak katedry informatiky a v´ ypoˇcetn´ı techniky. Lze nal´ezt i pomoc´ı kl´ıˇce #169.
(b) Maj´ak fakulty aplikovan´ ych vˇed. Lze nal´ezt i pomoc´ı kl´ıˇce #391.
xii