Projektno delo

Velikost: px
Začni prikazovanje s strani:

Download "Projektno delo"

Transkripcija

1 Elvir Turan SISTEM ZA NADZOR ANDROID NAPRAVE Projektno delo MARIBOR, SEPTEMBER 2017

2 SISTEM ZA NADZOR ANDROID NAPRAVE Projektno delo Študent: Študijski program: Mentor: Somentor: Elvir Turan Univerzitetni študijski program Telekomunikacije red. prof. dr. Zdravko Kačič, univ. dipl. inž. el. univ. dipl. inž. tel. Danilo Zimšek

3 ZAHVALA Zahvaljujem se mentorju red. prof. dr. Zdravku Kačiču za pomoč pri pripravi projektnega dela. Prav tako se zahvaljujem somentorju univ. dipl. inž. tel. Danilu Zimšku. Posebna zahvala gre staršema, ki sta mi omogočila študij in me podpirala skozi celoten študij kakor tudi skozi življenje. Hvala bratu Selviru in punci Ameni za spodbudo pri nastajanju diplomske naloge.

4 SISTEM ZA NADZOR ANDROID NAPRAVE Ključne besede: Android, Android Studio, mobilna aplikacija, Java UDK: Povzetek V projektnem delu smo zasnovali in izvedli sistem za nadzor android naprave. Opisali smo mobilno platformo android, programski jezik PHP, spletni strežnik in podatkovne baze, ter razvojna okolja Android Studio in Eclipse. Razvit sistem je namenjen predvsem staršem za lažji nadzor nad otrokovo pametno android napravo. Starši lahko kontrolirajo napravo iz računalnika ali pa s svoje pametne naprave. Podatki iz otrokove naprave se shranjujejo v bazi. i

5 SYSTEM FOR CONTROLING ANDROID DEVICE KEYWORDS: Android, Android Studio, mobile application, Java UDK: Abstract In this project work, we developed a system for controling android device. We described the Android mobile platform, programming language php, web server and database, development environments Android Studio and Eclipse. The developed system is mainly intended for parents to control their child's smart android device easier. Parents can control device from computer or own android device. Data from child's device are saved in the database of the developed system. ii

6 Kazalo 1. UVOD ZASNOVA SISTEMA ZA NADZOR MOBILNE NAPRAVE Operacijski sistem Android Arhitektura operacijskega sistema Android RAZVOJNO OKOLJE Android studio Struktura Android aplikacij SPLETNI STREŽNIK IN PODATKOVNE BAZE Spletni strežnik Podatkovne baze Lokalne podatkovne baze Strežniške podatkovne baze PRENOS PODATKOV MED STREŽNIŠKO PODATKOVNO BAZO IN KONČNIM UPORABNIKOM PHP in prenos podatkov iz podatkovne baze preko PHP skript Prenos podatkov iz podatkovne baze preko vmesnika JDBC RAZVOJ SISTEMA ZA NADZOR MOBILNE NAPRAVE ANDROID Strežnik Apache MySQL Eclipse Strežniška podatkovna baza Spletna stran Sistem za upravljanje vsebin Registracija/prijava z računom Facebook Registracija/prijava z računom Google Protokol OAuth Registracija / prijava z obrazcem Struktura spletne aplikacije REST API Aplikacija za mobilne naprave Android Prijava s Facebook računom iz mobilne naprave Android Prijava z računom Google iz mobilne naprave Android iii

7 Prijava z računom ustvarjenim s pomočjo obrazca za registracijo Glavno okno - MainActivity Beleženje podatkov o klicih Pridobivanje podatkov o sporočilih SMS Pridobivanje podatkov o lokaciji Pridobivanje podatkov o nameščenih aplikacijah Shranjevanje podatkov v lokalno podatkovno bazo in prenos na spletni strežnik EKSPERIMENTALNI REZULTATI SKLEP VIRI iv

8 Kazalo slik Slika 1: Arhitektura sistema za nadziranje mobilne naprave... 2 Slika 2: Arhitektura operacijskega sistema Android [1]... 3 Slika 3: Ustvarjanje novega projekta v Android Studiu... 5 Slika 4: Izbira platforme, za katero bo namenjena aplikacija... 6 Slika 5: API verzije distribucij... 6 Slika 6: Proces izgradnje Android aplikacije [29]... 7 Slika 7: Struktura projekta Android aplikacije [29]... 8 Slika 8: Datoteka AndroidManifest.xml... 9 Slika 9: Primer kode AndroidManifest.xml... 9 Slika 10: Mapa /res/ Slika 11: Primer vsebin podmap v mapi /res/ Slika 12: Primer strukture projekta (v Android Studio) Slika 13: Prvi brskalnik WorldWideWeb [9] Slika 14: Grafični prikaz delovanja spletnega strežnika [20] Slika 15: Grafični prikaz tržnega deleža spletnih strežnikov po letih [21] Slika 16: Shematski prikaz podatkovnega sistema [11] Slika 17: Arhitektura odjemalec strežnik Slika 18: Grafični prikaz komunikacije med spletnim strežnikom in podatkovno bazo preko PHP skript Slika 19: Grafični prikaz JDBC ODBC most gonilnika Slika 20: Grafični prikaz ''domačega'' API gonilnika Slika 21: Grafični prikaz gonilnika omrežnega protokola Slika 22: Grafični prikaz četrtega tipa gonilnika JDBC Slika 23: Arhitektura platforme Eclipse [24] Slika 24: Prikaz tabel v podatkovni bazi Slika 25: Podatkovna baza v grafičnem vmesniku phpmyadmin Slika 26: Menu vrstica v primeru večjih zaslonov Slika 27: Menu vrstica v primeru zaslonov ožjih od 600px Slika 28: Grafični prikaz uporabe ''Facebook prijave'' po svetu [25] Slika 29: Ustvarjanje nove aplikacije v Facebook nadzorni plošči Slika 30: Pogovorno okno na socialnem omrežju Facebook Slika 31: ''User Access Tokens'' Uporabniški žetoni za dostop [25] Slika 32: Google API nadzorna plošča Slika 33: ID odjemalca za spletno aplikacijo Slika 34: Delovanje OAuth 2.0 protokola [27] Slika 35: Arhitektura REST Slika 36: Zgradba aplikacije Slika 37: Nastavitve za prijavo iz OS Android v Facebook nadzorni plošči Slika 38: Ustvarjanje razvojnega in sprostitvenega ključa Slika 39: Namestitev Google Play Services SDK v Android Studio Slika 40: Omogočanje Google servisov v aplikaciji Slika 41: Izbira Google servisa, ki ga bo aplikacija uporabljala Slika 42: Generiranje SHA-1 ''prstnega odtisa'' z orodjem keytool v

9 Slika 43: Prenos konfiguracijske datoteke google-services.json Slika 44: Zaslon za prijavo Slika 45: Zaslon MainActivity Slika 46: Dovoljenje za dostop do stikov Slika 47: Prehodi med stanji telefonije Slika 48: Mape in datoteke na strežniku Slika 49: Stran Contact Slika 50: Stran za prijavo v nadzorno ploščo Slika 51: Začetna stran nadzorne plošče Slika 52: Stran Locations Slika 53: Stran Messages Slika 54: Stran Contacts Slika 55: Stran Call log z zaprto in odprto stransko vrstico na mobilni napravi Slika 56: Stran Installed apps Kazalo tabel Tabela 1: Tržni delež spletnih strežnikov v letu 2017, po podatkih Netcraft-a [21] Tabela 2: Seznam najpogosteje uporabljenih atributov za HTML obrazec Tabela 3: Opis atributov uporabljenih v izvorni kodi za obrazec Kazalo izvorne kode Izvorna koda 1: Preusmeritev na facebook_login.php po kliku na Facebook gumb Izvorna koda 2: Koda, ki ustvari URL povezavo za preusmeritev uporabnika Izvorna koda 3: Izsek iz datoteke ''facebook.php'', kjer spletno mesto dobi žeton za dostop Izvorna koda 4: Izsek kode, kjer preberemo podatke o uporabniku Izvorna koda 5: Koda za prijavo v Google in pridobitev žetona za dostop Izvorna koda 6: Sintaksa HTML obrazca Izvorna koda 7: HTML obrazec za registracijo Izvorna koda 8: Preverjanje, če so obvezna polja izpolnjena Izvorna koda 9: Preverjanje dolžine in šifriranje gesla Izvorna koda 10: Stavek za iskanje uporabnika po e-poštnem naslovu Izvorna koda 11: if else stavek za preverbo, če je vneseno geslo pravilno Izvorna koda 12: Vrstica v kateri dodamo API ključ Izvorna koda 13: Maven Central Repository Izvorna koda 14: Facebook gumb za prijavo Izvorna koda 15: Deklariranje Facebook metod Izvorna koda 16: Metoda oncreate po inicializaciji Facebook SDK in potrebnih metod Izvorna koda 17: Metoda nextactivity(profile) Izvorna koda 18: Google gumb za prijavo Izvorna koda 19: GoogleSignInOptions objekt Izvorna koda 20: GoogleApiClient objekt vi

10 Izvorna koda 21: Registracija Google gumba za prijavo Izvorna koda 22: onactivityresult metoda Izvorna koda 23: Seznam parov ključ in vrednost, ki se uporabljajo kot parametri za HTTP zahtevo Izvorna koda 24: Objekta HttpClient in HttpPost Izvorna koda 25: Kodiranje parametrov Izvorna koda 26: Izvajanje HTTP zahteve Izvorna koda 27: Nastavitev alarma na vsako uro Izvorna koda 28: Dovoljenja za informacije o telefonskih storitvah Izvorna koda 29: Deklaracija sprejemnika CallsReceiver Izvorna koda 30: Dovoljenja za branje sporočil Izvorna koda 31: Aktivacija sprejemnika MessagesObserver Izvorna koda 32: Registracija razreda LocationManager Izvorna koda 33: Dovoljenja za sprejemnik AppsReceiver Izvorna koda 34: Odstranitev aplikacije iz seznama na strežniku Izvorna koda 35: Dovoljenja za servis AccessibilityService Izvorna koda 36: Metoda za obravnavno spremembe stanja okna Izvorna koda 37: Preverba porabljenega in dovoljenega časa uporabe aplikacije Izvorna koda 38: Objekt razreda Cursor kazalec Izvorna koda 39: Primer uporabe razreda ContentValues za shranjevanje podatkov Izvorna koda 40: Razred VolleyHelper Izvorna koda 41: Primer izvajanja operacij čakalne vrste vii

11 SEZNAM UPORABLJENIH KRATIC Kratica Angleški pomen Slovenski pomen ADT Android Development Tools Android razvojna orodja AOT Ahead of time Pred časom ART Android Runtime Android čas izvajanja DBMS Database managment system Sistem upravljanja baz podatkov FTP File transfer protocol Protokol prenosa datotek HTTP HyperText Transfer Protocol Protokol za prenos hiperteksta IDE Integrated Development Environment Integrirano razvojno okolje IP Internet protocol Internetni protokol JDK Java Development Kit Java razvojno orodje JDBC Java Database Connectivity Povezljivost Java podatkovne baze JIT Just in time compiler Sprotno prevajanje kode JNI Java Native Interface Javanski nativni vmesnik JVM Java virtual machine Java virtualni stroj OS Operating system Operacijski sistem QEMU Quick Emulator Hitri emulator REST Representational state transfer Arhitektura za izmenjavo podatkov med spletnimi storitvami SDK Software Development Kit Programsko razvojno orodje SMTP Simple mail transfer protocol Preprost protokol za prenos pošte viii

12 1. UVOD Od prvega računalnika, velikosti sobe, do današnjih računalnikov je minilo precej let. Leta 2007 je podjetje Apple predstavilo prvi pravi žepni računalnik oziroma pametni telefon. Dve leti kasneje je podjetje Google predstavilo mobilni operacijski sistem Android. Zaradi zmogljivosti, uporabnosti ter cenovne dosegljivosti je pametni telefon postal zelo priljubljen med ljudmi in ga tako danes poseduje okrog dve milijardi ljudi. Od predstavitve je sistem Android na svetovnem tržišču sprožil pravo poplavo pametnih telefonov z nameščenim sistemom android, ter postal zelo priljubljen med uporabniki. Glavni prednosti sistema Android sta, da je odprtokoden in brezplačen, kar omogoča cenejše in lažje razvijanje programov in programske opreme. Danes so pametni telefoni naprave, na katere se večina mladih obrne, ko želijo brskati po internetu, prenašati aplikacije ali opravljati druge dejavnosti. Za starše je skoraj nemogoče, da bi sedeli ob otroku in ga nadzirali, med tem ko ta brska po internetu. Poleg tega, da staršem to lahko povzroči zelo velike račune zaradi ne kontroliranih nakupov na spletu, lahko s tem izpostavimo otroke resnim spletnim grožnjam. Večina raziskav pa kaže tudi na to, da je vedno več otrok zasvojenih s pametnimi napravami ter da večino svojega prostega časa posvetijo pametnim napravam. Tako smo se odločili za razvoj aplikacije, ki bi olajšala staršem nalogo zaščite otrok pred nevarnostmi na spletu in neprimernimi vsebinami hkrati pa bi ta lahko časovno omejila uporabo pametnega telefona. 1

13 2. ZASNOVA SISTEMA ZA NADZOR MOBILNE NAPRAVE Popoln nadzor nad mobilno napravo skoraj-da ni mogoč, saj tega ne dopušča niti sam operacijski sistem. Sistem za nadziranje mobilne naprave lahko omogoči dostop do določenih podatkov, ki jih potrebujemo, da zaščitimo otroke pred nevarnostmi na spletu. Slika 1: Arhitektura sistema za nadziranje mobilne naprave Sistem zasnovan na arhitekturi, kot jo kaže slika 1 omogoča shranjevanje podatkov iz mobilne naprave v spletni strežnik, kar omogoča uporabniku dostop do podatkov. Uporabnik pred nameščanjem aplikacije na mobilno napravo ustvari preko spletnega obrazca račun ali pa se registrira z računom družabnih omrežij Facebook ali Google. Ob vsakem ponovnem zagonu naprave se aplikacija samodejno zažene in beleži podatke. V primeru, ko je naprava povezana z internetom, aplikacija pošilja podatke na spletni strežnik, sicer pa jih shranjuje v lokalno podatkovno bazo dokler, se mobilna naprava ne poveže z internetom. V aplikaciji lahko uporabniki oz. starši izbirajo med različnimi možnimi podatki, ki jih želijo pridobivati, kot so imenik, klici, sporočila, lokacija in nameščene aplikacije. Po vsakem končanem klicu aplikacija zabeleži telefonsko številko sogovornika, čas klica, tip klica ter dolžino pogovora. Podobno se po vsakem prejetem oz. poslanem sporočilu v podatkovno bazo shrani številka pošiljatelja oz. prejemnika, vsebina sporočila in čas sporočila. Uporabniki sistema lahko vidijo lokacije, ki se beležijo v napravi tekom dneva, ter tudi vsako na novo nameščeno aplikacijo na mobilni napravi Operacijski sistem Android Android je operacijski sistem, namenjen predvsem za uporabo na mobilnih napravah, ki temelji na prirejenem jedru Linux. Prvotna različica androida je nastala v mestu Palo Alto v Kaliforniji leta 2003 pod okriljem podjetja Android Inc. Operacijski sistem je bil prvotno razvijan kot napredni operacijski sistem za digitalne kamere. Leta 2005 je podjetje Google kupil hitro rastoče podjetje Android Inc., ter ga razširil v poslovno združenje več podjetij, imenovano Open Handset Alliance (OHA). Open Handset Alliance združuje več podjetij, kot so proizvajalci mobilnih naprav (npr. HTC, Motorola, Samsung), ponudniki telekomunikacijskih storitev, razvijalci aplikacijskih rešitev in proizvajalci čipov. OHA je bila ustanovljena in predstavljena leta 2007 s ciljem, da bi razvili prvo odprtokodno in celovito rešitev za mobilne naprave. Prvi komercialno dostopen pametni telefon s sistemom 2

14 Android je bil HTC Dream, znan tudi kot T-Mobile G1, ki je bil objavljen leta Od takrat do danes je bil operacijski sistem veliko-krat posodobljen. Trenutna različica je Nougat (API 24-25). [1] Arhitektura operacijskega sistema Android Operacijski sistem Android lahko razdelimo v štiri programske nivoje, pri čemer je osnovni nivo na katerem temelji Android, spremenjeno jedro Linux. Preostali trije nivoji so sestavljeni iz aplikacij, aplikacijskih ogrodij in knjižnic. Slika 2: Arhitektura operacijskega sistema Android [1] Operacijski sistem android ima v osnovi v platformo vključen nabor osnovnih aplikacij, kot so aplikacija za e-pošto, kratka sporočila, koledar, imenik in še veliko drugih. Privzeto nameščene aplikacije nimajo posebnega statusa in uporabnik lahko sam namesti oz. izbere katera aplikacija bo privzeta za določeno opravilo. Uporabnik lahko namesti aplikacije iz trgovine Google Play, v kateri se nahaja več kot milijon različnih aplikacij. Aplikacije za operacijski sistem Android so napisane v programskem jeziku Java. Glavna prednost operacijskega sistema Android je odprta razvojna platforma, ki omogoča razvijalcem poln dostop do ogrodja programskega vmesnika. Celoten nabor funkcij je na voljo prek API-jev, napisanih v programskem jeziku Java. API-ji sestavljajo modularne 3

15 komponente sistema, ki omogočajo poenostavljeno uporabo modularnih komponent sistema in storitev. Temelj operacijskega sistema Android je nabor C/C++ knjižnic. Funkcionalnosti knjižnic uporablja več komponent sistema, lahko pa jih tudi uporabljajo razvijalci za dostop do strojnih komponent naprave. Končni uporabniki aplikacij nimajo dostopa do teh knjižnic. Na istem sloju kot knjižnice se nahaja tudi Android izvajalno okolje. Do različice Android 5.0 (API 21) je operacijski sistem Android uporabljal Dalvik kot proces navideznega stroja in prevajalnik JIT, kar je omogočalo prenos aplikacij na več različnih naprav, brez ponovnega pisanja izvorne kode. Od različice 5.0 se uporablja prevajalnik ART, ki vse aplikacije prevede ob zagonu (AOT). Tako se vsaka aplikacija izvaja v svojem lastnem procesu s svojo instanco navideznega stroja. Če aplikacija dobro deluje na ART, potem mora delovati tudi na Dalvik-u, vendar obratno ni nujno. Kot smo že omenili temelji operacijski sistem Android na spremenjeni različici jedra Linux, vendar ker ima Androidova različica dodatne arhitekturne spremembe, se že precej razlikuje od izvornega jedra OS Linux. Jedro Linuxa omogoča Androidu izkoristiti glavne prednosti varnostnih funkcij, upravljanje pomnilnika in procesov. [1,2,3] 4

16 3. RAZVOJNO OKOLJE Razvojno okolje za Android vključuje obsežen nabor razvojnih orodij, kot so: razhroščevalnik (angl. debugger), knjižnice, dokumentacija, različne primere z izvorno kodo, pripomočke za učenje in posnemovalnik (angl. emulator), ki temelji na QEMU. Do konca leta 2014 je bilo uradno podprto integrirano razvojno okolje je bilo Eclipse, z dodanim priključkom ADT. Od leta 2015 je uradno podprt IDE Android Studio, ki ga je razvilo podjetje Google. V istem letu je Google uradno opustil ADT, da bi se lahko osredotočil na razvoj Android Studia, kot uradnega IDE. [4] 3.1. Android studio Android studio je uradno razvojno okolje za operacijske sisteme Android. Razvojno okolje je bilo predstavljeno prvič leta 2013 na Google I/O konferenci. Najprej je bila predstavljena beta verzija, do leta 2014, ko je bila predstavljena prva stabilna verzija. [5] Postopek za razvoj aplikacij za OS Android se konceptualno ne razlikuje od postopka za razvoj aplikacij za druge platforme. - Nastavitev delovnega okolja V tej fazi namestimo razvojno okolje (Android Studio), ter ustvarimo novi projekt. Za ustvarjanje novega projekta kliknemo v menijski vrstici zgoraj na: File > New > New Project. Odpre se novo okno, kot ga kaže slika 3. Slika 3: Ustvarjanje novega projekta v Android Studiu 5

17 Po kliku na gumb naprej, izberemo različico oz. platformo, za katero bomo razvijali aplikacijo slika 4. Slika 4: Izbira platforme, za katero bo namenjena aplikacija S klikom na povezavo ''Help me choose'' se odpre okno, kjer se prikaže razširjenost uporabe določene platforme slika 5. Slika 5: API verzije distribucij 6

18 V zadnjem koraku moramo izbrati vrsto glavnega zaslona aplikacije oz. lahko izberemo tudi izbiro brez in naknadno ustvarjamo zaslone. - Razvoj aplikacije - Izgradnja in zagon (angl. Build and run) V tej fazi se zgradi paket APK, ki ga lahko namestimo in zaženemo v emulatorju ali napravi z operacijskim sistemom Android. - Objava aplikacije Za izgradnjo APK paketov uporablja Android Studio orodje Gradle, ki je napredno orodje za avtomatizacijo in upravljanje postopka izgradnje, hkrati pa omogoča tudi prilagodljive konfiguracije. Vsaka konfiguracija lahko definira lastne nize kod in virov. Gradle in Android vtičnik tečeta neodvisno od programa Android Studio. Uporaba programa Android Studio ni nujna za razvijanje aplikacij za operacijski sistem Android, saj lahko paket APK ustvarimo tudi s pomočjo ukazne vrstice. [29] Proces gradnje vključuje številna orodja in procese za pretvorbo projekta v APK paket. Koraki izgradnje APK paketa: - Prevajalniki pretvorijo izvorno kodo v datoteke DEX, ki vključujejo bytecode, ki tečejo na Android napravah, in vse drugo v prevedene vire. - Datoteke DEX in prevedeni viri se zberejo v en paket APK, vendar mora biti, preden se lahko aplikacija namesti v napravi, APK podpisan. - APK je lahko podpisan na dva načina: v primeru, namena testiranja aplikacije se lahko podpisovanje izvede s povezovanjem naprave na računalnik prek kabla. V primeru objave aplikacije, je postopek daljši in je potrebno v samo aplikacijo dodati ključ. Slika 6: Proces izgradnje Android aplikacije [29] 7

19 Za izgradnjo konfiguracij po meri moramo spremeniti eno ali več konfiguracijskih datotek za gradnjo, ali build.gradle datoteke. Pri ustvarjanju novega projekta Android Studio avtomatsko ustvari nekatere datoteke s privzetimi nastavitvami. Struktura projekta aplikacije za operacijski sistem Android je prikazana na sliki Struktura Android aplikacij Slika 7: Struktura projekta Android aplikacije [29] Android SDK orodja zbirajo kodo, skupaj z vsemi podatki in datotekami, v eno datoteko oz. paket s končnico.apk. Datoteke APK se na Android napravah uporabljajo za namestitev aplikacije. Aplikacije, ki tečejo na operacijskem sistemu Android, ne morejo dostopati do poljubnih komponent sistema, ampak samo do tistih, za katere dobi dovoljenje. Aplikacija lahko zahteva dovoljenja za dostop do podatkov, ki jih potrebuje, kar pa je odvisno od uporabnika, če jih bo dopustil ali pa zavrnil. Komponente aplikacij so gradniki Android aplikacij, pri čemer vsaka komponenta predstavlja vstopno točko preko katere lahko sistem ali uporabnik vstop v aplikacijo. Obstajajo štiri različne vrste komponent, pri čemer ima vsaka komponenta svoj namen in življenjski cikel: - Dejavnosti (angl. Activities), vstopna točka za interakcijo z uporabnikom. Predstavlja en zaslon z uporabniškim vmesnikom. Aplikacija lahko ima eno ali več dejavnosti in oblikujejo povezan uporabniški vmesnik. Vsaka dejavnost je neodvisna od drugih. Dejavnosti so implementirane kot podrazred razreda Activity. Vsaka dejavnost se lahko nahaja v enem izmed treh stanj: aktivnem ali tekočem, čakajočem in zaustavljenem. - Storitve (angl. Services), tečejo v ozadju in nimajo uporabniškega vmesnika. Izvaja dolgotrajne operacije. Tudi če uporabnik preklopi na drugo aplikacijo se storitev 8

20 lahko zažene in nadaljuje v ozadju. Poznamo tri tipe storitev: načrtovana (angl. Scheduled), zagnana (angl. Started), vezana (angl. Bound). - Broadcast sprejemniki (angl. Broadcast receivers), omogoča sistemu, da reagira na prihajajoče dogodke (npr. prispelo sporočilo SMS). Lahko poženejo dejavnost ali storitev kot odziv na dogodek, ali obvestijo uporabnika v vrstici za obvestila. - Ponudniki vsebin (angl. Content providers) predstavljajo niz podatkov, ki jih lahko pridobimo iz določene aplikacije in jih lahko shranimo v datotečnem sistemu, podatkovni bazi ali na kateri koli drugi lokaciji za shranjevanje. Prve tri tipe komponent se aktiviramo z asinhronim sporočilom, imenovanim intent. Intent povezuje posamezne komponente in je ustvarjen z objektom Intent. Za dejavnosti in storitve določa intent dejanje, ki ga določena dejavnost ali storitev mora opraviti. Za sprejemnike definira intent napoved. Četrti tip komponent se ne aktivira z intentom. [6] Komponente aplikacije, ki se lahko zaženejo, morajo biti določene v datoteki AndroidManifest.xml, sicer operacijski sistem ne zazna komponente. Poleg tega, da datoteka Manifest vsebuje komponente aplikacije, določa še: - Uporabniška dovoljenja, ki jih aplikacija potrebuje - Najnižjo API različico, ki predstavlja različico platforme Android, na kateri bo aplikacija delovala - Strojna in programska oprema, ki jo aplikacija uporablja ali zahteva Slika 8: Datoteka AndroidManifest.xml Slika 9: Primer kode AndroidManifest.xml 9

21 Na sliki 8 je prikazana mapa manifests, v kateri se nahaja datoteka AndroidManifest.xml. Opis posameznih elementov datoteke AndroidManifest, ki so tudi prikazani na sliki 9: <application> vsebuje atribute, ki definirajo temo in ikono aplikacije <activity> v tem elementu atribut android:name podaja ime podrazreda razreda Activity. Znotraj tega elementa še lahko dodamo dejanja za določeno dejavnost, na primer, primarno dejavnost, ki se prikaže ob novem zagonu aplikacije. <service> je element za storitve, podobno kot pri dejavnostih, atribut android:name podaja ime podrazreda razreda Activity, atribut android:permission pa določa dovoljenja za posamezno storitev. <receiver> predstavlja element za broadcast sprejemnike. <provider> je rezerviran za ponudnike vsebin Aplikacija za operacijski sistem Android je sestavljena iz več kot le programske kode. Za delovanje aplikacije so potrebni viri (angl. Resources), ki so ločeni od izvorne kode. Viri predstavljajo grafično podobo aplikacije. Viri omogočajo preprosto posodabljanje in optimiziranje aplikacije brez posega v programsko logiko. Viri se nahajajo v mapi /res/. Slika 10: Mapa /res/ Znotraj mape res imamo več podmap, kot kaže slika 10: - drawable: vsebuje slikovne datoteke, npr. ozadje določene dejavnosti (activity ja). - layout: vsebuje datoteke XML, ki so grafična podoba določene dejavnosti oz. vsaka datoteka XML znotraj te mape predstavlja en zaslon v aplikaciji - mipmap: je mapa v kateri je shranjena ikona aplikacije - values: predstavlja skupek pomožnih datotek oz. alternativnih virov za različne konfiguracije. Na primer, v tej mapi lahko definiramo jezikovne nize v XML datotekah, ki jih Android kasneje ustrezno uporabi glede na nastavitev jezika uporabnika. [7] Vse omenjene datoteke v omenjenih mapah predstavljajo grafično podobo aplikacije. Primer datotek znotraj podmap v mapi res so prikazani na sliki 11. Znotraj projekta poleg virov je še izvorna koda in orodje Gradle. Primer celotne strukture projekta v razvojnem okolju Android Studio je prikazan na sliki

22 Slika 11: Primer vsebin podmap v mapi /res/ Slika 12: Primer strukture projekta (v Android Studio) 11

23 4. SPLETNI STREŽNIK IN PODATKOVNE BAZE 4.1. Spletni strežnik Spletni strežnik je računalniški sistem, kjer so shranjene različne informacije. V osnovi je spletni strežnik namenjen gostovanju spletnih strani, vendar ga lahko uporabimo tudi za shranjevanje različnih podatkov oz. datotek, kot igralni strežnik, strežnik za e-pošto, itd. Prvi spletni strežnik je izumil fizik Tim Berners - Lee, z namenom olajšati izmenjavo računalniško shranjenih informacij med znanstveniki. Ideja je bila prenos podatkov preko interneta z uporabo označevalnega jezika. Projekt je rezultiral v nastanek prvega brskalnika imenovanega WorldWideWeb (slika 13) in prvega spletnega strežnika. Slika 13: Prvi brskalnik WorldWideWeb [9] Spletni strežnik se v bistvu nanaša na programsko in strojno opremo, saj računalniški sistem (spletni strežnik) predstavljata računalnik na katerem je shranjena gostujoča spletna stran in programska oprema, ki teče na tem računalniku. Spletno stran predstavlja kolekcija spletnih strani, napisanih v označevalnem jeziku HTML. Osnovna funkcija spletnega strežnika je, da prikaže gostujočo spletno stran na zahtevo uporabnika, z obdelavo zahteve, posredovane z osnovnim omrežnim protokolom HTTP. 12

24 Vsaka spletna stran ima edinstven naslov URL. Uporabniški posrednik, ki je običajno brskalnik, pošlje zahtevek HTTP spletnemu strežniku, tako da uporabnik vpiše v naslovno vrstico URL ali klikne na povezavo do spletne strani. V ozadju procesa se URL pretvori v IP naslov, ki usmeri proces do spletnega strežnika. Strežnik se odzove tako, da dostavi brskalniku dokumente HTML in dodatne vsebine, kot so slike, skripte ipd. Odziv strežnika je prikazan na sliki 14. [8,9,10] Slika 14: Grafični prikaz delovanja spletnega strežnika [20] Slika 15: Grafični prikaz tržnega deleža spletnih strežnikov po letih [21] Izdelek Proizvajalec Januar Odstotek Februar Odstotek Sprememba IIS Microsoft 821,905, % 773,552, % Apache Apache 387,211, % 374,297, % nginx NGINX,Inc. 317,398, % 348,025, % GWS Google 17,933, % 18,438, % Tabela 1: Tržni delež spletnih strežnikov v letu 2017, po podatkih Netcraft-a [21] 13

25 Najbolj uporabljeni spletnih strežniki so: IIS, Apache, nginx in GWS. Vrsto let je bil vodilni spletni strežnik Apache, vendar je v zadnjih letih vodilno mesto prevzel IIS. Tržni delež spletnih strežnikov v zadnjih 21 let je grafično prikazan na sliki Podatkovne baze Obstaja več definicij za podatkovno bazo, navedli bomo nekatere od njih: - Podatkovna baza je upravljana zbirka povezanih podatkov, shranjena na računalniškem sistemu, deljena med več uporabniki, zaščitena z varnostnimi mehanizmi in shranjena z nadzorovano redundantnostjo. (Stamper and Price) - Podatkovna baza je organizirana zbirka logično povezanih podatkov in opisov le teh, načrtovana tako, da zadovoljuje informacijske potrebe organizacije. (Connolly and Begg) - PB je zbirka medsebojno povezanih shranjenih podatkov, ki zadovoljujejo potrebe različnih uporabnikov znotraj ene ali več organizacij. (T. J. Teorey) - PB je neredundantna zbirka vzajemno povezanih podatkov, ki se uporabljajo za izvajanje ene ali več aplikacij. (IBM: IMS/VS) V splošnem lahko rečemo, da je podatkovna baza knjižnica podatkov oz. organizirana zbirka podatkov. To je zbirka shem, tabel, poizvedb, poročil, pogledov in drugih objektov. Dostop do podatkovne baze in delo s podatkovno bazo, uporabnikom omogoča sistem za upravljanje podatkovne baze ali krajše SUPB (angl. DataBase Management System - DBMS). Shematski prikaz podatkovnega sistema je prikazan na sliki 16. Standardni jezik za delo s podatkovno bazo je SQL. Jezik je standardiziran po standardu ISO. [11,12,13] Prednosti uporabe podatkovne baze: - Nadzorovano je podvajanje podatkov in posledično je vzdrževanje podatkov manj zahtevno. - Dostop do podatkov je omogočen neomejenemu številu uporabnikov in hkrati varovan pred nepooblaščenim dostopom. - Spremembe podatkov v datotekah ne vplivajo na obstoječe aplikacije. - Lažja nadgradnja. - Omogoča arhiviranje in obnovo podatkov. Slabosti uporabe podatkovnih baz: - Cena strojne opreme. - Cena programske opreme, za sisteme, ki ne sodijo med prosto dostopne 14

26 Slika 16: Shematski prikaz podatkovnega sistema [11] Lokalne podatkovne baze Android ponuja več možnosti za trajno shranjevanje podatkov iz aplikacij. Izbrana rešitev je odvisna od potreb uporabnika, na primer ali naj bodo podatki zasebni znotraj aplikacije, ali pa dostopni drugim uporabnikom in koliko prostora potrebujejo podatki za shranjevanje. [14] Eden izmed možnih načinov shranjevanja podatkov na operacijskem sistemu Android je lokalna podatkovna baza. Lokalne podatkovne baze, ki jih lahko uporabimo na mobilnih napravah so npr. BerkeleyDB, Couchbase Lite, SQLite itd. Operacijski sistem android zagotavlja popolno podporo za podatkovno bazo SQLite in jo bomo zato bolj podrobno predstavili. Podatkovno bazo SQLite uporabljamo v primeru, ko želimo trajno shranjevati podatke iz aplikacije, ki bodo dostopni znotraj same aplikacije ne pa tudi med aplikacijami v operacijskem sistemu. SQLite je odprtokodna podatkovna baza in je zato brezplačna za uporabo. SQLite je kompaktna knjižnica in z vsemi možnimi funkcijami je velikost knjižnice manjša od 500 KB, kar pa je odvisno od ciljne platforme. Prednost uporabe SQLite je, da je vgrajena v operacijski sistem Android, kar pomeni, da jo ni potrebno posebej nameščati. SQLite ne zahteva posebnih uporabniških pravic, ni potrebne dodatne konfiguracije, ter ni strežniškega procesa, ki bi ga bilo potrebno začeti, prekiniti ali začasno ustaviti. [15] Strežniške podatkovne baze Za dostop do podatkov iz več različnih naprav se uporabljajo strežniške podatkovne baze. Strežniške podatkovne baze delujejo po arhitekturi odjemalec - strežnik (angl. client - 15

27 server). Primer lastniških podatkovnih baz so Oracle, DB2, Informix in Microsoft SQL Server; primera javno dostopnih pa sta Ingres in MySQL. Prednosti arhitektura odjemalec/strežnik (povzetek): [11] Medsebojna povezljivost (interoperability) - ključne komponente delujejo neodvisno po skupnem protokolu. Skalabilnost (scalability) - vsako od ključnih komponent lahko zamenjamo, brez večjih sprememb drugod. Prilagodljivost (adaptability) - enostavno vključevanje novih tehnologij. Podatkovna integriteta (data integrity) - vzdržuje se le na podatkovnem strežniku, zato je vzdrževanje enostavno. Dosegljivost (accessability) - podatki so enostavno dosegljivi s pomočjo omrežja in aplikacij odjemalca. Učinkovitost (performance) - učinkovitost lahko optimiziramo z optimizacijo strojne opreme in procesov. Redundančnost (redundancy) - z vgradnjo redundančnih komponent lahko omogočimo delovanje sistema, kljub izpadu določenih komponent. 16

28 5. PRENOS PODATKOV MED STREŽNIŠKO PODATKOVNO BAZO IN KONČNIM UPORABNIKOM V primeru strežniške podatkovne baze sta odjemalec in strežnik na različnih napravah in je potrebna povezava z bazo. Poznamo dva načina komunikacije med odjemalcem in strežnikom: prenos podatkov preko PHP skript in z uporabo vmesnika JDBC PHP in prenos podatkov iz podatkovne baze preko PHP skript PHP (angl. PHP Hypertext Preprocessor, izvirno pa Personal Home Page Tools) oz. slovensko orodja za osebno spletno stran. PHP je odprtokodni programski jezik, ki se večinoma uporablja za razvoj dinamičnih spletnih vsebin. PHP primarno teče na spletnem strežniku, kjer jemlje PHP izvorno kodo za vhod in generira spletno stran kot izhod. [18] Glavna področja, kjer se uporabljajo PHP skripte so: - Skriptiranje na strežniku (angl. Server side scripting), to je glavni namen uporabe PHP skript. - Skripte ukazne vrstice (angl. Command line scripting). PHP skripte se lahko zaženejo brez strežnika ali brskalnika, potreben je samo razčlenjevalnik PHP. - Pisanje namiznih aplikacij (angl. Writing desktop applications). PHP lahko uporabljamo na vseh večjih operacijskih sistemih ter podpira večino spletnih strežnikov. Ena izmed najpomembnejših funkcij v PHP-ju je podpora številnim podatkovnim bazam. [19] Slika 17: Arhitektura odjemalec strežnik Na sliki 17 je prikazan prenos podatkov med odjemalcem in strežnikom, vendar je komunikacija med spletnim strežnikom in podatkovno bazo bolj kompleksna slika 18. Slika 18: Grafični prikaz komunikacije med spletnim strežnikom in podatkovno bazo preko PHP skript Kot smo že omenili, uporabnik preko brskalnika pošlje HTTP zahtevo na spletni strežnik za prikaz spletne strani. Spletni strežnik prejme zahtevo in jo posreduje naprej do PHP prevajalnika za obdelavo. PHP prevajalnik razčleni skripto, v kateri je tudi zapisana zahteva 17

29 za povezavo s podatkovno bazo ter podatki za prijavo. Ko se vzpostavi povezava s podatkovno bazo se pošiljajo podatki iz podatkovne baze nazaj do PHP prevajalnika. Po prejetih podatkih iz podatkovne baze, se izvajanje PHP skript zaključi ter se rezultati oblikujejo v HTML obliki in posredujejo nazaj do spletnega strežnika. Spletni strežnik pošlje odgovor brskalniku v obliki HTML Prenos podatkov iz podatkovne baze preko vmesnika JDBC JDBC je vmesnik za programiranje aplikacij za programski jezik Java, ki določa, kako lahko odjemalec dostopa do baze podatkov in zagotavlja metode za poizvedovanje in posodabljanje podatkov v bazo podatkov. Most JDBC ODBC omogoča povezavo z vsemi dostopnimi viri podatkov ODBC v okolju gostitelja virtualnega računalnika Java (angl. JVM). Sun Microsystems je leta 1997 izdal JDBC kot del JDK. Razredi JDBC so v paketu Java (java.sql in javax.sql). JDBC omogoča, da obstaja več implementacij, ki jih uporablja ista aplikacija. Aplikacijski programski vmesnik zagotavlja mehanizem za dinamično nalaganje pravilnih Java paketov in njihovo registracijo z upraviteljem gonilnikov JDBC. Gonilniki JDBC so vmesniki na uporabniški strani, ki so nameščeni na uporabniški napravi in omogočajo pretvorbo zahtev Java programov v protokole, ki jih DBMS razume. [16] Obstajajo štiri različne vrste gonilnikov JDBC: - Most JDBC ODBC. Gonilniki delujejo kot most med JDBC in ODBC, kar omogoča JDBC dostop, z uporabo večine standardnih gonilnikov ODBC. Prednost uporabe mosta JDBC ODBC je, da je enostaven za uporabo in se hitro in enostavno poveže s podatkovno bazo. Slabost je, da moramo gonilnik ODBC namestiti na uporabniški napravi, zmogljivost pa se poslabša tudi zaradi pretvorbe klica metode JDBC v klic funkcije ODBC. Slika 19: Grafični prikaz JDBC ODBC most gonilnika - Nativni (angl. Native) API, gonilnik uporablja odjemalske knjižnice baze podatkov. Komunikacija poteka neposredno s podatkovno bazo. Zmogljivost tega gonilnika je večja kot JDBC ODBC most gonilnika. Slabost pri uporabi tega gonilnika je, da moramo gonilnik namestiti na vsaki uporabniški napravi. 18

30 Slika 20: Grafični prikaz nativnega API gonilnika - Gonilnik omrežnega protokola gonilniki so v celoti napisani v Java jeziku. Uporablja vmesni program na strežniku, ki neposredno ali posredno pretvarja klic JDBC v protokol baze podatkov. Ne potrebujejo knjižnic na strani odjemalca. Slabost gonilnika omrežnega protokola je potreba po omrežni podprtosti na strani odjemalca, ter specifično kodiranje za vmesno programsko opremo. Slika 21: Grafični prikaz gonilnika omrežnega protokola - Četrti tip gonilnikov so ''čisti'' Java gonilniki, ki so v celoti napisani v jeziku Java, in klice JDBC pretvarjajo neposredno v protokol baze podatkov. Gonilniki tega tipa imajo boljšo učinkovitost kot vsi ostali gonilniki. Pri tem za uporabo ni potrebna nobena programska oprema na strani odjemalca. Pomanjkljivost ''čistih'' Java gonilnikov je, da so odvisni od baze podatkov. [16,17] Slika 22: Grafični prikaz četrtega tipa gonilnika JDBC 19

31 6. RAZVOJ SISTEMA ZA NADZOR MOBILNE NAPRAVE ANDROID Osrednji del projektnega dela je razvoj sistema za nadzor mobilne naprave Android. Sistem sestavljajo: aplikacija za mobilno napravo Android, strežniška podatkovna baza in spletna stran oz. sistem za upravljanje vsebin. Skripte za prenos podatkov iz mobilne naprave v podatkovno bazo delujejo na strežniku Apache, ki ga bomo na kratko predstavili v nadaljevanju. Skripte za prenos podatkov in spletna stran bodo izvedeni v programskem jeziku PHP, izdelani v razvojem okolju Eclipse, ki ga bomo prav tako podrobneje predstavili v nadaljevanju Strežnik Apache Strežnik Apache je brezplačna in odprtokodna programska platforma za spletne strežnike, ki teče v ozadju. Apache deluje na večini operacijskih sistemov in je izdan pod pogoji Apache License 2.0. Kakor smo omenili že prej, je Apache med najbolj uporabljenimi strežnškimi programi. Apache http strežnik je ustvarjen leta 1995 in je že od aprila 1996 najbolj priljubljen spletni strežnik. Celoten projekt upravlja skupina prostovoljcev. Osnovne funkcije strežnika Apache lahko dokaj hitro in enostavno razširimo s pomočjo dodatnih razširitev. Strežnik Apache ponuja vrsto storitev, kot so: hipertekstni prenosni protokol (http), protokol za elektronsko pošto SMTP, DNS za preslikavo domenskih imen v njihov ustrezni IP naslov in protokol za prenos datotek FTP. [22] 6.2. MySQL MySQL je odprtokodni sistem za upravljanje s podatkovnimi bazami, ki deluje na principu odjemalec strežnik. MySQL deluje na večini operacijskih sistemov. Številna spletna mesta in aplikacije uporabljajo bazo podatkov MySQL. Tudi strežnik Apache ima podporo za MySQL. MySQL je napisan v programskih jezikih C in C++. Strežnik Apache v kombinaciji z MySQL ponuja tudi grafični vmesnik phpmyadmin za lažje delo s podatkovno bazo. [23] 6.3. Eclipse Eclipse je integrirano razvojno okolje. Platforma Eclipse je odprtokodna in po zasnovi ne nudi veliko funkcij, vendar pa jo lahko dokaj enostavno in hitro razširimo z namestitvijo dodatnih vtičnikov. Deluje na večini operacijskih sistemov. Platforma je strukturirana kot podsistemi, ki se izvajajo v enem ali več vtičnikov slika 23. [24] 20

32 Opis komponent platforme: Slika 23: Arhitektura platforme Eclipse [24] - Izvedbena platforma (angl. Platform Runtime), določa razširitveno točko, ki dinamično odkriva vtičnike in vzdržuje informacije o vtičnikih. - Delovni prostor (angl. Workspace), določa API za ustvarjanje in upravljanje virov, ki jih proizvajajo orodja in so shranjeni v datotečnem sistemu. - Uporabniški vmesnik (angl. Workbench), zagotavlja dodatna orodja za izgradnjo uporabniških vmesnikov. Določa točke razširitve za dodajanje sestavnih delov uporabniškega vmesnika. - Sistem pomoči (angl. Help), določa razširitvene točke za vtičnike, ki zagotavljajo pomoč ali drugo dokumentacijo. - Podpora ekipa (angl. Team support), določa skupinski programski model za upravljanje in različico virov Strežniška podatkovna baza Za strežniško podatkovno bazo smo izbrali MySQL, ki deluje na strežniku Apache. Za delovanje sistema uporabljata podatkovno bazo aplikacija na mobilni napravi Android in spletna stran oz. sistem za upravljanje vsebin (angl. Control Management System). Podatkovno bazo smo poimenovali ''parental_control'' in v njej bo osem tabel. Vsaka izmed tabel bo shranjevala podatke za različne funkcije sistema. Podatkovna baza ''parental_control'' in tabele znotraj podatkovne baze prikazuje slika Tabela ''users'' bo shranjevala podatke o registriranih uporabnikih, beležila bo podatke tudi o tem, kdaj se je uporabnik nazadnje prijavil v sistem. 21

33 - Tabela ''settings'' bo hranila nastavitve o vklopljenih funkcijah, ki jih želi uporabnik uporabljati v okviru sistema oz. aplikacije. - Tabela ''deviceinfo'' bo hranila podatke o napravi (proizvajalec, model mobilne naprave in verzija operacijskega sistema), v kateri je nameščena aplikacija. - Tabela ''contacts'' bo hranila kontakte prenesene iz mobilne naprave. - Tabela ''sms'' bo hranila sporočila iz mobilne naprave. - Tabela ''calllog'' bo shranjevala klice iz mobilne naprave. - Tabela ''installedapps'' bo shranjevala podatke o nameščenih aplikacijah v mobilni napravi. - Tabela ''location'' bo shranjevala lokacije, na katerih se nahaja naprava tekom dneva. Slika 24: Prikaz tabel v podatkovni bazi Kot smo že omenili, omogoča strežnik Apache s pomočjo grafičnega vmesnika phpmyadmin lažje delo s podatkovnimi bazami. Do podatkovne baze dostopamo preko spletnega brskalnika. Podatkovno bazo lahko ustvarimo grafično ali pa z ukazi SQL. Najprej smo generirali novo bazo podatkov, nato pa ustvarjali tabele znotraj baze. Na sliki 25 je prikazana podatkovna baza in tabele znotraj baze v grafičnem vmesniku phpmyadmin. Slika 25: Podatkovna baza v grafičnem vmesniku phpmyadmin 22

34 6.5. Spletna stran Po dokončanem načrtovanju in implementaciji podatkovne baze smo se lotili izdelave spletne strani. Spletna stran je namenjena prikazu osnovnih informacij o celotnem sistemu ter tudi vsebuje pot, do samega upravljalnika vsebin. Spletna stran je napisana v označevalnem jeziku HTML v kombinaciji s CSS (sl. Kaskadne stilske podloge). CSS je slogovni jezik, s katerim definiramo stil elementov HTML. Določeni deli spletne strani so napisani tudi v programskem jeziku JavaScript. JavaScript je objektni programski jezik, ki omogoča izdelavo interaktivnih spletnih strani. V našem primeru smo JavaScript uporabili za odpiranje in zapiranje stranske vrstice v primeru uporabe spletne strani na napravah z manjšim zaslonom. S pomočjo CSS-a smo določili širino zaslona, pri katerem se spletna stran prilagodi napravi. V primeru manjših zaslonov se zgornja vrstica, ki predstavlja menu, prilagodi širini zaslona oz. skrije in se potem s klikom na ikono prikaže. Na slikah 26 in 27 lahko vidimo razliko pri ogledu spletne strani na večjem in manjšem zaslonu. Slika 26: Menu vrstica v primeru večjih zaslonov Slika 27: Menu vrstica v primeru zaslonov ožjih od 600px 6.6. Sistem za upravljanje vsebin V menu vrstici spletne strani se lahko s klikom na povezavo ''SIGN IN'' uporabniki oz. starši prijavijo v tako imenovano nadzorno ploščo, kjer imajo vpogled nad vsemi podatki prenesenimi iz mobilne naprave. Pri prvi uporabi sistema se novi uporabniki registrirajo prek povezave ''SIGN UP''. Pri prijavi oz. tudi registraciji imajo uporabniki na voljo tri možnosti: prva je prijava / registracija z računom ustvarjenim v strežniški podatkovni bazi, druge dve možnosti pa sta s povezavo računov socialnih omrežij Facebook oziroma Google Registracija/prijava z računom Facebook Facebook je najbolj priljubljeno socialno omrežje, ter letos šteje že okrog dve milijardi aktivnih uporabnikov. Danes je veliko število uporabnikov, ki ne želijo izpolnjevati dolgih obrazcev za registracijo in raje uporabljajo račun socialnih omrežij. Registracija s povezavo računa socialnega omrežja je zelo hitra in učinkovita ter je mogoča preko različnih platform. Facebook prijava se tako lahko uporabi v aplikacijah ali pa na spletnih straneh. 23

35 Slika 28: Grafični prikaz uporabe ''Facebook prijave'' po svetu [25] Facebook prijava je svetovni izdelek številka 1 za prijavo s pomočjo profila socialnega omrežja, dnevno pa jo uporablja več kot deset milijonov ljudi v vsem svetu slika 28. Facebook SDK za PHP omogoča razvijalcem enostavno integracijo Facebook prijave na spletni strani. Za integracijo Facebook prijave je potreben ID aplikacije Facebook. V nadzorni plošči omrežja Facebook ustvarimo aplikacijo, ki jo poimenujemo po želji ter dodamo domeno in URL do strežnika oz. spletne strani na kateri bomo uporabili Facebook prijavo slika 29. Slika 29: Ustvarjanje nove aplikacije v Facebook nadzorni plošči 24

36 Po ustvarjeni aplikaciji oz. ID in geslu, prenesemo zadnjo verzijo Facebook SDK in dodamo v projekt. Za shranjevanje podatkov o uporabniku, ki jih dobimo od Facebook-a, smo uporabili že ustvarjeno tabelo ''users''. Po kliku na Facebook gumb na spletni strani, mora biti uporabnik preusmerjen na Facebook spletno stran za prijavo oz. registracijo. 1. <a href="facebook_login.php" class="social-login"><div class="image-leftfacebook"><img alt="facebook" src="../images/facebook_login.png" ></div><p cla ss="text-right">sign in with <strong>facebook</strong></p></a> Izvorna koda 1: Preusmeritev na facebook_login.php po kliku na Facebook gumb Facebook SDK ustvari URL povezavo, na katero uporabnika preusmerimo za prijavo oz. registracijo. 1. <?php 2. session_start(); 3. require_once './Facebook/autoload.php'; $facebook = new Facebook\Facebook([ 6. 'app_id' => '{app-id}', 7. 'app_secret' => '{app-secret}', 8. 'default_graph_version' => 'v2.6', 9. ]); $helper = $facebook->getredirectloginhelper(); 12. $permissions = [' ']; 13. $loginurl = $helper->getloginurl( 14. ' 15. $permissions 16. ); 17. header("location: ". $loginurl); 18.?> Izvorna koda 2: Koda, ki ustvari URL povezavo za preusmeritev uporabnika Pomembna dela v zgornji kodi sta '{app-id}' in '{app-secret}', kam moramo dati ID aplikacije in ''skrivnost'', ki ju dobimo v Facebook nadzorni plošči. Na ''skrivnost'' oz. geslo, ki ga dobimo od Facebook-a moramo zelo paziti in je ne smemo z nikomer deliti. Priporočilo in dobra praksa je shraniti to vrednost v datoteko nekje izven spletnega korena in jo potem vključiti na stran za prijavo. Po ustvarjeni URL povezavi, koda preusmeri uporabnika na Facebook za prijavo. Ko je uporabnik uspešno prijavljen v socialno omrežje Facebook, se pojavi pogovorno okno, v katerem Facebook uporabnika vprašamo, če želi dovoliti spletni strani dostop do uporabniškega računa. V pogovornem oknu so našteta dovoljenja oz. informacije o uporabniku, ki jih spletna strani potrebuje. Facebook mora tudi vedeti, na katero stran uporabnika preusmeri nazaj, ter katere informacije spletna stran potrebuje. Ti podatki oz. zahteve so poslani na Facebook s pomočjo zgornje kode. 25

37 Slika 30: Pogovorno okno na socialnem omrežju Facebook Slika 30 predstavlja pogovorno okno, ki se prikaže, po preusmeritvi in uspešni prijavi uporabnika na omrežju Facebook. Privzeto lahko spletno mesto dostopa do javno dostopnih informacij o uporabniku, kot je npr. ime. Vsa ostala dovoljenja imajo svoj sklop zahtev in se morajo vključiti v spremenljivko '$permissions' v izvorni kodi. V našem primeru potrebujemo dostop do e-pošte, kar se lahko vidi v izvorni kodi 2. Po tem ko uporabnik dovoli dostop spletni strani do podatkov na Facebook-u, ga Facebook preusmeri nazaj na link, ki smo ga posredovali preko URL povezave, ki jo je generiral Facebook SDK. Ko uporabnik poveže aplikacijo s svojim Facebook računom, aplikacija dobi tako imenovani žeton za dostop, ki zagotavlja začasni in varen dostop do Facebook API-jev. Žeton je niz, ki identificira uporabnika, aplikacijo ali stran slika 31. Žeton vsebuje informacije o tem, kdaj bo žeton potekel in katera aplikacija je ustvarila žeton. 1. try { 2. $accesstoken = $helper->getaccesstoken(); 3. } catch(facebook\exceptions\facebookresponseexception $e) { 4. // When Graph returns an error 5. echo 'Graph returned an error: '. $e->getmessage(); 6. exit; 7. } catch(facebook\exceptions\facebooksdkexception $e) { 8. // When validation fails or other local issues 9. echo 'Facebook SDK returned an error: '. $e->getmessage(); 10. exit; 11. } Izvorna koda 3: Izsek iz datoteke ''facebook.php'', kjer spletno mesto dobi žeton za dostop 26

38 Slika 31: ''User Access Tokens'' Uporabniški žetoni za dostop [25] Informacije oz. podatke, ki jih dobimo od Facebook-a, shranimo v ustvarjeni podatkovni bazi oz. v tabeli ''users''. 1. try { 2. // Returns a `Facebook\FacebookResponse` object 3. $response = $fb- >get('/me?fields=id,first_name,last_name, ', $accesstoken); 4. } catch(facebook\exceptions\facebookresponseexception $e) { 5. echo 'Graph returned an error: '. $e->getmessage(); 6. exit; 7. } catch(facebook\exceptions\facebooksdkexception $e) { 8. echo 'Facebook SDK returned an error: '. $e->getmessage(); 9. exit; 10. } $user = $response->getgraphuser(); Izvorna koda 4: Izsek kode, kjer preberemo podatke o uporabniku Registracija/prijava z računom Google Google API omogoča enostaven in učinkovit sistem za registracijo/prijavo na spletnih straneh. Implementacija Google prijave je precej enostavna in omogoča delo z več Googleovimi storitvami, kot so Google+, Drive, Youtube, itd. Postopek je podoben, kot za implementacijo Facebook prijave. Prvo je potrebno ustvariti novi projekt v Google API nadzorni plošči slika

39 Slika 32: Google API nadzorna plošča Po ustvarjenem novem projektu se ustvari ID aplikacije in skrivnost (angl. Secret), ter podobno kot prej, je te podatke potrebno ohraniti na varnem. Potem je potrebno še ustvariti poverilnico (angl. Credentials), katere vrsta je potem odvisna še od platforme in potreb. V našem primeru potrebujemo odjemalec OAuth 2.0. Po izbranem tipu poverilnice je potrebno poimenovat aplikacijo in podati URI naslov oz. naslove na, katere bodo uporabniki preusmerjeni po uspešni prijavi v račun Google. Slika 33: ID odjemalca za spletno aplikacijo 28

40 Na sliki 33 so prikazani podatki o aplikaciji v Google nadzorni plošči. Za delovanje knjižnice Google, jo je potrebno prenesti in dodati v projekt. Po kliku na prijavo z računom Google je uporabnik preusmerjen na Google stran za preverjanje pristnosti. Po uspešni prijavi v račun Google in dovoljenju aplikaciji za dostop do podatkov iz računa Google, je uporabnik preusmerjen nazaj s kodo za overitev. Kodo uporabimo za pridobitev žetona. 1. $client = new Google_Client(); 2. $client->setclientid($client_id); 3. $client->setclientsecret($client_secret); 4. $client->setredirecturi($redirect_uri); 5. $client->setscopes(array( 6. ' 7. ' 8. $client->setaccesstype('offline'); 9. $service = new Google_Service_Oauth2($client); if (isset($_get['code'])) { 12. $client->authenticate($_get['code']); 13. $_SESSION['access_token'] = $client->getaccesstoken(); 14. header('location: '. filter_var($redirect_uri, FILTER_SANITIZE_URL)); 15. } if (isset($_session['access_token']) && $_SESSION['access_token']) { 18. $client->setaccesstoken($_session['access_token']); 19. } else { 20. $authurl = $client->createauthurl(); 21. } Izvorna koda 5: Koda za prijavo v Google in pridobitev žetona za dostop Protokol OAuth 2.0 Za prijavo s pomočjo računa Facebook oziroma Google je uporabljen protokol OAuth 2.0 za overjanje in avtorizacijo. Protokol OAuth 2.0 omogoča drugim aplikacijam omejen dostop do virov preko protokola HTTP. Aplikacija dobi žeton za dostop, ki predstavlja uporabnikovo dovoljenje za dostop do svojih podatkov. Po pridobljenih virih, jih mora aplikacija shraniti za nadaljnjo uporabo. Slika 34: Delovanje OAuth 2.0 protokola [27] 29

41 Potek delovanja protokola OAuth 2.0 je predstavljen na sliki 34. Opis posameznih korakov: - Odjemalec zahteva dovoljenje lastnika virov. - Uporabnik prejme pooblastilo za avtorizacijo, ki predstavlja poverilnico, ki predstavlja pooblastilo lastnika virov. - Odjemalec zahteva žeton za dostop. - Strežnik preveri stranko in preveri če je stranka dovolila dostop do podatkov; če je, izda žeton za dostop. - Odjemalec zahteva zaščiten vir iz strežnika virov in ga potrdi s predstavitvijo žetona za dostop. - Strežnik virov preveri žeton; če je veljaven, obdela zahtevo. Za implementacijo prijave je bilo v obeh primerih potrebno najprej ustvariti projekt oz. aplikacijo v nadzorni plošči Facebook-a oz. Google-a, kjer dobimo ID aplikacije in skrivnost aplikacije, ki sta potrebna za komunikacijo med aplikacijo in strežnikom, nato komunikacija poteka na način, kot ga določa protokol OAuth Registracija / prijava z obrazcem Veliko uporabnikov še ne zaupa registraciji z računom socialnega omrežja, zaradi strahu po odtujitvi podatkov, ter raje ustvarijo nov račun z izpolnjevanjem obrazca za registracijo. Uporabniki vnesejo potrebne podatke, ki se nato shranijo v podatkovno bazo. Obrazec smo oblikovali s pomočjo HTML-a in CSS-a. Obrazci HTML se uporabljajo za zbiranje podatkov, ki jih nato pošlje do skript, ki tečejo na strežniku - v našem primeru do PHP skript. Oznaka <form> se uporablja za ustvarjanje obrazca. Na voljo je več različnih elementov znotraj obrazca. 1. <form action="url naslov" method="post GET"> 2. Elementi obrazca, kot so besedilna polja, spustni meniji, itd. 3. </form> Izvorna koda 6: Sintaksa HTML obrazca Atribut Opis action Pot do skripte, ki obdela posredovane podatke iz obrazca. method Poskrbi za nalaganje podatkov. target Določa okno ali okvir, kjer se prikaže rezultat iz skripte. enctype Določa, kako brskalnik kodira podatke, preden se pošljejo na strežnik. Tabela 2: Seznam najpogosteje uporabljenih atributov za HTML obrazec Znotraj obrazca smo uporabili samo dva elementa in sicer polje za vnos besedila in gumb za sprožitev skript, ko uporabnik klikne nanj. Obstaja več različnih tipov polj za vnos besedila, ki jih določa atribut ''type''. Eno vrstična polja za vnos besedila se uporabljajo za vnose kot so iskalna polja ali imena. Polja za vnos gesel so tipa ''password'' in takoj po vnosu znaka se 30

42 znak maskira. Obstajajo še polja tipa '' '', ki preverijo, če je vneseni e-poštni naslov pravilne oblike (vsebuje znak ter več vrstična polja za vnos besedil. 1. <form action="index.php" method="post"> 2. <input type="text" placeholder="name" name="name" autocomplete="off" requi red="required" style="width: 49%"> 3. <input type="text" placeholder="last name" name="last_name" autocomplete=" off" required="required" style="width: 50%"> 4. <input type=" " placeholder=" " name=" " autocomplete="off" re quired="required"> 5. <input type="password" placeholder="password" name="password" autocomplete ="off" required="required" style="width: 49%"> 6. <input type="password" placeholder="confirm password" name="confirm_passwo rd" autocomplete="off" required="required" style="width: 50%"> 7. <span>*by clicking Register, you agree on our terms and conditions.</span> <br> 8. <button>register</button> 9. </form> Izvorna koda 7: HTML obrazec za registracijo Atribut Opis type Določa tip polja za vnos besedila. placeholder Določa namig, ki opisuje pričakovano vrednost vnosnega polja name Določa ime podatku, ki se pošlje na strežnik. autocomplete Omogoča brskalniku napovedovanje vrednosti, uporabnik lahko med vnosom izbere možnost samo izpolnjevanja. required Določa, da je polje potrebno obvezno izpolniti. Tabela 3: Opis atributov uporabljenih v izvorni kodi za obrazec Po kliku na gumb ''Registracija'' vse vnesene podatke preverimo v PHP skripti. Če je uporabnik izpolnil vsa obvezna polja preverimo, če je vneseni e-poštni naslov že uporabljen za registracijo, sicer obvestimo uporabnika, da je naslov že uporabljen. 1. if (!emptyempty($_post['name']) &&!emptyempty($_post['last_name']) && 2.!emptyempty($_POST[' ']) &&!emptyempty($_post['password']) && 3.!emptyempty($_POST['confirm_password'])) { } Izvorna koda 8: Preverjanje, če so obvezna polja izpolnjena Nato skripta preveri, če je geslo ustrezne dolžine (dolgo mora biti vsaj 6 znakov), in če je, ga šifrira s pomočjo algoritma bcrypt. Vsi podatki se shranijo v podatkovno bazo. 1. if (strlen($_post['password']) > 5) { 2. password_hash($_post['password'], PASSWORD_DEFAULT); 3. } Izvorna koda 9: Preverjanje dolžine in šifriranje gesla 31

43 Na podoben način smo implementirali tudi obrazec za prijavo. Uporabnik za prijavo v sistem mora vnesti e-poštni naslov in geslo, ki ga je uporabil pri ustvarjanju računa. Vnesena podatka preverimo v PHP skripti, tako da skripta prvo poišče v bazi, če že obstaja vneseni naslov. 1. //Find user by 2. $stmt = $conn- >prepare('select ,password,api_key FROM users WHERE = : '); 3. $stmt->bindparam(': ', $_POST[' ']); 4. $stmt->execute(); 5. $row = $stmt->fetch(pdo::fetch_assoc); Izvorna koda 10: Stavek za iskanje uporabnika po e-poštnem naslovu Če je naslov najden v podatkovni bazi preverimo še vneseno geslo, ali se ujema s shranjenim geslom v bazi. Po uspešni prijavi, se začne seja (angl. Session). Če prijava ni uspešna, obvestimo uporabnika o razlogu. 1. //If user is founded check password 2. if (count($row) > 0 && password_verify($_post['password'], $row['password'])) { 3. session_start(); 4. $_SESSION['user_id'] = $row['api_key']; header("location:../members/"); 7. } else { 8. $error = 'Wrong or password! Please check and try again.'; 9. } Izvorna koda 11: if else stavek za preverbo, če je vneseno geslo pravilno Sejo uporabljamo zato, da lahko spletni strežnik identificira uporabnika po uspešni prijavi za nadaljnje delo. Seja vsebuje informacije o uporabniku in so na voljo na vseh straneh v eni aplikaciji. Ko uporabnik zapre brskalnik se seja konča Struktura spletne aplikacije V nadzorni plošči spletne aplikacije lahko uporabniki oz. starši pregledujejo podatke, ki so preneseni iz mobilne naprave Android. Nadzorna plošča je sestavljena iz osmih podstrani, ki jih bomo v nadaljevanju na kratko predstavili. - Začetna stran (Overview) Po uspešni prijavi v sistem je uporabnik preusmerjen na začetno stran. Na začetni strani nadzorne plošče ima uporabnik na voljo hiter pregled nad aktivnostim, ki so se zgodile v času od zadnje prijave. Uporabnik lahko vidi koliko je v tem času bilo novih sporočil, klicev, shranjenih lokacij in nameščenih novih aplikacij. Sistem izpiše število novih dogodkov, tako da sešteje v vsaki tabeli v podatkovni bazi, koliko je novih shranjenih podatkov od časa zadnje prijave uporabnika v sistem. Prikazan je tudi graf najpogosteje uporabljenih aplikacij. Graf je omogočen s pomočjo knjižnice Google Charts, ki smo jo integrirali v spletno stran. 32

44 - Lokacije (Locations) Na strani Lokacije je prikazan zemljevid z označenimi lokacijami, na katerih se je nahajala naprava. Prikaz zemljevida je omogočen s pomočjo knjižnice Google Maps. Integracija zemljevida na spletni strani ni zahteven postopek. Najprej moramo ustvariti stran s pomočjo označevalnega jezika HTML, dodati zemljevid z označevalcem lokacije in pridobiti ključ API. V kodi HTML določimo območje na strani, kjer bo prikazan zemljevid, ter s pomočjo CSS-a oblikujemo tj. določimo širino in višino zemljevida. Nato z JavaScriptom naložimo zemljevid na spletni strani. Pomemben del je ključ API, ki ga dobimo v nadzorni plošči Google-a oz. lahko uporabimo že obstoječega ampak moramo v projektu, ki smo ga ustvarili v Google konzoli, omogočiti ''Google Places API Web Service''. 1. <script async defer 2. src=" k=initmap"> 3. </script> Izvorna koda 12: Vrstica v kateri dodamo API ključ Parameter ''callback'' za povratni klic, izvrši kodo iz funkcije ''initmap'' za nalaganje API-ja. Atribut ''async'' v zgornji kodi omogoča brskalniku, da nadaljuje s prikazovanjem strani medtem, ko se API nalaga. Ključ API pa je potreben za prevajanje naslovov v zemljepisne lokacije. - Sporočila (Messages), Seznam klicev (Call Log), Stiki (Contacts), Nameščene aplikacije (Installed Apps) Te štiri strani temeljijo na podobni logiki. S pomočjo HTML in CSS smo oblikovali stran, naredili tabelo in v njej izpisujemo podatke, ki so shranjeni v podatkovni bazi za določeno tabelo. - Stran nastavitve omogoča uporabniku urejanje osebnih podatkov, kot so ime, priimek, e-poštni naslov in geslo. Urejanje poteka s pomočjo obrazca. Uporabniku se izpišejo trenutni podatki znotraj obrazca, ki se po kliku za vnos novih skrijejo. Po vnosu novih podatkov in kliku na gumb ''Update'' preverimo če so podatki ustrezne oblike ter se posodobimo obstoječe podatke v tabeli. - Podatke o mobilni napravi Android, ter o dovoljenjih potrjenih na napravi, lahko uporabnik preveri oz. pogleda na strani Profil (Profile). Uporabnik lahko vklopi ali izklopi določene funkcije aplikacije na mobilni napravi le, če je dovolil aplikaciji potrebna dovoljenja za to funkcijo REST API REST je uvedel in definiral Roy Fielding leta 2000, v svoji doktorski disertaciji. REST ali RESTful web servis je način zagotavljanja interoperabilnosti med računalniškimi sistemi na internetu. [28] 33

45 REST ni standardiziran protokol, ni niti standard, ter tudi ni zamenjava za že obstoječe spletne storitve, kot so WSDL in SOAP. Vendar je v primerjavi z obstoječim rešitvam, kot je SOAP, precej lažje implementirati REST, kjer je vsak vir predstavljen kot spletna storitev z naslovom URL. REST uporablja obstoječe protokole in najpogosteje protokol HTTP. REST je tudi zgrajen na protokolu HTTP, ki je zasnovan na pošiljanju zahtev in sprejemanju odgovorov. Slika 35: Arhitektura REST REST je trenutno najboljša rešitev za komunikacijo med tehnologijami in ga zato uporabljajo tudi največja podjetja, kot sta Google in Microsoft. Tako kot HTTP, tudi REST uporablja za komunikacijo s strežnikom metode GET, POST, PUT in DELETE. - GET pridobivanje podatkov iz strežnika. - POST dodajanje oz. pošiljanje novih podatkov na strežnik - PUT spreminjanje obstoječih podatkov na strežniku - DELETE brisanje podatkov iz strežnika Rezultat zahteve HTTP označujejo HTTP kode stanja: - 1xx Informativno - 2xx Uspeh - 3xx Preusmeritev - 4xx Napaka na strani odjemalca - 5xx Napaka na strani strežnika REST lahko uporablja več različnih tipov odgovorov strežnika (XML, JSON, itd.). S pomočjo Content-Type in Accept v glavi http lahko določimo tip podatkov, ki jih je treba prenesti med strežnikom in odjemalcem. Npr.: za JSON, Content-Type: application/json Aplikacija za mobilne naprave Android Aplikacija omogoča uporabniku vklop funkcij za pridobivanje podatkov iz mobilne naprave Android. Zasnovana je iz okna za prijavo ter okna za vklop/izklop funkcij. 34

46 Slika 36: Zgradba aplikacije Zgradba aplikacije za operacijski sistem Android je prikazana na sliki 36. Ob zagonu sistema se samodejno zažene servis, ki preveri vklopljene funkcije, ter ponovno zažene potrebne servise. Sicer se ob prvem zagonu aplikacije po namestitvi prikaže pozdravno okno, ter uvodna okna skozi katera lahko uporabnik gre in se seznani s potrebnimi dovoljenji za delovanje aplikacije. Uporabnik lahko tudi uvodna okna preskoči in se preusmeri takoj na prijavno okno. Po uspešni prijavi se pokaže glavno okno, kjer lahko uporabnik vklopi/izklopi sinhronizacijo podatkov iz mobilne naprave na strežnik. Za vklop ali izklop določene funkcije mora biti naprava povezana z internetom, ter morajo biti omogočena dovoljenja, ki so potreba za delovanje. Pred prvo uporabo aplikacije mora uporabnik ustvariti račun preko spletne strani, to pa lahko naredi na enega izmed treh načinov, ki smo jih že omenili. Na isti način, kot ga je uporabnik uporabil za ustvarjanje računa se lahko tudi prijavi v aplikaciji na mobilni napravi za vklop/izklop sinhronizacije določenih podatkov Prijava s Facebook računom iz mobilne naprave Android S pomočjo Facebook SDK za Android se lahko uporabniki prijavljajo v aplikacijo s svojim Facebook računom. Če je aplikacija Facebook že nameščena na mobilni napravi, mora uporabnik zamenjati račun oz. se prijaviti s svojim Facebook računom, sicer se pokaže okno 35

47 za prijavo v Facebook. Okno za prijavo je dodano v zadnji verziji Facebook SDK, saj so prejšnje verzije zahtevale nameščeno aplikacijo Facebook. Za integracijo Facebook SDK za OS Android je potrebno prvo ustvariti projekt oz. v našem primeru ga imamo že ustvarjenega, saj smo ga ustvarili že pri integraciji Facebook prijave v spletno stran. V drugem koraku je potrebno Facebook SDK vključiti v projekt. Kot smo že omenili v drugem poglavju, je potrebno za konfiguracijo po meri spremeniti konfiguracijske datoteke. V korenu projekta se nahaja datoteka build.gradle, ki določa konfiguracijo za vse module v projektu. V datoteki znotraj buildscript bloka dodamo Maven Central Repository. 1. repositories { 2. mavencentral() 3. } Izvorna koda 13: Maven Central Repository Datoteka build.gradle, ki se nahaja na nivoju modula, omogoča konfiguriranje nastavitev zgradbe za določen modul. V tej datoteki znotraj bloka dependencies dodamo naslednjo vrstico: compile 'com.facebook.android:facebook-android-sdk:4.24.0' Po dodanih vrsticah je potrebno zgraditi projekt, pri tem je Facebook SDK dodan v projekt. V naslednjem koraku moramo le še znotraj datoteke AndroidManifest.xml dodati ID aplikacije, ki smo ga dobili v Facebook nadzorni plošči. Znotraj projekta v Facebook nadzorni plošči je potrebno dodati celotno ime projekta, ki identificira vsako Android aplikacijo, ter je potrebno dodati tudi ime Activity-ja, kjer bo omogočena Facebook prijava. Slika 37: Nastavitve za prijavo iz OS Android v Facebook nadzorni plošči V nadzorni plošči je potrebno dodati tudi ključ za verodostojnost interakcij med aplikacijo in Facebook-om. Najprej moramo ustvariti ''Razvojni ključ'' oz. 28 znakovna zgoščena vrednost, ki je edinstvena za vsako razvojno okolje. Android aplikacije morajo biti digitalno podpisane s ''sprostitvenim'' ključem, preden jih lahko objavimo v Google Trgovini. Sprostitveni ključ moramo dodati v Facebook nadzorni plošči, v polju Key Hashes slika

48 Slika 38: Ustvarjanje razvojnega in sprostitvenega ključa Kako ustvarimo razvojni in sprostitveni ključ v operacijskem sistemu Linux je prikazan na sliki 38. Za dodajanje gumba za prijavo s Facebook računom, je najenostavnejši način uporabiti LoginButton iz Facebook SDK-ja. LoginButton je element grafičnega vmesnika, ki omogoča, da se, ko uporabnik klikne na gumb, prijava začne z dovoljenji, ki jih določa LoginManager. 1. <com.facebook.login.widget.loginbutton 2. android:id="@+id/button_facebook_login" 3. android:layout_width="match_parent" 4. android:layout_height="wrap_content" 5. android:layout_marginright="@dimen/horizontal_margin" 6. android:layout_marginleft="@dimen/horizontal_margin" 7. android:layout_margintop="@dimen/vertical_margin" 8. android:paddingtop="11dp" 9. android:paddingbottom="11dp" /> Izvorna koda 14: Facebook gumb za prijavo Facebook gumb za prijavo smo ustvarili v datoteki activity_login.xml, ki se nahaja v mapi layout, ki smo jo opisali v drugem poglavju. Po ustvarjenem gumbu lahko v java razredu Activity-ja za prijavo dodamo grafične elemente in potrebne akcije, ki se izvedejo po kliku na gumb. Torej v prvem koraku deklariramo: - CallbackManager, ki je uporabljen za povratni klic v aplikacijo - AccessTokenTracer, da aplikacija lahko sledi trenutnemu žetonu za dostop - ProfileTracker, omogoča aplikaciji dostop do uporabniškega računa - FacebookCallback, ki obravnava rezultat o (ne)uspešni prijavi s Facebook računom 1. private CallbackManager callbackmanager; 2. private AccessTokenTracker accesstokentracker; 3. private ProfileTracker profiletracker; 4. private FacebookCallback<LoginResult> facebookcallback; Izvorna koda 15: Deklariranje Facebook metod 37

49 Pred uporabo zgoraj omenjenih metod je potrebno v projektu inicializirati Facebook SDK, ter tudi CallbackManager. Omenjen inicializacije dodamo znotraj metode oncreate, v kateri se inicializira sam Activity. 2. protected void oncreate(bundle savedinstancestate) { 3. super.oncreate(savedinstancestate); 4. setcontentview(r.layout.activity_login); //Initializing Facebook SDK 7. FacebookSdk.sdkInitialize(getApplicationContext()); 8. //Initializing instance of CallbackManager to handle the login response 9. callbackmanager = CallbackManager.Factory.create(); accesstokentracker = new AccessTokenTracker() { 13. protected void oncurrentaccesstokenchanged(accesstoken oldaccesstoken, 14. AccessToken currentaccesstoken) {} 15. }; profiletracker = new ProfileTracker() { 19. protected void oncurrentprofilechanged(profile oldprofile, Profile cur rentprofile) { 20. nextactivity(currentprofile); 21. } 22. }; accesstokentracker.starttracking(); 25. profiletracker.starttracking(); //Initializing Facebook login button 28. LoginButton buttonfacebooklogin = (LoginButton) findviewbyid(r.id.button_f acebook_login); facebookcallback = new FacebookCallback<LoginResult>() { 32. public void onsuccess(loginresult loginresult) { 33. AccessToken accesstoken = loginresult.getaccesstoken(); 34. Profile profile = Profile.getCurrentProfile(); 35. nextactivity(profile); 36. showprogress(true); 37. } public void oncancel() { 41. LoginManager.getInstance().logOut(); 42. } public void onerror(facebookexception error) {} 46. }; buttonfacebooklogin.setreadpermissions(arrays.aslist 49. ("public_profile", " ", "user_birthday", "user_friends")); 50. buttonfacebooklogin.registercallback(callbackmanager, facebookcallback ); Izvorna koda 16: Metoda oncreate po inicializaciji Facebook SDK in potrebnih metod 38

50 V metodi oncreate se sklicujemo na prej omenjen metode, ki jih kličemo znotraj metode oncreate. Po uspešni prijavi pokličemo metodo nextactivity(profile). S pomočjo metode nextactivity(profile) pridobimo podatke o Facebook uporabniškem računu in jih posredujemo v razred za prijavo oz. za preverbo, če se je uporabnik registriral preko spletne strani, sicer uporabnika obvestimo, da še nima ustvarjenega uporabniškega računa. 1. private void nextactivity(profile profile) { 2. if (profile!= null) { 3. fid = profile.getid(); 4. fname = profile.getfirstname(); 5. flname = profile.getlastname(); 6. //Log.d("Next", fid + " " + fname + " " + flname); 7. FacebookLoginTask flogintask = new FacebookLoginTask(fID, fname, flnam e); 8. flogintask.execute(); 9. } 10. } Izvorna koda 17: Metoda nextactivity(profile) Prijava z računom Google iz mobilne naprave Android Za integracijo prijave z računom Google v aplikacijo je potrebno v Android Studio namestiti Google Play Services SDK. V okolju Android Studio izberemo Tools Android SDK Manager. Pri tem se odpre novo okno, kjer kliknemo na zavihek SDK Tools in potem označimo Google Play Services. Po kliku na gumba Apply in OK se SDK namesti na računalniku slika 39. Slika 39: Namestitev Google Play Services SDK v Android Studio 39

51 Nato je potrebno od Googl-a pridobiti konfiguracijsko datoteko, ki jo po prenosu dodamo v projekt. Za pridobitev konfiguracijske datoteke je potrebno dodati informacije o aplikaciji v razvojni konzoli Google. V konzoli lahko izberemo že obstoječi projekt, ki smo ga ustvarili pri dodajanju Google Prijave na spletni strani, ter podobno kot za integracijo Facebook prijave, podamo ime projekta in ime razreda, ki bo omogočal prijavo. Slika 40: Omogočanje Google servisov v aplikaciji V naslednjem koraku je potrebno dodati SHA-1 ''prstni odtis'', ki ga ustvarimo v konzoli računalnika, s pomočjo orodja Java keytool. Keytool je orodje za upravljanje ključev in certifikatov. S pomočjo keytool orodja se uporabnik identificira drugim uporabnikom. Generiranje SHA-1 ''prstnega odtisa'' v operacijskem sistemu Linux je prikazano na sliki 42. V tem koraku je potrebno izbrati tudi vrsto servisa slika 41, ki jo bo aplikacija uporabljala. Slika 41: Izbira Google servisa, ki ga bo aplikacija uporabljala 40

52 Slika 42: Generiranje SHA-1 ''prstnega odtisa'' z orodjem keytool Slika 43: Prenos konfiguracijske datoteke google-services.json Ko smo dodali SHA-1 ''prstni odtis'' oz. našo identiteto v Google konzolo, nas Google preusmeri na stran kjer lahko prenesemo konfiguracijsko datoteko (slika 43), potrebno za delovanje Google servisov v aplikaciji. Po prenosu konfiguracijske datoteke, le to dodamo v projekt, tako da jo premestimo v direktorij /app, znotraj projekta. V datoteki build.gradle, v korenu projekta, dodamo naslednjo vrstico znotraj bloka dependencies: classpath 'com.android.tools.build:gradle:2.1.0' 41

53 Nato je potrebno še v datoteki build.gradle na nivoju modula dodati vrstico znotraj bloka dependencies: compile 'com.google.android.gms:play-services-auth:11.0.2' in na koncu datoteke še vrstico kode: apply plugin: 'com.google.gms.google-services'. Po dodanem SDK-ju v projekt, lahko ustvarimo gumb znotraj activity-ja za prijavo. 1. <com.google.android.gms.common.signinbutton 2. android:id="@+id/button_google_login" 3. android:layout_width="match_parent" 4. android:layout_height="wrap_content" 5. android:layout_marginleft="14dp" 6. android:layout_marginright="14dp" 7. android:layout_margintop="@dimen/vertical_margin" /> Izvorna koda 18: Google gumb za prijavo Za implementacijo akcij za prijavo s pomočjo Google računa, lahko uporabimo že ustvarjen razred, ki smo ga uporabili tudi za prijavo s pomočjo Facebook računa. Znotraj metode ''oncreate()'' nastavimo Google Sign-In, da zahteva podatke o uporabniku, ki jih aplikacija potrebuje. 1. googlesigninoptions = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFA ULT_SIGN_IN) 2..request () 3..build(); Izvorna koda 19: GoogleSignInOptions objekt Znotraj objekta GoogleSignInOptions je privzeti parameter DEFAULT_SIGN_IN, ki zahteva privzete podatke o uporabniku. V našem primeru potrebujemo dodatno še e-poštni naslov uporabnika, ki smo ga zahtevali s parametrom request . Nato moramo ustvariti objekt GoogleApiClient z dostopom do Google Sign-In API-ja. 1. googleapiclient = new GoogleApiClient.Builder(this) 2..enableAutoManage(this, this) 3..addApi(Auth.GOOGLE_SIGN_IN_API, googlesigninoptions) 4..build(); Izvorna koda 20: GoogleApiClient objekt Nato registriramo gumb, ki smo ga ustvarili v datoteki activity_login.xml. 1. SignInButton googlesigninbutton = (SignInButton) findviewbyid(r.id.button_goog le_login); 2. googlesigninbutton.setscopes(googlesigninoptions.getscopearray()); 3. googlesigninbutton.setonclicklistener(new View.OnClickListener() { 5. public void onclick(view v) { 6. Intent signinintent = Auth.GoogleSignInApi.getSignInIntent(googleApiCl ient); 7. startactivityforresult(signinintent, RC_SIGN_IN); 8. } 9. }); Izvorna koda 21: Registracija Google gumba za prijavo 42

54 Po kliku na gumb za prijavo s pomočjo Google računa se ustvari oz. odpre okno za izbiro Google računa s katerim se želimo prijaviti. Po uspešni prijavi z Google računom, pridobimo podatke o uporabniku, ki jih posreduje Google, ter preverimo, ali je uporabnik že registriran oz. ima tudi ustvarjen račun v naši podatkovni bazi. Pridobivanje podatkov oz. obravnava podatkov poslanih od strani Google-a, obravnavamo v metodi onactivityresult(). 2. protected void onactivityresult(int requestcode, int resultcode, Intent data) { 3. super.onactivityresult(requestcode, resultcode, data); 4. callbackmanager.onactivityresult(requestcode, resultcode, data); 5. //Result returned from launching the Intent from GoogleApiClient.getSignIn Intent(). 6. if (requestcode == RC_SIGN_IN) { 7. GoogleSignInResult googlesigninresult = Auth.GoogleSignInApi.getSignIn ResultFromIntent(data); 8. if (googlesigninresult.issuccess()) { 9. GoogleSignInAccount signinaccount = googlesigninresult.getsigninac count(); 10. //Get account information 11. uid = signinaccount.getid(); 12. u = signinaccount.get (); 13. showprogress(true); 14. GoogleLoginTask logintask = new GoogleLoginTask(uID, u ); 15. logintask.execute(); 16. } 17. } 18. } Izvorna koda 22: onactivityresult metoda Prijava z računom ustvarjenim s pomočjo obrazca za registracijo Za prijavo z računom ustvarjenim s pomočjo obrazca, mora uporabnik vnesti e-poštni naslov in geslo, ki ju je uporabil za registracijo. V prvem koraku smo torej v oknu dodali dva vnosna polja za omenjene podatke in potrditveni gumb za prijavo. Slika 44: Zaslon za prijavo 43

55 Po kliku na gumb za prijavo se sproži metoda attemptlogin(), ki preveri ali je uporabnik izpolnil oba polja in če je oblika vnesenih podatkov pravilna. Metoda preveri obliko e- poštnega naslova, če vsebuje znak in preveri geslo, če je dolžine več kot pet znakov. V primeru nepravilnosti označi polje, ki ni pravilno izpolnjeno. Če so vneseni podatki pravilne oblike, metoda posreduje podatke razredu userlogintask, ki preveri, ali se podatki ujemajo s podatki uporabljenimi pri registraciji uporabnika. V primeru prijave s pomočjo Google ali Facebook računa, se po uspešni prijavi preveri še ali je uporabnik registrirani tudi v naši bazi, torej ali je že ustvaril račun preko spletne strani. V vseh treh primerih preverjanje podatkov oz. uporabnika poteka iz podrazreda AsyncTask, ki omogoča enostavno izvajanje operacij v ozadju in prikaz rezultatov operacij na uporabniškem vmesniku. AsyncTask je idealen za izvajanje kratkih operacij (največ nekaj sekund). Opravilo, ki se izvaja v ozadju, gre skozi štiri korake: - onpreexecute(), je korak pred izvedbo opravila. Običajno se uporablja npr. za prikaz vrstice napredka v uporabniškem vmesniku. V našem primeru se prikaže vrtavka, ki se vrti dokler se ne izvede operacija v ozadju. - doinbackground(params ), se pokliče v ozadju takoj, ko se konča onpreexecute(). Ta korak se uporablja za izvajanje operacij v ozadju. Parametri asinhronega opravila se prenesejo na ta korak. - onprogressupdate(progress..), se izvaja po naključnem času in je čas izvedbe nedefiniran. Ta metoda se uporablja za prikaz kakršne koli oblike napredka v uporabniškem vmesniku, medtem ko se operacija v ozadju še vedno izvaja. - onpostexecute(result), se izvaja ko se operacije v ozadju zaključijo. Rezultat operacije se prikazuje v tem koraku. Izvajanje opravil se lahko prekliče kadarkoli s klicem metode cancel(boolean). Znotraj koraka doinbackground smo uporabili še vmesnik za HTTP odjemalec. HttpClient knjižnica omogoča obravnavo HTTP zahtev. Pred pošiljanjem HTTP zahteve je potrebno pretvoriti vse poslane podatke v ustrezno url obliko. 1. // Objects of HttpClient and HttpPost 2. HttpClient httpclient = new DefaultHttpClient(); 3. HttpPost httppost = new HttpPost(" "); 4. HttpParams httpparams = new BasicHttpParams(); Izvorna koda 24: Objekta HttpClient in HttpPost 1. // Post parameters 2. List<NameValuePair> namevaluepairs = new ArrayList<>(2); 3. namevaluepairs.add(new BasicNameValuePair(" ", u )); 4. namevaluepairs.add(new BasicNameValuePair("password", upassword)); Izvorna koda 23: Seznam parov ključ in vrednost, ki se uporabljajo kot parametri za HTTP zahtevo Izvorna koda 24 oblikuje parametre povezave v seznam parov s ključem in vrednostjo. 44

56 1. // Encoding parameters 2. try { 3. httppost.setentity(new UrlEncodedFormEntity(nameValuePairs)); 4. } catch (UnsupportedEncodingException e) { 5. e.printstacktrace(); 6. } Izvorna koda 25: Kodiranje parametrov V zadnjem koraku se izvede še HTTP zahteva in preberemo odgovor poslan od strežnika. Če je prijava uspešna se odpre glavno okno, sicer pa uporabnika obvestimo o neuspešni prijavi. 1. // Post request 2. try { 3. HttpResponse httpresponse = httpclient.execute(httppost); 4. HttpEntity entity = httpresponse.getentity(); 5. InputStream inputstream = null; 6. inputstream = entity.getcontent(); 7. BufferedReader bufferedreader = new BufferedReader(new InputStreamReader(i nputstream, "UTF-8"), 8); 8. StringBuilder stringbuilder = new StringBuilder(); 9. String line = null; 10. while ((line = bufferedreader.readline())!= null) { 11. stringbuilder.append(line + "\n"); 12. } 13. String result = null; 14. result = stringbuilder.tostring(); 15. json = result; 16. } catch (ClientProtocolException e) { 17. e.printstacktrace(); 18. Log.d("URIException: ", e.getmessage()); 19. } catch (IOException e) { 20. e.printstacktrace(); 21. Log.d("IOException: ", e.getmessage()); 22. } Izvorna koda 26: Izvajanje HTTP zahteve Glavno okno - MainActivity Po uspešni prijavi uporabnika z eno izmed omenjenih možnosti, aplikacija uporabnika preusmeri na glavno okno oz. MainActivity. Izgled samega okna je precej enostaven, uporabnik lahko samo vklopi oz. izklopi želeni prenos podatkov iz mobilne naprave v podatkovno bazo. Razen sinhronizacije kontaktov so vse ostale možnosti servisi in sprejemniki, ki se po vklopu/izklopu zaženejo oz. ustavijo. Naloge servisov in sprejemnikov so, da čakajo, da se zgodi določen dogodek, pridobijo podatke in jih shranijo v podatkovno bazo. Če je naprava povezana z internetom se podatki takoj pošljejo v podatkovno bazo na spletni strežnik, sicer se podatki shranijo v lokalno podatkovno bazo. Ko se dogodek ponovi, se znova preveri, če je aktivna internetna povezava in v primeru, da je, pošljemo še podatke iz lokalne podatkovne baze. 45

57 Slika 45: Zaslon MainActivity Ob prvi uspešni prijavi v aplikacijo se znotraj lokalne podatkovne baze ustvari tabela, za shranjevanje vklopljenih oz. izklopljenih možnosti aplikacije. Tabela se uporablja za primer, ko se mobilna naprava ponovno zažene. Ob koncu zagona OS Android se aktivira sprejemnik, ki požene servise za vklopljene funkcije aplikacije. Uporabniki oz. starši lahko vklopijo ali izklopijo določeno funkcijo tudi preko spletne strani, zato aplikacija vsako uro preverja, če so se nastavitve spremenile. Preverba poteka s pomočjo AlarmManager-ja, ki požene oz. preveri če je aktiven servis CheckSettings. Razred AlarmManager omogoča dostop do sistemskih alarmnih servisov. Obstajata dva splošna tipa alarmov: minuli realni čas (angl. Elapse real time) in realni čas (angl. Real time clock). Razlika med tipoma je, da minuli čas označuje čas od zagona OS Android, realni čas pa je dejanski čas (stenska ura). 1. //Start AlarmReceiver for checking settings in online database 2. String alarmchecksettings = Context.ALARM_SERVICE; 3. AlarmManager alarmmanagerchecksettings = (AlarmManager) getsystemservice(alarm CheckSettings); 4. Intent intentchecksettings = new Intent("REFRESH_THIS"); 5. PendingIntent pendingintentchecksettings = PendingIntent.getBroadcast(this, , intentchecksettings, PendingIntent.FLAG_UPDATE_CURRENT); 6. int type = AlarmManager. ELAPSED_REALTIME_WAKEUP; //RTC - real time clock 7. int minutesinterval = 60; 8. long intervalforalarm = minutesinterval * 1000 * 60; // 60 minutes in millis 9. alarmmanagerchecksettings.setinexactrepeating(type, System.currentTimeMillis(), intervalforalarm, pendingintentchecksettings); Izvorna koda 27: Nastavitev alarma na vsako uro Ko se sproži alarm, se zažene sprejemnik, znotraj katerega definiramo metodo onreceive() iz razreda AlarmManager. Znotraj metode onreceive() preverimo, če se servis za preverjanje nastavitev že izvaja. V primeru, da se ne izvaja, ga ponovno zaženemo. Za vklop funkcij znotraj aplikacije mora uporabnik na napravi aplikaciji omogočiti potrebna dovoljenja za izvajanje željene funkcije. Od različice 6.0 (API level 23) OS Androida mora 46

58 uporabnik aplikaciji omogočiti dovoljenja med izvajanjem aplikacije. Za različice pred 6.0 pa je bilo dovolj, da uporabnik omogoči dovoljenja pred namestitvijo aplikacije. Potrebna dovoljenja se morajo dodati v AndroidManifest.xml. Slika 46: Dovoljenje za dostop do stikov Po kliku za vklop funkcije za sinhronizacijo stikov iz mobilne naprave najprej preverimo, če je uporabnik dovolil aplikaciji dostop do stikov in če je vzpostavljena aktivna povezava z internetom. Če sta oba pogoja izpolnjena, s pomočjo razreda ContentResolver dostopamo do podatkov iz imenika. ContentResolver je razred znotraj paketa android.content, ki omogoča aplikaciji dostop do ponudnikov vsebin. Podatki o stikih so shranjeni znotraj table ContactsContract.Contacts.CONTENT_URI. Pomožni kazalec, ki smo ga ustvarili za prehod med podatki znotraj tabele, preveri če ima stik telefonsko številko. Če jo ima, pošlje podatke na strežnik. Pri vklopu funkcije za pridobivanje podatkov o klicih in sporočilih najprej preverimo, če je uporabnik omogočil potrebna dovoljenja in če je vzpostavljena aktivna povezava. Če sta pogoja izpolnjena, posodobimo podatke v lokalni tabeli ter zaženemo ustrezni servis za želeno funkcijo. Če uporabnik vklopi funkcijo za pridobivanje lokacije, še dodatno preverimo če so omogočene lokacijske storitve na napravi in če ne, uporabnika ustrezno o tem obvestimo. Za dostop do seznama nameščenih aplikacij, časovnega nadzora uporabe aplikacij in podatke o časovni uporabi aplikacij mora uporabnik najprej omogočiti AccessibilityService. Po vklopu storitev za dostopnost aplikacija vpraša uporabnika o nastavitvi gesla za preprečitev odstranitve aplikacije brez dovoljenja. Po nastavljenem geslu s pomočjo razreda PackageManager dobimo podatke o nameščenih aplikacijah. V našem primeru dobimo s pomočjo PackageManager-ja podatke o imenu aplikacije, imenu paketa aplikacije ter ikono aplikacije. Ikono aplikacije prenesemo na strežnik v obliki niza, zaradi hitrejšega pošiljanja 47

59 podatkov. Ikono najprej pretvorimo v obliko bitmap, ki jo nato lahko pretvorimo v obliko png. Nato jo pretvorimo v polje bajtov, ki jih lahko pretvorimo v niz znakov Beleženje podatkov o klicih Ko stranka vklopi funkcijo za pridobivanje podatkov o klicih, se zažene servis CallsService. S pomočjo servisa lahko aktiviramo in ustavimo sprejemnik CallsReceiver, ki s pomočjo razreda TelephonyManager omogoča pridobivanje informacij o telefonskih storitvah. Podatki o spremembah stanj telefonije so zaštičeni in je potrebno dodati ustrezna dovoljenja v datoteki AndroidManifest.xml. 1. <uses-permission android:name="android.permission.read_call_log" /> 2. <uses-permission android:name="android.permission.read_phone_state" /> 3. <uses-permission android:name="android.permission.process_outgoing_calls" /> Izvorna koda 28: Dovoljenja za informacije o telefonskih storitvah Po ustrezno dodanih dovoljenjih aplikaciji, moramo še ustrezno določiti akcije na katere sprejemnik reagira. 1. <receiver android:name=".calls.callsreceiver" 2. android:enabled="false"> 3. <intent-filter android:priority="-1"> 4. <action android:name="android.intent.action.new_outgoing_call" /> 5. <action android:name="android.intent.action.phone_state" /> 6. </intent-filter> 7. </receiver> Izvorna koda 29: Deklaracija sprejemnika CallsReceiver Ko se zgodi ena izmed akcij, sprejemnik prebere stanje telefonije. - ACTION_NEW_OUTGOING_CALL, predstavlja odhodni klic - EXTRA_STATE_RINGING, predstavlja stanje zvonjenja (dohodni klic) - EXTRA_STATE_OFFHOOK, je stanje izvajanje pogovora - EXTRA_STATE_IDLE, ni aktivnega pogovora, predstavlja stanje pripravljenosti Slika 47: Prehodi med stanji telefonije 48

60 Iz stanja IDLE lahko telefon prehaja v druga stanja, ter se vedno povrne nazaj v stanje IDLE. Ko telefon preide iz stanja IDLE v stanje RINGING in iz stanja RINGING v stanje OFFHOOK, pomeni, da se je izvajal dohodni klic. Če se ne zgodi vmes stanje OFFHOOK, pomeni da se je zgodil zgrešeni klic. Pri odhodnem klicu je pa takojšnji prehod iz stanje OUTGOING v stanje OFFHOOK in ne moremo preveriti oz. pridobiti informacije, ali se je klicani oglasil ali pa ne. Vsakič ko telefon preide nazaj v stanje IDLE se pokliče razred CallsObserver, ki s pomočjo ponudnikov vsebin pridobi podatke o klicu. Težava je, da je telefon v stanju IDLE že od samega zagona servisa. Zato smo stanja in številko sogovornika dodatno shranjevali s pomočjo razreda SharedPreferences. Razred SharedPreferences uporabljamo za shranjevanje manjših zbirk ključnih vrednosti in omogoča enostavne metode za branje in pisanje. Torej, ko je aktivno stanje IDLE, preverimo če je v zbirki SharedPreferences shranjena vrednost stanja IDLE ali pa katerega izmed drugih možnih stanj. Če je shranjena vrednost katerih izmed drugih stanj pokličemo razred CallsObserver, sicer pa samo posodobimo zbirko na vrednost stanja IDLE. Znotraj razreda CallsObserver smo implementirali metodo fetchnewcalls(), ki pridobi podatke o klicu iz tabele CallLog.Calls.CONTENT_URI. Kazalec nastavimo na prvo vrednost v tabeli, ki predstavlja zadnji klic. S pomočjo kazalca dobimo vrednosti iz stolpcev, v katerih so shranjeni podatki, kot so številka sogovornika, shranjeno ime v imeniku, čas klica in dolžina klica, ter tip klica. Po prebranih podatkih se, če je vzpostavljena aktivna povezava z internetom, podatki pošljejo v spletni strežnik, sicer se shranijo v lokalno podatkovno bazo Pridobivanje podatkov o sporočilih SMS Za pridobivanje podatkov o prejetih in poslanih sporočilih SMS so potrebna dovoljenja za branje. 1. <uses-permission android:name="android.permission.receive_sms" /> 2. <uses-permission android:name="android.permission.read_sms" /> Izvorna koda 30: Dovoljenja za branje sporočil Po zagonu servisa MessagesService, se aktivira sprejemnik MessagesObserver. Ob aktivaciji sprejemnika s pomočjo razreda ContentObserver mu določimo naslov iz katerega bo pridobival podatke. 1. //Start Message observer 2. MessagesObserver messagesobserver = new MessagesObserver(new Handler(), getapp licationcontext()); 3. getapplicationcontext().getcontentresolver().registercontentobserver(uri.parse ("content://sms/"), true, messagesobserver); Izvorna koda 31: Aktivacija sprejemnika MessagesObserver Po vsakem prejetem ali poslanem sporočilu, sprejemnik zazna dogodek in se sproži metoda onchange(), ki vključuje tudi spremenjeno vsebino drugega argumenta, ko je na voljo. Drugi 49

61 argument metode onchange() je Uri, ki predstavlja naslov oz. lokacijo od koder naj sprejemnik pridobi podatke. V našem primeru je to ''content://sms/''. S pomočjo kazalca in ponudnikov vsebin se premikamo po tabelah znotraj lokacije in pridobimo podatke. Ker se vsako sporočilo znotraj lokacije shrani z edinstvenim identifikatorjem v več tabelah, smo vpeljali dodatno spremenljivko, za pridobivanje podatkov iz samo ene tabele. Kazalec pridobi podatke o sporočilu: številka sogovornika, vsebina sporočila, datum in tip sporočila. Ti podatki se ustrezno shranijo v podatkovno bazo Pridobivanje podatkov o lokaciji Znotraj servisa LocationService, za pridobivanje lokacije, smo uporabili še razred LocationManager, s pomočjo katerega lahko sledimo spremembam lokacije. V primeru spremembe za več kot deset metrov se sproži servis in pridobi lokacijo mobilne naprave. Registracijo omenjenega razreda opravimo s metodo requestlocationupdates(), pri kateri je prvi argument tip ponudnika za pridobitev lokacije, drugi argument določa po kolikšnem času naj se pridobi nova lokacija ter tretji parameter določa po kolikšni razdalji od zadnje pridobljene lokacije se naj ponovno pridobi lokacija. Za pridobivanje podatkov o lokaciji lahko uporabimo GPS_PROVIDER ali pa NETWORK_PROVIDER. GPS je bolj natančna metoda, ki uporablja vgrajen sprejemnik GPS naprave, za razliko od drugega tipa, ki določa lokacijo naprave z uporabo podatkov, zbranih iz okoliških stolpov omrežnih ponudnikov in dostopnih WiFi točk. 1. initializelocationmanager(); 2. //Get location from GPS 3. try { 4. locationmanager.requestlocationupdates(locationmanager.gps_provider, LOCAT ION_INTERVAL, 5. LOCATION_DISTANCE, locationlisteners[0]); 6. } catch (SecurityException se) { 7. se.printstacktrace(); 8. Log.d(TAG, "Failed to request location update: " + se.getmessage()); 9. } catch (IllegalArgumentException ie) { 10. ie.printstacktrace(); 11. Log.d(TAG, "GPS provider doesn't exist: " + ie.getmessage()); 12. } 13. //Get location from Network provider 14. try { 15. locationmanager.requestlocationupdates(locationmanager.network_provider, L OCATION_INTERVAL, 16. LOCATION_DISTANCE, locationlisteners[1]); 17. } catch (SecurityException se) { 18. se.printstacktrace(); 19. Log.d(TAG, "Failed to request location update: " + se.getmessage()); 20. } catch (IllegalArgumentException ie) { 21. ie.printstacktrace(); 22. Log.d(TAG, "Network provider doesn't exist: " + ie.getmessage()); 23. } Izvorna koda 32: Registracija razreda LocationManager 50

62 Znotraj servisa smo ustvarili še razred LocationListener, ki je implementiran iz razreda LocationListener, ki je vmesnik za prejemanje posodobitev lokacije iz LocationManager-ja. LocationListener ima štiri metode: - onlocationchanged(), se pokliče, ko je posodobitev lokacije iz LocationManager-ja - onstatuschanged(), se pokliče, ko se stanje ponudnika spremeni - onproviderdisabled(), se pokliče, ko uporabnik onemogoči ponudnika - onproviderenabled(), se pokliče, ko uporabnik omogoči ponudnika Znotraj metode onlocationchanged() se pridobi zemljepisna širina in dolžina. Ob aktivni internetni povezavi se podatka pošljeta v spletni strežnik, sicer pa shranita v lokalno podatkovno bazo Pridobivanje podatkov o nameščenih aplikacijah Za pridobivanje podatkov o nameščenih aplikacijah sta aktivna dva med seboj ne-odvisna servisa, in sicer AppsService in AccessibilityService. Servis AppsService po zagonu aktivira sprejemnik, ki sledi na novo nameščenim in odstranjenim aplikacijam iz mobilne naprave. 1. <receiver android:name=".appslist.appsreceiver"> 2. <intent-filter> 3. <action android:name="android.intent.action.package_added" /> 4. <action android:name="android.intent.action.package_removed" /> 5. <data android:scheme="package" /> 6. </intent-filter> 7. </receiver> Izvorna koda 33: Dovoljenja za sprejemnik AppsReceiver Sprejemnik AppsReceiver reagira na akcije PACKAGE_ADDED in PACKAGE_REMOVED ter pridobi ime paketa aplikacije. Če je nova aplikacija nameščena, metoda onreceive() sprejemnika pridobi podatke o nameščeni aplikaciji, pretvori ikono v niz ter podatke ustrezno shrani v podatkovno bazo. V primeru, da uporabnik odstrani katero izmed nameščenih aplikacij, sprejemnik pridobi samo paket in ga pošlje na strežnik. 1. $userid = $row['id']; 2. $package_name = $_POST['pname']; $sql = $conn- >prepare("delete FROM installedapps WHERE userid = :uid AND package_name = :pn "); 5. $sql->bindparam(':uid', $userid); 6. $sql->bindparam(':pn', $package_name); 7. if ($sql->execute()) { 8. $error["success"] = 1; 9. $error["message"] = "Successfully inserted!"; 10. echo json_encode($error); 11. } else { 12. $error["success"] = 0; 13. $error["message"] = "Unknown error occured! Please try again later."; 14. die(json_encode($error)); 15. } Izvorna koda 34: Odstranitev aplikacije iz seznama na strežniku 51

63 Skripta na strežniku prebere poslano ime paketa in ga odstrani s seznama nameščenih aplikacij. 1. <service android:name=".appslist.accessibilityservice" 2. android:permission="android.permission.bind_accessibility_service" > 3. <intent-filter> 4. <action android:name="android.accessibilityservice.accessibilityservic e" /> 5. </intent-filter> 6. <meta-data 7. android:name="android.accessibilityservice" 8. android:resource="@xml/accessibilityservice" /> 9. </service> Izvorna koda 35: Dovoljenja za servis AccessibilityService S pomočjo AccessibilityService-a lahko sledimo aplikacijam, ki jih uporabnik odpre oz. zapre. Servis sledi dogodkom, ki jih želimo obravnavati. V našem primeru obravnava dogodek TYPE_WINDOW_STATE_CHANGED, ki predstavlja dogodek odpiranja novega okna, menu-ja, itd. Vsako dejanje, ki ga uporabnik naredi, je znotraj enega paketa, torej npr. če uporabnik odpre našo aplikacijo se odpre paket ''com.example.elvir.parentalcontrolapp''. Torej, če je uporabnik odprl eno izmed aplikacij, aplikacija mora imeti tudi razred, sicer je uporabnik odprl ednega izmed sistemskih paketov in sprejemnik ne zazna razreda. 2. public void onaccessibilityevent(accessibilityevent event) { 3. if (event.geteventtype() == AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED) { 4. if (event.getpackagename()!= null && event.getclassname()!= null) { } 7. } 8. } Izvorna koda 36: Metoda za obravnavno spremembe stanja okna Ko sprejemnik zazna aplikacijo, najprej preveri ali je aplikacija ne seznamu nameščenih aplikacij, ali je ena izmed sistemskih aplikacije ali pa uporabniško nameščenih aplikacij. Če je aplikacija na seznamu, se znotraj metode preveri, ali je uporabnik porabil dovoljeni čas uporabe, katerega določimo na spletni strani. V primeru, da je uporabnik že porabil dovoljeni čas, se prikaže okno za vpis gesla, ki ga nastavimo ob vklopu funkcije za kontrolo nameščenih aplikacij. Če je geslo pravilno, uporabniku dovoli nadaljnjo uporabo aplikacije, sicer jo zapre. Znotraj if else zanke prvo pridobimo shranjene vrednosti iz tabele, torej dovoljeni čas uporabe aplikacije, ki smo ga dobili iz spletnega strežnika, ter čas, koliko je uporabnik že uporabljal aplikacijo na ta datum. Za pretvorbo niza shranjenega v tabeli, v ustrezno datumsko obliko, smo uporabili razred SimpleDateFormat. S pomočjo razreda SimpleDateFormat določimo obliko, v kateri želimo uporabljati datum oz. čas, ter ga nato razčlenimo z metodo parse. Razčlenjeno obliko časa pretvorimo s pomočjo razreda Date v milisekundno obliko. Porabljen in dovoljeni čas, ki sta pretvorjena v milisekunde, primerjamo in če uporabnik še ni porabil časa, se zažene servis AppUsage. 52

64 1. String totaltime = databasehelper.getappfromlist(pckgname).gettimestring(); 2. SimpleDateFormat simpledateformat = new SimpleDateFormat("HH:MM:SS"); 3. try { 4. Date savedtimeused = simpledateformat.parse(totaltime); 5. Date allowedtimeuse = simpledateformat.parse("00:01:00"); 6. Log.d("Time", "Times: " + savedtimeused + " <= " + allowedtimeuse); 7. if (allowedtimeuse.compareto(savedtimeused) > 0) { 8. Intent appusage = new Intent(this, AppUsage.class); 9. appusage.putextra("packagename", pckgname); 10. startservice(appusage); 11. } else { 12. Intent loginactivity = new Intent(this, PasswordAskActivity.class); 13. loginactivity.addflags(intent.flag_activity_new_task); 14. startactivity(loginactivity); 15. } 16. } catch (ParseException e) { 17. e.printstacktrace(); 18. } Izvorna koda 37: Preverba porabljenega in dovoljenega časa uporabe aplikacije Iz zgornje kode lahko razberemo tudi, da ko sprejemnik zažene servis, mu posreduje še ime paketa odprte aplikacije. Ko servis zaženemo se ustvari nov objekt razreda Handler, s pomočjo katerega ustvarimo novo nit. Pri novem dogodku oz. ko uporabnik zaustavi aplikacijo, se ustavi tudi servis AppUsage, ki prekine prej ustvarjeno nit in odšteje čas od ustvarjanja niti in čas ustavljanja niti. Pretečeni čas pretvori v obliko HH:MM:SS in ta niz shranimo v podatkovno bazo. Če je vzpostavljena povezava z internetom preverimo še ali se je spremenil dovoljeni čas za ta paket v spletnem strežniku in posodobimo podatke v lokalni podatkovni bazi, sicer samo shranimo novi čas uporabe aplikacije v lokalno podatkovno bazo Shranjevanje podatkov v lokalno podatkovno bazo in prenos na spletni strežnik Pri vsakem dogodku, ki se zgodi ni nujno, da je naprava povezana s svetovnim spletom. V primeru, ko prispe novo sporočilo, se podatki o sporočilu shranijo v lokalno podatkovno bazo, če naprava ni povezana s svetovnim spletom. Ko se enak tip dogodka ponovi in če je v napravi vzpostavljena aktivna povezava z internetom, se preberejo podatki iz lokalne podatkovne baze ter skupaj z novimi podatki prenesejo v spletni strežnik, hkrati pa se pobrišejo iz lokalne podatkovne baze. Za vsako funkcijo smo ustvarili posebej razred, ki ima definiran konstruktor razreda z argumenti, ki vsebujejo podatke za določeno funkcijo, ter metode get in set za vsak argument. Ob vklopu vsake posamezne funkcije, se ustvari tabela v lokalni podatkovni bazi za to funkcijo. Tabela ima enako strukturo, kot tabele ustvarjene v spletnem strežniku. S pomočjo razreda DatabaseHelper, ki smo ga ustvarili, ustvarjamo tabele, vnašamo podatke v tabele, beremo podatke iz tabel ter brišemo podatke iz tabel. Znotraj vsake metode v razredu DatabaseHelper, s pomočjo objekta razreda SQLiteDatabase, kličemo metode za 53

65 branje ali pisanje v posamezno tabelo. Metoda za branje iz tabele je getreadabledatabase(), metoda za pisanje v tabelo je getwritabledatabase(). Ko želimo pridobiti podatke iz tabele uporabimo za prehajanje med podatki oz. vrsticam v tabeli objekt razreda Cursor oz. kazalec. 1. //Looping through table and show to first row 2. Cursor cursor = db.rawquery(selectquery, null); Izvorna koda 38: Objekt razreda Cursor kazalec V zgoraj podani kodi (izvorna koda 38), ustvarimo objekt razreda Cursor in z objektom razreda SQLiteDatabase kličemo metodo rawquery(), ki upravlja s podano tabelo in vrne kazalec nad nizom rezultatov. Prvi argument metode je ukaz SQL za delo s tabelami. Nato se sklicujemo na razred za posamezno funkcijo in s pomočjo get in set metod pridobimo podatke. V primeru ko želimo vnesti podatke v tabelo ali pa posodobiti obstoječe podatke uporabimo razred ContentValues, ki se uporablja za shranjevanje niza vrednosti, ki jih ContentResolver lahko obdeluje. 1. //Store a set of values 2. ContentValues contentvalues = new ContentValues(); 3. //Adds a value to the set 4. contentvalues.put(key_calls, settings.getcalls()); 5. contentvalues.put(key_apps, settings.getinstalled_apps()); 6. contentvalues.put(key_location, settings.getlocation()); 7. contentvalues.put(key_messages, settings.getmsg()); 8. contentvalues.put(key_phonebook, settings.getphonebook()); Izvorna koda 39: Primer uporabe razreda ContentValues za shranjevanje podatkov Pri prenosu podatkov iz lokalne podatkovne baze v spletni strežnik se lahko pojavi večja količina podatkov, kar je odvisno od tega, koliko dogodkov se je zgodilo v času, ko naprava ni bila povezana s svetovnim spletom. Kot smo že omenili, je za izvajanje krajših operacij idealen AsyncTask, vendar, ker se v tem primeru lahko čas pošiljanja podatkov podaljša smo, uporabili knjižnico Volley. Prednosti knjižnice Volley pred knjižnico AsyncTask je več: - Samodejno načrtovanje omrežnih zahtev. - Večkratne omrežne povezave. - Podpora za prednostno razvrstitev poizvedb. - Lahko se prekliče ena sama zahteva ali pa več zahtev. - Orodja za odpravljanje napak in sledenje. Pomanjkljivost knjižnice Volley v primerjavi s knjižnico AsyncTask je, da jo je treba posebej dodati v projekt, kar poveča samo velikost projekta. Knjižnico dodamo v projekt na enak način, kot smo dodali dosedanje uporabljene knjižnice. V datoteko build.gradle, znotraj bloka dependencies, dodamo naslednjo vrstico: compile 54

66 'com.android.volley:volley:1.0.0'. Knjižnica Volley večinoma deluje z dvema razredoma in sicer RequestQueue in Request. RequestQueue upravlja niz delovne niti za zaganjanje omrežnih operacij in razčlenjene rezultate vrne nazaj v glavno nit. Zanimiva značilnost knjižnice Volley je, da ko se ustvari čakalna vrsta in v njej dodajo zahteve, se zahteve ne pošiljajo takoj, ampak se najprej preveri če je zahteva že v čakalni vrsti. Ta preverba je narejena po URL-ju zahteve in če se zahteve ujemajo, se nova ne izvede, ampak se stara zahteva nadomesti z novim zahtevanim objektom. 1. public class VolleyHelper { private static VolleyHelper minstance; 4. private RequestQueue requestqueue; 5. private static Context mcontext; private VolleyHelper(Context context) { 8. mcontext = context; 9. requestqueue = getrequestqueue(); 10. } public static synchronized VolleyHelper getinstance(context context) { 13. if (minstance == null) { 14. minstance = new VolleyHelper(context); 15. } 16. return minstance; 17. } public RequestQueue getrequestqueue() { 20. if (requestqueue == null) { 21. requestqueue = Volley.newRequestQueue(mContext.getApplicationConte xt()); 22. } 23. return requestqueue; 24. } public <T> void addtorequestqueue(request<t> req) { 27. getrequestqueue().add(req); 28. } 29. } Izvorna koda 40: Razred VolleyHelper V zgornji izvorni kodi (izvorna koda 40) smo ustvarili primerek RequestQueue, ki traja celo življenjsko dobo aplikacije. Tako lahko v aplikaciji obstaja samo ena čakalna vrsta, namesto, da bi se vsakič znova ustvarila. Za pošiljanje podatkov na strežnik najprej določimo url naslov do skripte, ki teče na strežniku in ki bo sprejela ter obdelala poslane podatke. Potem ustvarimo objekt razreda StringRequest s katerim oblikujemo zahtevo. Konstruktor razreda StringRequest zajema prametre tipa metode, url naslova in poslušalce dogodkov. Nato, lahko glede na zahtevo, zahteva še nekaj spremenljivk. V našem primeru smo uporabljali samo metode tipa POST. Poslušalca dogodkov, ki smo jih uporabili sta Response.Listener in Response.ErrorListener. Response.Listener je poslušalec, ki obravnava odgovor, poslan iz spletnega strežnika. Response.ErrorListener je poslušalec za morebitne napake pri pošiljanju podatkov na strežnik. Za vsako pošiljanje in pridobivanje podatkov iz spletnega strežnika, je omejen dostop z uporabo edinstvenega API ključa, ki ga moramo poslati v glavi zahteve znotraj url 55

67 naslova. S pomočjo metode getheaders() dodamo API ključ v glavo zahteve in s pomočjo metode getparams() pošljemo parametre. Na koncu moramo zahtevo še dodati v čakalno vrsto. 1. StringRequest stringrequest = new StringRequest(Request.Method.POST, deviceinf ourl, new Response.Listener<String>() { 3. public void onresponse(string response) { 4. Log.d("onResponse", "Volley response: " + response); 5. } 6. }, new Response.ErrorListener() { 8. public void onerrorresponse(volleyerror error) { 9. Log.d("onErrorResponse", "Volley error: " + error.tostring()); 10. error.printstacktrace(); 11. } 12. }) { 14. public Map<String, String> getheaders() throws AuthFailureError { 15. Map<String, String> headers = new HashMap<>(); 16. headers.put("content-type", "application/x-www-form-urlencoded"); 17. headers.put("authorization", api); 18. return headers; 19. } 21. protected Map<String, String> getparams() throws AuthFailureError { 22. Map<String, String> deviceinfoparams = new HashMap<>(); 23. deviceinfoparams.put("aname", applicationname); 24. deviceinfoparams.put("pname", packagename); 25. deviceinfoparams.put("icon", iconstring); 26. return deviceinfoparams; 27. } 28. }; 29. VolleyHelper.getInstance(getApplicationContext()).addToRequestQueue(stringRequ est); Izvorna koda 41: Primer izvajanja operacij čakalne vrste 56

68 7. EKSPERIMENTALNI REZULTATI Za testiranje spletne strani in shranjevanje podatkov smo ustvarili lokalni spletni strežnik, ki smo ga enostavno namestili s pomočjo brezplačnega odprtokodnega spletnega strežniškega paketa XAMPP. XAMPP je razvil Apache Friends in je že v osnovi sestavljen iz strežnika Apache, baze podatkov MariaDB in prevajalnikov za skripte napisane v programskih jezikih PHP in Perl. Na lokalnem strežniku smo ustvarili dve mapi, da ločimo spletno stran in skripte preko katerih komunicira aplikacija na pametni napravi s strežnikom. Slika 48: Mape in datoteke na strežniku Slika 48 prikazuje direktorije in datoteke na strežniku. Znotraj direktorija ParentalControl se nahajajo datoteke potrebne za spletno stran ter znotraj direktorija ParentalControlApp so PHP skripte potrebne za prenos podatkov iz Android naprave na strežnik in obratno. Direktorij ParentalControl smo razdelili na več poddirektorijev: - contact: direktorij v katerem se nahaja podstran Contact slika 49 - database: v tem direktoriju se nahaja skripta za povezovanje s podatkovno bazo - images: vse slike, ki so uporabljene na spletni strani - login: stran za prijavo v nadzorno ploščo slika 50 - members: direktorij v katerem se nahaja več poddirektorijev nadzorna plošča - sign-up: stran za registracijo novih uporabnikov - style: direktorij vsebuje CSS datoteke za oblikovanje spletne strani - index.php: prva stran spletne strani 57

69 Slika 49: Stran Contact Slika 50: Stran za prijavo v nadzorno ploščo Po uspešni prijavi v sistem uporabnika preusmerimo na začetno stran nadzorne plošče slika 51. Začetno stran smo zasnovali tako, da uporabnik ima na voljo hiter vpogled na vse pomembne informacije oz. dogodke, ki so se zgodili v času od zadnje prijave v sistem. 58

70 Slika 51: Začetna stran nadzorne plošče Vsi podatki, ki se prenesejo iz mobilne naprave v podatkovno bazo, so takoj vidni na spletni strani. S pomočjo stranske vrstice, se lahko uporabniki preusmerijo na želeno stran in vidijo želene podatke, če je le ta funkcija vklopljena na mobilni napravi. Tako, če uporabnik klikne na stran Locations se naloži zemljevid s trenutno lokacijo uporabnika in shranjenimi lokacijami iz mobilne naprave slika 52. Slika 52: Stran Locations 59

71 Na vseh ostalih straneh so prikazane tabele s podatki, ki so razporejeni po času dogodka sliki 53 in 54. Slika 53: Stran Messages Slika 54: Stran Contacts V primeru, ko uporabnik odpre stran s napravo, ki ima manjši zaslon se tudi stran prilagodi širini zaslona. Stranska vrstica ni več zmeraj prikazana ampak se odpre in zapre s klikom na gumb Menu v menijski vrstici. Na sliki 55 lahko vidimo stran Call log, ko je skrita stranska vrstica ter stran Call log, ko je odprta stranska vrstica. 60

72 Slika 55: Stran Call log z zaprto in odprto stransko vrstico na mobilni napravi Če želimo časovno omejiti uporabo določene aplikacije na mobilni napravi, to storimo na strani Installed apps. S klikom na polje 'Time limit' za določeno aplikacijo se prikaže seznam možnih časovnih omejitev slika 56. Izbrana omejitev se takoj shrani v podatkovno bazo. Slika 56: Stran Installed apps 61

1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatk

1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatk 1 MMK - Spletne tehnologije Vaja 5: Spletni obrazci Vaja 5 : Spletni obrazci 1. Element form Spletni obrazci so namenjeni zbiranju uporabniških podatkov in njihov prenos med spletnimi mesti. Obrazec v

Prikaži več

Nameščanje Adopt Open Java Development Kit 8

Nameščanje Adopt Open Java Development Kit 8 Nameščanje Adopt Open Java Development Kit 8 za Windows x64 IZUM, 2019 IZUM, COBISS, COMARC, COBIB, COLIB, CONOR, SICRIS, E-CRIS so zaščitene znamke v lasti javnega zavoda IZUM. KAZALO VSEBINE 1 Uvod...

Prikaži več

Nameščanje Adopt Open Java Development Kit 8

Nameščanje Adopt Open Java Development Kit 8 Nameščanje Adopt Open Java Development Kit 8 za Windows x64 IZUM, 2019 IZUM, COBISS, COMARC, COBIB, COLIB, CONOR, SICRIS, E-CRIS so zaščitene znamke v lasti javnega zavoda IZUM. KAZALO VSEBINE 1 Uvod...

Prikaži več

IZGRADNJA PREDSTAVITVENE SPLETNE STRANI GLUCOWATCH Avtor: Marko Zajko Projekt delno financira Evropska unija, in sicer iz Evropskega socialnega sklada

IZGRADNJA PREDSTAVITVENE SPLETNE STRANI GLUCOWATCH Avtor: Marko Zajko Projekt delno financira Evropska unija, in sicer iz Evropskega socialnega sklada IZGRADNJA PREDSTAVITVENE SPLETNE STRANI GLUCOWATCH Avtor: Marko Zajko UPORABLJENE TEHNOLOGIJE Za izdelavo predstavitvene spletne strani smo izbrali tehnologije, ki zagotavljajo: Hitro delovanje spletne

Prikaži več

NAVODILA ZA UPORABO K01-WIFI Hvala, ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta Navodila za uporabo in jih shr

NAVODILA ZA UPORABO K01-WIFI Hvala, ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta Navodila za uporabo in jih shr NAVODILA ZA UPORABO Hvala, ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta in jih shranite za prihodnjo rabo Vsebina 1. Pregled 2. Sistem 3. Prednosti 4. Upravljanje

Prikaži več

Vaja 2 Virtualizacija fizičnih strežnikov in virtualni PC A. Strežnik Vmware ESX Namestitev strežnika VMware ESX 3.5 na fizični strežnik 2. Nas

Vaja 2 Virtualizacija fizičnih strežnikov in virtualni PC A. Strežnik Vmware ESX Namestitev strežnika VMware ESX 3.5 na fizični strežnik 2. Nas Vaja 2 Virtualizacija fizičnih strežnikov in virtualni PC A. Strežnik Vmware ESX 3.5 1. Namestitev strežnika VMware ESX 3.5 na fizični strežnik 2. Nastavitve strežnika ESX 3. Namestitev in nastavitve VM

Prikaži več

Chapter 1

Chapter 1 - 1 - Poglavje 1 Uvod v podatkovne baze - 2 - Poglavje 1 Cilji (Teme).. Nekatere domene, kjer se uporabljajo podatkovne baze Značilnosti datotečnih sistemov Problemi vezani na datotečne sisteme Pomen izraza

Prikaži več

Protokoli v računalniškem komuniciranju TCP, IP, nivojski model, paket informacij.

Protokoli v računalniškem komuniciranju TCP, IP, nivojski model, paket informacij. Protokoli v računalniškem komuniciranju TCP, IP, nivojski model, paket informacij. Protokoli - uvod Protokol je pravilo ali zbirka pravil, ki določajo načine transporta sporočil po računalniškem omrežju

Prikaži več

Document ID / Revision : 0519/1.3 ID Issuer System (sistem izdajatelja identifikacijskih oznak) Navodila za registracijo gospodarskih subjektov

Document ID / Revision : 0519/1.3 ID Issuer System (sistem izdajatelja identifikacijskih oznak) Navodila za registracijo gospodarskih subjektov ID Issuer System (sistem izdajatelja identifikacijskih oznak) Navodila za registracijo gospodarskih subjektov Gospodarski subjekti Definicija: V skladu z 2. členom Izvedbene uredbe Komisije (EU) 2018/574

Prikaži več

NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: Faks.: in

NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: Faks.: in NEVTRIN d.o.o. Podjetje za razvoj elektronike, Podgorje 42a, 1241 Kamnik, Slovenia Telefon: +386 1 729 6 460 Faks.: +386 1 729 6 466 www.nevtrin.si info@elektrina.si USB RFID READER Navodila za uporabo?

Prikaži več

Vaja 3 Kopiranje VM in namestitev aplikacij - strežnik SQL 2000 SP3a A. Lokalni strežnik Vmware ESX Dodajanje uporabnikov vajexx v skupino Vaje

Vaja 3 Kopiranje VM in namestitev aplikacij - strežnik SQL 2000 SP3a A. Lokalni strežnik Vmware ESX Dodajanje uporabnikov vajexx v skupino Vaje Vaja 3 Kopiranje VM in namestitev aplikacij - strežnik SQL 2000 SP3a A. Lokalni strežnik Vmware ESX 3.5 1. Dodajanje uporabnikov vajexx v skupino Vaje 2. Kopiranje Win2003 strežnika in registracija na

Prikaži več

Elektronska pošta

Elektronska pošta Elektronska pošta ZGODOVINA Prvo sporočilo je bilo poslano leta 1971. Besedilo, ki ga je vsebovalo, je bilo QWERTYUIOP. Pošiljatelj je bil Ray Tomlinson, računalnika med katerima je bilo sporočilo poslano

Prikaži več

Navodila za nastavitev mail odjemalca na ios in Android napravah TELEFONI iphone (ios 12) Predlagamo, da do svoje študentske e-pošte dostopate s pomoč

Navodila za nastavitev mail odjemalca na ios in Android napravah TELEFONI iphone (ios 12) Predlagamo, da do svoje študentske e-pošte dostopate s pomoč TELEFONI iphone (ios 12) Predlagamo, da do svoje študentske e-pošte dostopate s pomočjo aplikacije Outlook, katero lahko prenesete s pomočjo trgovine App Store. Ko aplikacijo zaženete se vam pojavi naslednje

Prikaži več

PowerPoint Presentation

PowerPoint Presentation INFORMACIJSKI SISTEM MFERAC - LETA 2022 mag. Andreja Sladoje Jemec, Sanja Štumberger Kovačič Ministrstvo za finance 10.12.2018 Vsebina predstavitve 1. Projekt MFERAC05 in izhodišča prenove 2. Izvajanje

Prikaži več

VPELJAVA MDM V DRŽAVEM ZBORU MATJAŽ ZADRAVEC

VPELJAVA MDM V DRŽAVEM ZBORU MATJAŽ ZADRAVEC VPELJAVA MDM V DRŽAVEM ZBORU MATJAŽ ZADRAVEC Državni zbor v številkah 90 poslancev 9 + 1 poslanska skupina 150+ mobilnih naprav (OS Android, ios) 500+ internih uporabnikov, 650+ osebnih računalnikov, 1100+

Prikaži več

Nove različice programske opreme GE Podjetje GE Digital, vodilni svetovni proizvajalec programske opreme za področje avtomatike, je izdalo kar nekaj n

Nove različice programske opreme GE Podjetje GE Digital, vodilni svetovni proizvajalec programske opreme za področje avtomatike, je izdalo kar nekaj n Nove različice programske opreme GE Podjetje GE Digital, vodilni svetovni proizvajalec programske opreme za področje avtomatike, je izdalo kar nekaj novosti na področju SCADA sistemov (ifix Productivity

Prikaži več

NAVODILA ZA IZPOLNJEVANJE ELEKTRONSKEGA OBRAZCA ZA PRIJAVO IN PREKLIC DIGITALNIH POTRDIL Verzija Datum Opis sprememb dokumenta dokumenta

NAVODILA ZA IZPOLNJEVANJE ELEKTRONSKEGA OBRAZCA ZA PRIJAVO IN PREKLIC DIGITALNIH POTRDIL Verzija Datum Opis sprememb dokumenta dokumenta NAVODILA ZA IZPOLNJEVANJE ELEKTRONSKEGA OBRAZCA ZA PRIJAVO IN PREKLIC DIGITALNIH POTRDIL Verzija Datum Opis sprememb dokumenta dokumenta 1.0 22.11.2013 Prva verzija dokumenta 1.1 15.04.2015 Dodana možnost

Prikaži več

Navodila za uporabo programske opreme OTRS verzija Administracijska navodila Avtor navodil: Sebastijan Šilec Datum: December 2007 Center odprte

Navodila za uporabo programske opreme OTRS verzija Administracijska navodila Avtor navodil: Sebastijan Šilec Datum: December 2007 Center odprte Navodila za uporabo programske opreme OTRS verzija 2.2.3 Administracijska navodila Avtor navodil: Sebastijan Šilec Datum: December 2007 Center odprte kode Slovenije Spletna stran: http://www.coks.si/ Elektronski

Prikaži več

Microsoft Word - CNR-BTU3_Bluetooth_vmesnik

Microsoft Word - CNR-BTU3_Bluetooth_vmesnik CNR-BTU3 Bluetooth vmesnik A. Vsebina pakiranja Bluetooth USB Adapter Bluetooth programska oprema in CD z gonilniki Navodila za uporabo in CD 1. Namestitev Bluetooth programske opreme za Windowse 1. Vstavite

Prikaži več

Navodila za pisanje diplomskih nalog UM FERI

Navodila za pisanje diplomskih nalog UM FERI Domen Kupnik RAZVOJ APLIKACIJE ZA UPRAVLJANJE SLIK IN ALBUMOV NA MOBILNI PLATFORMI ANDROID Diplomsko delo Maribor, september 2012 Aplikacija za upravljanje slik in albumov na mobilni platformi Android

Prikaži več

NETGEAR R6100 WiFi Router Installation Guide

NETGEAR R6100 WiFi Router Installation Guide Blagovne znamke NETGEAR, logotip NETGEAR in Connect with Innovation so blagovne znamke in/ali registrirane blagovne znamke družbe NETGEAR, Inc. in/ali njenih povezanih družb v ZDA in/ali drugih državah.

Prikaži več

SETCCE Uporabniška navodila za namestitev in upravljanje komponente SETCCE proxsign v2.0.5 za MAC OS X [Nova generacija komponent SETCCE proxsign ] Id

SETCCE Uporabniška navodila za namestitev in upravljanje komponente SETCCE proxsign v2.0.5 za MAC OS X [Nova generacija komponent SETCCE proxsign ] Id SETCCE Uporabniška navodila za namestitev in upravljanje komponente SETCCE proxsign v2.0.5 za MAC OS X [Nova generacija komponent SETCCE proxsign ] Identifikacijska oznaka dokumenta: n/a Različica dokumenta:

Prikaži več

Za vaše podjetje ModernBiz Glossary 2014 Microsoft Corporation. Vse pravice pridržane.

Za vaše podjetje ModernBiz Glossary 2014 Microsoft Corporation. Vse pravice pridržane. Za vaše podjetje ModernBiz Glossary 2014 Microsoft Corporation. Vse pravice pridržane. A Analitična orodja: Programska oprema, s katero je mogoče zbirati in meriti poslovne podatke ter o njih poročati.

Prikaži več

NETGEAR R6250 Smart WiFi Router Installation Guide

NETGEAR R6250 Smart WiFi Router Installation Guide Blagovne znamke NETGEAR, logotip NETGEAR in Connect with Innovation so blagovne znamke in/ali registrirane blagovne znamke družbe NETGEAR, Inc. in/ali njenih povezanih družb v ZDA in/ali drugih državah.

Prikaži več

PowerPointova predstavitev

PowerPointova predstavitev Izkušnje pri prilagoditvi e-storitev AJPES zahtevam eidas za čezmejno priznavanje Marjan Babič, AJPES 11. 12. 2018 Vsebina Razlogi za vključitev v projekt CEF Telecom Izvajalno okolje AJPES in način integracije

Prikaži več

PowerPoint Presentation

PowerPoint Presentation Uporaba storitve Office 365 v napravi iphone ali ipad Priročnik za hiter začetek dela Ogled e-pošte Nastavite napravo iphone ali ipad tako, da boste lahko pošiljali in prejemali e-pošto iz računa v storitvi

Prikaži več

PowerPointova predstavitev

PowerPointova predstavitev IZKUŠNJE PRI PRILAGODITVI E-STORITEV AJPES ZAHTEVAM EIDAS ZA ČEZMEJNO PRIZNAVANJE MARJAN BABIČ, AJPES Vsebina Razlogi za vključitev v projekt CEF Telecom Izvajalno okolje AJPES in način integracije s SI-PASS

Prikaži več

Microsoft Word - NAVODILA ZA UPORABO.docx

Microsoft Word - NAVODILA ZA UPORABO.docx NAVODILA ZA UPORABO VODILO CCM-18A/N-E (K02-MODBUS) Hvala ker ste se odločili za nakup našega izdelka. Pred uporabo enote skrbno preberite ta Navodila za uporabo in jih shranite za prihodnjo rabo. Vsebina

Prikaži več

Navodila za programsko opremo FeriX Namestitev na trdi disk Avtor navodil: Martin Terbuc Datum: December 2007 Center odprte kode Slovenije Spletna str

Navodila za programsko opremo FeriX Namestitev na trdi disk Avtor navodil: Martin Terbuc Datum: December 2007 Center odprte kode Slovenije Spletna str Navodila za programsko opremo FeriX Namestitev na trdi disk Avtor navodil: Martin Terbuc Datum: December 2007 Center odprte kode Slovenije Spletna stran: http://www.coks.si/ Elektronski naslov: podpora@coks.si

Prikaži več

CODEKS IP KAMERA

CODEKS IP KAMERA CODEKS IP KAMERA uporabniška navodila Vse pravice pridržane. Noben del uporabniških navodil se ne sme reproducirati v kakršnikoli obliki ali na kakršen koli način - grafični, elektronski ali mehanski,

Prikaži več

TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM POGOSTA VPRAŠANJA IN ODGOVORI Ljubljana, Verzija 1.0

TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM POGOSTA VPRAŠANJA IN ODGOVORI Ljubljana, Verzija 1.0 TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM POGOSTA VPRAŠANJA IN ODGOVORI Ljubljana, 12.11.2018 Verzija 1.0 KAZALO 1 REGISTRACIJA... 3 1.1 Katere podatke potrebujem za registracijo/kreiranje

Prikaži več

Navodilo Telemach

Navodilo Telemach Nastavitve za: MOJ TELEMACH Registracija: Na spletni strani Moj Telemach (http://moj.telemach.si) se pomaknite na spodnji del strani in pritisnite gumb REGISTRIRAJ SE. 1. korak Odpre se novo okence, kamor

Prikaži več

PowerPointova predstavitev

PowerPointova predstavitev TIK terminal nima povezave s strežnikom Ob vpisu v TIK Admin se pojavi napis ni povezave s strežnikom Na terminalu je ikona 1. preverimo ali je pravilno nastavljen IP strežnika 1. Preverimo datoteko TIKSAdmin.INI

Prikaži več

UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Milan Gabor Analiza varnostnih tveganj v mobilnih aplikacijah na platfor

UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Milan Gabor Analiza varnostnih tveganj v mobilnih aplikacijah na platfor UNIVERZA V MARIBORU FAKULTETA ZA ELEKTROTEHNIKO, RAČUNALNIŠTVO IN INFORMATIKO Milan Gabor Analiza varnostnih tveganj v mobilnih aplikacijah na platformi Android Diplomsko delo Maribor, avgust 2016 ANALIZA

Prikaži več

Zbornica zdravstvene in babiške nege Slovenije Zveza strokovnih društev medicinskih sester, babic in zdravstvenih tehnikov Slovenije Stanje:

Zbornica zdravstvene in babiške nege Slovenije Zveza strokovnih društev medicinskih sester, babic in zdravstvenih tehnikov Slovenije Stanje: Zbornica zdravstvene in babiške nege Slovenije Zveza strokovnih društev medicinskih sester, babic in zdravstvenih tehnikov Slovenije Stanje: 17.07.2013 Ver. 2.9.1.2 Spletni portal članov uporabniška navodila

Prikaži več

PowerApps

PowerApps ko tehnologija postane brezmejna strast Microsoft PowerApps Uporabniška navodila Avtorji Brina Gomboc, Lucija Kos, Damjana Krampač Mentorici dr. Simona Sternad Zabukovšek Sara Cokan, mag. ekon. in posl.

Prikaži več

Microsoft Word - CN-BTU4 Quick Guide_SI

Microsoft Word - CN-BTU4 Quick Guide_SI Bluetooth Dongle Artikel: CN-BTU4 NAVODILA v1.0 Sistemske zahteve Zahteve za PC: - Proc.: Intel Pentium III 500MHz or above. - Ram: 256MB ali več. - Disk: vsaj 50MB. - OS: Windows 98SE/Me/2000/XP - Prost

Prikaži več

Kratka navodila za uporabo razširjevalnika dosega WiFi AC750 model EX3800

Kratka navodila za uporabo razširjevalnika dosega WiFi AC750 model EX3800 Hiter začetek Razširjevalnik dosega WiFi AC750 Model EX3800 Začetek uporabe Razširjevalnik dosega WiFi NETGEAR doseg omrežja WiFi poveča tako, da okrepi obstoječi signal WiFi in izboljša splošno kakovost

Prikaži več

Microsoft Exchange 2013

Microsoft Exchange 2013 Cumulative update 1 (CU1) for Exchange Server 2013 - izdan včeraj 2.4.2013. Get-AdminAuditLogConfig Get-SendConnector "Internet" Remove- ADPermission -AccessRight ExtendedRight - ExtendedRights "ms-exch-send-headers-

Prikaži več

Slide 1

Slide 1 Projektno vodenje PREDAVANJE 7 doc. dr. M. Zajc matej.zajc@fe.uni-lj.si Projektno vodenje z orodjem Excel Predstavitev Najbolj razširjeno orodje za delo s preglednicami Dva sklopa funkcij: Obdelava številk

Prikaži več

Upravljanje sistema COBISS Navodila za uporabo tiskalnika CITIZEN S310II V1.0 VIF-NA-27-SI

Upravljanje sistema COBISS Navodila za uporabo tiskalnika CITIZEN S310II V1.0 VIF-NA-27-SI Navodila za uporabo tiskalnika CITIZEN S310II V1.0 VIF-NA-27-SI IZUM, 2015 COBISS, COMARC, COBIB, COLIB, IZUM so zaščitene znamke v lasti javnega zavoda IZUM. KAZALO VSEBINE 1 Uvod... 1 2 Uporaba tiskalnika...

Prikaži več

Miluma Trader Miluma Trader navodila: V nadaljevanju sledijo osnovna navodila, kako začeli uporabljati Miluma Trader. 1. Preverite spletno stran Ta po

Miluma Trader Miluma Trader navodila: V nadaljevanju sledijo osnovna navodila, kako začeli uporabljati Miluma Trader. 1. Preverite spletno stran Ta po navodila: V nadaljevanju sledijo osnovna navodila, kako začeli uporabljati. 1. Preverite spletno stran Ta posnetek zaslona vam prikazuje, da morate v levem vrhnjem kotu preveriti, če se nahajate na pravi

Prikaži več

Presentation Name / Author

Presentation Name / Author Kako brez stresa zamenjati požarno pregrado How to Replace the Firewall Without Stress Sašo Tomc - SRC d.o.o. (21. januar 2019) 1) Analiza obstoječe konfiguracije 2) Določanje nivoja tveganja za izpad

Prikaži več

Microsoft Word - M docx

Microsoft Word - M docx Š i f r a k a n d i d a t a : ržavni izpitni center *M15178112* SPOMLNSKI IZPITNI ROK Izpitna pola 2 Četrtek, 4. junij 2015 / 90 minut ovoljeno gradivo in pripomočki: Kandidat prinese nalivno pero ali

Prikaži več

Navodila za uporabo aplikacije mlist - neposredni mentorji za Zdravniško zbornico Slovenije pripravila Gooya, interaktivni mediji, d.o.o. Ljubljana, m

Navodila za uporabo aplikacije mlist - neposredni mentorji za Zdravniško zbornico Slovenije pripravila Gooya, interaktivni mediji, d.o.o. Ljubljana, m Navodila za uporabo aplikacije mlist - neposredni mentorji za Zdravniško zbornico Slovenije pripravila Gooya, interaktivni mediji, d.o.o. Ljubljana, marec 2019 Vsebina 1 Dostop do aplikacije... 3 1.1 Android...

Prikaži več

TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM NAVODILA ZA REGISTRACIJO IN PRIJAVO Ljubljana, Verzija 1.1

TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM NAVODILA ZA REGISTRACIJO IN PRIJAVO Ljubljana, Verzija 1.1 TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM NAVODILA ZA REGISTRACIJO IN PRIJAVO Ljubljana, 14. 03.2019 Verzija 1.1 KAZALO 1 NAMEN...3 2 REGISTRACIJA...4 3 VNOS GESLA IN AKTIVACIJA RAČUNA...6

Prikaži več

TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM NAVODILA ZA REGISTRACIJO IN PRIJAVO Ljubljana, Verzija 1.1,

TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM NAVODILA ZA REGISTRACIJO IN PRIJAVO Ljubljana, Verzija 1.1, TRGOVSKI PORTAL SPLETNA APLIKACIJA NAMENJENA TRGOVCEM NAVODILA ZA REGISTRACIJO IN PRIJAVO Ljubljana, 14. 03. 2019 KAZALO 1 Namen...3 2 Registracija...4 3 Vnos gesla in aktivacija računa...6 4 Prijava...7

Prikaži več

ZAČETNI VODNIK ZA POVEZAVO Izkusite prilagojeno nego perila z aplikacijo My AEG Care. Pralni stroj lahko povežete in upravljate od koder koli in preje

ZAČETNI VODNIK ZA POVEZAVO Izkusite prilagojeno nego perila z aplikacijo My AEG Care. Pralni stroj lahko povežete in upravljate od koder koli in preje ZAČETNI VODNIK ZA POVEZAVO Izkusite prilagojeno nego perila z aplikacijo My AEG Care. Pralni stroj lahko povežete in upravljate od koder koli in prejemate obvestila o tem, kdaj je perilo pripravljeno.

Prikaži več

Splošni pogoji poslovanja 1. Uvodna določba 1) Splošni pogoji poslovanja so pravni dogovor med končnim uporabnikom (fizična ali pravna oseba, v nadalj

Splošni pogoji poslovanja 1. Uvodna določba 1) Splošni pogoji poslovanja so pravni dogovor med končnim uporabnikom (fizična ali pravna oseba, v nadalj Splošni pogoji poslovanja 1. Uvodna določba 1) Splošni pogoji poslovanja so pravni dogovor med končnim uporabnikom (fizična ali pravna oseba, v nadaljevanju»naročnik«) in družbo VI NOVA d.o.o. (v nadaljevanje»ponudnik«).

Prikaži več

PowerPointova predstavitev

PowerPointova predstavitev INTRANET - DETEKTIV Detektivska zbornica Republike Slovenije Pozdravljeni, v kratki predstaviti in navodilih za delo z intranet sistemom Detektiv. Intranet članom Detektivske zbornice RS omogoča, da: -

Prikaži več

Orodje za izvoz podatkov

Orodje za izvoz podatkov Pomoč uporabnikom -NA-SI-200, V6.13-00 IZUM, 2018 COBISS, COMARC, COBIB, COLIB, IZUM so zaščitene znamke v lasti javnega zavoda IZUM. KAZALO VSEBINE 1 Uvod... 1 2 Predstavitev orodja za izvoz podatkov...

Prikaži več

Macoma katalog copy

Macoma katalog copy POSLOVNE APLIKACIJE PO ŽELJAH NAROČNIKA Poročilni sistem Finance in kontroling Poprodaja Podatkovna skladišča Prodaja Proizvodnja Obstoječi ERP Partnerji Implementacija rešitev prilagojena po željah naročnika

Prikaži več

DSI 2019

DSI 2019 SINERGIJA PROTOKOLA IPFS IN TEHNOLOGIJE VERIŽENJA BLOKOV Aida Kamišalić Latifić, Muhamed Turkanović, Blaž Podgorelec, Marjan Heričko TEHNOLOGIJA VERIŽENJA BLOKOV in IPFS Porazdeljena & decentralizirana

Prikaži več

Si.mobil Si.most Najkrajša pot do vaših strank. Ljubljana,

Si.mobil Si.most Najkrajša pot do vaših strank. Ljubljana, Si.mobil Si.most Najkrajša pot do vaših strank. Ljubljana, 3. 06. 13 Si.most SMS nagradna igra SMS nagradna igra Dostop do aplikacije http://www.simost.si SMS nagradna igra Ko se logirate v aplikacijo

Prikaži več

innbox_f60_navodila.indd

innbox_f60_navodila.indd Osnovna navodila Komunikacijski prehod Innbox F60 SFP AC Varnostna opozorila Pri uporabi opreme upoštevajte naslednja opozorila in varnostne ukrepe. Da bi v največji meri izkoristili najnovejšo tehnologijo

Prikaži več

Hiter začetek Razširjevalnik dosega WiFi N300 Model EX2700

Hiter začetek Razširjevalnik dosega WiFi N300 Model EX2700 Hiter začetek Razširjevalnik dosega WiFi N300 Model EX2700 Začetek uporabe Razširjevalnik dosega WiFi NETGEAR doseg omrežja WiFi poveča tako, da okrepi obstoječi signal WiFi in izboljša splošno kakovost

Prikaži več

Mojtelemach brosura_junij 2015_mail

Mojtelemach brosura_junij 2015_mail Naročniški portal MOJ TELEMACH. Junij 2015 Uredite naročilo, ne da bi vstali iz naslanjača. Za preprostejši pregled naročenih storitev, računov in opravljenih klicev ter naročanje dodatnih storitev ipd.

Prikaži več

Modem in krajevno omrežje Uporabniški priročnik

Modem in krajevno omrežje Uporabniški priročnik Modem in krajevno omrežje Uporabniški priročnik Copyright 2008 Hewlett-Packard Development Company, L.P. Informacije v tem priročniku se lahko spremenijo brez prejšnjega obvestila. Edine garancije za HP-jeve

Prikaži več

PRIPOROČILA ZA OBLIKOVANJE KATALOGOV ZNANJA ZA MODULE V PROGRAMIH VIŠJEGA STROKOVNEGA IZOBRAŽEVANJA

PRIPOROČILA ZA OBLIKOVANJE KATALOGOV ZNANJA ZA MODULE V PROGRAMIH VIŠJEGA STROKOVNEGA IZOBRAŽEVANJA KATALOG ZNANJA 1. IME PREDMETA ZBIRKE PODATKOV I ZBIRKE PODATKOV II 2. SPLOŠNI CILJI Splošni cilji predmeta so: razvijanje sposobnosti za uporabo znanstvenih metod in sredstev, razvijanje odgovornosti

Prikaži več

Gimnazija Bežigrad Peričeva Ljubljana OPERACIJSKI SISTEM Predmet: informatika

Gimnazija Bežigrad Peričeva Ljubljana OPERACIJSKI SISTEM Predmet: informatika Gimnazija Bežigrad Peričeva 4 1000 Ljubljana OPERACIJSKI SISTEM Predmet: informatika KAZALO 1. Uvod...3 2. Predstavitev programa Windows 98...5 3. Raziskovanje računalnika...5 4. Raziskovanje Interneta...6

Prikaži več

Strojna oprema

Strojna oprema Asistenta: Mira Trebar, Miha Moškon UIKTNT 2 Uvod v programiranje Začeti moramo razmišljati algoritmično sestaviti recept = napisati algoritem Algoritem za uporabo poljubnega okenskega programa. UIKTNT

Prikaži več

Vzpostavitev več nivojske varnostne infrastrukture S pomočjo Elektro Maribor, McAfee SIEM, CISCO ISE, NGFW Zorna Varga, Sfera IT d.o.o in Klemen Bačak

Vzpostavitev več nivojske varnostne infrastrukture S pomočjo Elektro Maribor, McAfee SIEM, CISCO ISE, NGFW Zorna Varga, Sfera IT d.o.o in Klemen Bačak Vzpostavitev več nivojske varnostne infrastrukture S pomočjo Elektro Maribor, McAfee SIEM, CISCO ISE, NGFW Zorna Varga, Sfera IT d.o.o in Klemen Bačak, Sfera IT d.o.o. 1 Priprava na: Vzpostavitev več nivojske

Prikaži več

IJS EDS IJS Elektronski Dokumentni Sistem Osnovna uporaba sistema uporabniška navodila Institut "Jožef Stefan" Ljubljana

IJS EDS IJS Elektronski Dokumentni Sistem Osnovna uporaba sistema uporabniška navodila Institut Jožef Stefan Ljubljana IJS Elektronski Dokumentni Sistem Osnovna uporaba sistema uporabniška navodila Institut "Jožef Stefan" Ljubljana Projekt: (RD JN19 16) Naročnik projekta: Institut "Jožef Stefan" Izvajalec projekta: BuyITC

Prikaži več

SharePoint GRADNIKI ZA IZBOLJŠANE UPORABNIŠKE IZKUŠNJE

SharePoint GRADNIKI ZA IZBOLJŠANE UPORABNIŠKE IZKUŠNJE SharePoint GRADNIKI ZA IZBOLJŠANE UPORABNIŠKE IZKUŠNJE VSEBINA Spoštovani, 4 GALERIJA Pred vami je katalog gradnikov za SharePoint, ki jih lahko namestite na svoje okolje, bodisi, da uporabljate SharePoint

Prikaži več

Linksys PLEK500 User Guide

Linksys PLEK500 User Guide Uporabniški priročnik Linksys PLEK500 Omrežni vmesnik Powerline Vsebina Pregled............... 2 Funkcije..................... 2 Kako deluje omrežje Powerline 3 Primer namestitve 3 Namestitev omrežja Powerline.....

Prikaži več

Microsoft Word - CNC obdelava kazalo vsebine.doc

Microsoft Word - CNC obdelava kazalo vsebine.doc ŠOLSKI CENTER NOVO MESTO VIŠJA STROKOVNA ŠOLA STROJNIŠTVO DIPLOMSKA NALOGA Novo mesto, april 2008 Ime in priimek študenta ŠOLSKI CENTER NOVO MESTO VIŠJA STROKOVNA ŠOLA STROJNIŠTVO DIPLOMSKA NALOGA Novo

Prikaži več

Na podlagi 24. in 25. člena Zakona o varstvu osebnih podatkov (Ur. list RS, št. 94/07), sprejema ravnatelj javnega zavoda Dijaški dom Nova Gorica nasl

Na podlagi 24. in 25. člena Zakona o varstvu osebnih podatkov (Ur. list RS, št. 94/07), sprejema ravnatelj javnega zavoda Dijaški dom Nova Gorica nasl Na podlagi 24. in 25. člena Zakona o varstvu osebnih podatkov (Ur. list RS, št. 94/07), sprejema ravnatelj javnega zavoda Dijaški dom Nova Gorica naslednji P RAVILNIK o izvajanju videonadzora I. SPLOŠNE

Prikaži več

(Microsoft Word - MSDN AA Navodila za \232tudente FS.doc)

(Microsoft Word - MSDN AA Navodila za \232tudente FS.doc) 1. Pogoji uporabe programske opreme Pred uporabo programske opreme iz programa MSDNAA morate prebrati in se strinjati s pogoji in določili Licenčne pogodbe za končnega uporabnika programske opreme MSDN

Prikaži več

Diplomska naloga: Prototip informacijskega sistema za shranjevanje računov v digitalni obliki

Diplomska naloga: Prototip informacijskega sistema za shranjevanje računov v digitalni obliki UNIVERZA V LJUBLJANI FAKULTETA ZA RAČUNALNIŠTVO IN INFORMATIKO Matej Vovko Prototip informacijskega sistema za shranjevanje računov v digitalni obliki DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM

Prikaži več

Hiter začetek Razširjevalnik dosega WiFi N300 Model WN2000RPTv3

Hiter začetek Razširjevalnik dosega WiFi N300 Model WN2000RPTv3 Hiter začetek Razširjevalnik dosega WiFi N300 Model WN2000RPTv3 Začetek uporabe Razširjevalnik dosega WiFi NETGEAR doseg omrežja WiFi poveča tako, da okrepi obstoječi signal WiFi in izboljša splošno kakovost

Prikaži več

Navodila za namestitev odjemalca ibsreport2 produkcijsko okolje (poročanje Banki Slovenije) Avgust 2017

Navodila za namestitev odjemalca ibsreport2 produkcijsko okolje (poročanje Banki Slovenije) Avgust 2017 Navodila za namestitev odjemalca ibsreport2 produkcijsko okolje (poročanje Banki Slovenije) Avgust 2017 1. Uvod Navodilo je namenjeno tehničnemu osebju pri pošiljateljih poročil oziroma poročevalcih, ki

Prikaži več

SLO NAVODILA ZA UPORABO IN MONTAŽO Kat. št.: NAVODILA ZA UPORABO WLAN usmerjevalnik TP LINK Archer C5 Kataloška št.:

SLO NAVODILA ZA UPORABO IN MONTAŽO Kat. št.: NAVODILA ZA UPORABO WLAN usmerjevalnik TP LINK Archer C5 Kataloška št.: SLO NAVODILA ZA UPORABO IN MONTAŽO Kat. št.: 75 31 33 www.conrad.si NAVODILA ZA UPORABO WLAN usmerjevalnik TP LINK Archer C5 Kataloška št.: 75 31 33 KAZALO 1. PRIKLOP STROJNE OPREME...3 2. KONFIGURACIJA

Prikaži več

Slajd 1

Slajd 1 REPUBLIKA SLOVENIJA MINISTRSTVO ZA JAVNO UPRAVO 1 EU ENOTNI DIGITALNI PORTAL: PRIHAJA NOVA EU UREDBA Alenka Žužek Nemec, Tina Kuliš DNEVI SLOVENSKE INFORMATIKE 18. april 2018 Ko podjetja ali državljani

Prikaži več

IZJAVA O ZASEBNOSTI Sistem ena d.o.o. se zavezuje, da bo varoval osebne podatke kupcev, na način, da zbira samo nujne, osnovne podatke o kupcih / upor

IZJAVA O ZASEBNOSTI Sistem ena d.o.o. se zavezuje, da bo varoval osebne podatke kupcev, na način, da zbira samo nujne, osnovne podatke o kupcih / upor IZJAVA O ZASEBNOSTI Sistem ena d.o.o. se zavezuje, da bo varoval osebne podatke kupcev, na način, da zbira samo nujne, osnovne podatke o kupcih / uporabnikih, ki so potrebni za izpolnitev pogodbe; redno

Prikaži več

Cenik ES_spremembe_marec2013_ČISTOPIS_Sprememba_

Cenik ES_spremembe_marec2013_ČISTOPIS_Sprememba_ Cenik elektronskih storitev Na podlagi 332. člena Zakona o trgu finančnih instrumentov in 34. člena Statuta Ljubljanske borze vrednostnih papirjev, d. d., Ljubljana z dne 27.5.1997, z zadnjimi spremembami

Prikaži več

Microsoft Word - eDenar - navodila za uporabo osebnega portala clana doc

Microsoft Word - eDenar - navodila za uporabo osebnega portala clana doc Navodila za uporabo osebnega portala člana 13.11.08 Pozor: Ta navodila so le v pomoč uporabnikom. V kolikor so navodila v nasprotju s splošnimi pogoji poslovanja kluba, veljajo splošni pogoji poslovanja

Prikaži več

PowerPoint Presentation

PowerPoint Presentation Novosti Državnega centra za storitve zaupanja SI-TRUST Mag. Aleš Pelan, Ministrstvo za javno upravo 11.12.2018 ... 2000 2001 2015 2018 Overitelj na MJU Državni center za storitve zaupanja Novosti v letu

Prikaži več

ISOFT , računalniški inženiring

ISOFT , računalniški inženiring ISOFT, računalniški inženiring Marko Kastelic s.p. Sad 2, 1296 Šentvid pri stični Spletna stran podjetja:http://www.isoft.si podjetja ISOFT Spletna stran sistema sledenja vozil track.si: http://www.track.si

Prikaži več

(Microsoft Word - Nakupovalni vodi\350 po angle\232kih spletnih trgovinah - IzAnglije)

(Microsoft Word - Nakupovalni vodi\350 po angle\232kih spletnih trgovinah - IzAnglije) Nakupovalni vodič po angleških spletnih trgovinah Vedno več ljudi se odloča za nakupe preko spleta. Cene na spletu so pogosto ugodnejše, izbira bolj široka, nakupovanje pa je enostavno in udobno. Dandanes

Prikaži več

Microsoft Word - DGSF - Preverjanje veljavnosti ZPIZ e-dokumentov - V.1.0

Microsoft Word - DGSF - Preverjanje veljavnosti ZPIZ e-dokumentov - V.1.0 Upravljanje z dokumentarnim gradivom (DGSF) Zgodovina dokumenta Verzije # Oznaka verzije Spremembe Avtorji Datum 1.0 Osnovni dokument Upravljanje z dokumentarnim gradivom (DGSF) Stran 2 od 13 Kazalo 1

Prikaži več

Event name or presentation title

Event name or  presentation title Marko Škufca Vodja programa BI, ADD d.o.o. Gorazd Cah Specialist področja Služba za informatiko, DARS d.d. Izziv Rešitev Rezultati... PROCESI + TEHNOLOGIJA + LJUDJE Poslanstvo: s sodobnimi pristopi in

Prikaži več

Področje uporabe

Področje uporabe Regulator Področja uporabe Regulator DIALOG EQ je namenjen predvsem vodenju in nadziranju sistemov ogrevanja in hlajenja, lahko pa se uporabi tudi na različnih področjih avtomatizacije in inteligentnih

Prikaži več

David Zakelšek SPLETNA PODPORA UČENJU MATEMATIKE Diplomsko delo Maribor, september 2013

David Zakelšek SPLETNA PODPORA UČENJU MATEMATIKE Diplomsko delo Maribor, september 2013 David Zakelšek Diplomsko delo Maribor, september 2013 Diplomsko delo Študent: Študijski program: Smer: Mentor: Lektorica: David Zakelšek Univerzitetni študijski program Informatika in tehnologije komuniciranja

Prikaži več

Microsoft Word Navodila za povezavo naprave v oblak_SLO

Microsoft Word Navodila za povezavo naprave v oblak_SLO Navodila za povezavo naprave v oblak Navodila naj se predajo končnemu uporabniku. SLO Id.: 17-16-14-2968-03 5.2017 Navodila za povezavo naprave v oblak Id.: 17-16-14-2968-03 5.2017 Natisnjeno v Sloveniji,

Prikaži več

Navodila za uporabo Mini prenosna HD kamera s snemalnikom

Navodila za uporabo Mini prenosna HD kamera s snemalnikom Navodila za uporabo Mini prenosna HD kamera s snemalnikom www.spyshop.eu Izdelku so priložena navodila v angleščini, ki poleg teksta prikazujejo tudi slikovni prikaz sestave in delovanja izdelka. Lastnosti

Prikaži več

Primerjava razvoja prave domorodne mobilne aplikacije in razvoja z uporabo ogrodja React Native

Primerjava razvoja prave domorodne mobilne aplikacije in razvoja z uporabo ogrodja React Native Univerza v Ljubljani Fakulteta za računalništvo in informatiko David Mihelj Primerjava razvoja prave domorodne mobilne aplikacije in razvoja z uporabo ogrodja React Native DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI

Prikaži več

INFORMATOR BIROKRAT 1/2011

INFORMATOR BIROKRAT 1/2011 ta Veleprodaja Maloprodaja Storitve Računovodstvo Proizvodnja Gostinstvo Turizem Hotelirstvo Ticketing CRM Internetna trgovina Izdelava internetnih strani Grafično oblikovanje NOVOSTI IN NASVETI ZA DELO

Prikaži več

Microsoft Word - Navodila za uporabo 1.1.doc

Microsoft Word - Navodila za uporabo 1.1.doc PhotoOrder Navodila za uporabo 1 Kazalo 1 Kazalo... 2 2 Kazalo slik... 3 3 PhotoOrder... 4 4 Nameščanje programa... 5 4.1 Internet Explorer... 5 4.1.1 "Save" ("Shrani")... 5 4.1.2 "Run" ("Odpri")... 6

Prikaži več

UNIVERZA V LJUBLJANI Fakulteta za elektrotehniko Aleš Pevc Mobilna aplikacija za pomoč pri reševanju ponesrečencev v gorah DIPLOMSKO DELO VISOKOŠOLSKI

UNIVERZA V LJUBLJANI Fakulteta za elektrotehniko Aleš Pevc Mobilna aplikacija za pomoč pri reševanju ponesrečencev v gorah DIPLOMSKO DELO VISOKOŠOLSKI UNIVERZA V LJUBLJANI Fakulteta za elektrotehniko Aleš Pevc Mobilna aplikacija za pomoč pri reševanju ponesrečencev v gorah DIPLOMSKO DELO VISOKOŠOLSKI STROKOVNI ŠTUDIJSKI PROGRAM PRVE STOPNJE TELEKOMUNIKACIJE

Prikaži več

NAVODILA ZA MONTAŽO SI EWPE SMART Wi-FI app

NAVODILA ZA MONTAŽO SI EWPE SMART Wi-FI app NAVODILA ZA MONTAŽO SI EWPE SMART Wi-FI app Uporabniški račun V aplikacijo se je treba prijaviti z uporabniškim računom. Ob prvem zagonu vas bo aplikacija pozvala k registraciji (sign up) ali prijavi (sign

Prikaži več

Navodila za uporabo Mini snemalnik

Navodila za uporabo Mini snemalnik Navodila za uporabo Mini snemalnik www.spyshop.eu Pred vami so navodila za pravilno uporabo mini snemalnika in opis funkcionalnosti. Lastnosti snemalnika: Naziv Mere Teža Kapaciteta spomina Snemanje Format

Prikaži več

Oblikovanje in razvijanje spletnih strani

Oblikovanje in razvijanje spletnih strani Uporabniški vmesnik načrtovanje in izdelava Interaktivni mediji Doc. dr. Aleš Hladnik Načrtovanje uporabniškega vmesnika (UV) Načrtovanje oz. zasnova UV (User( interface design or engineering) je načrtovanje

Prikaži več

Microsoft PowerPoint - seminar_ pptx

Microsoft PowerPoint - seminar_ pptx Leatalske informacije in ARO Slovenia Control Igor Čučnik, ARO Aleš Omahne, NOTAM Uroš Grošelj, AIP Brnik, 12.5.2018 Letalske informacije AIP AIP AMDT AIP SUP AIC NOTAM Serija A, B in C VFR karta Spletna

Prikaži več

Diapozitiv 1

Diapozitiv 1 REPUBLIKA SLOVENIJA MINISTRSTVO ZA JAVNO UPRAVO Dnevi slovenske informatike 2019 NOVOSTI NA PODROČJU STORTEV ZAUPANJA DRŽAVNEGA CENTRA SI-TRUST Dr. Alenka Žužek Nemec 16. april 2019 e-identitete v Sloveniji

Prikaži več

Microsoft Word - P-2_prijava

Microsoft Word - P-2_prijava PRIJAVA Naročnik Oznaka Ime posla NIJZ Trubarjeva cesta 2 1000 LJUBLJANA 21K160318 Javno naročilo Vzdrževanje portala zvem Povsod, kjer obrazec P-2 uporablja izraz»ponudnik«, gre v postopkih, kjer ne gre

Prikaži več

UPRAVLJANJE UPORABNIŠKEGA OKOLJA S SKUPINSKIMI POLITIKAMI

UPRAVLJANJE UPORABNIŠKEGA OKOLJA S SKUPINSKIMI POLITIKAMI Organizacija in management informacijskih sistemov UPRAVLJANJE UPORABNIŠKEGA OKOLJA S SKUPINSKIMI POLITIKAMI Mentor: prof. dr. Jože Zupančič Kandidat: Marko Hacin Kranj, Maj 2011 ZAHVALA Za pomoč in usmeritve

Prikaži več

DCS-2330L_A1_QIG_v1.00(EU).indd

DCS-2330L_A1_QIG_v1.00(EU).indd HD WIRELESS N OUTDOOR CLOUD CAMERA DCS-2330L KRATKA NAVODILA ZA UPORABO VSEBINA PAKETA HD WIRELESS N OUTDOOR CLOUD CAMERA DCS-2330L NAPAJALNI ADAPTER ADAPTER ETHERNET KABEL (CAT5 UTP) MED POSTAVITVIJO,

Prikaži več

Najboljša skupaj Kontrola pristopa + registracija delovnega časa

Najboljša skupaj Kontrola pristopa + registracija delovnega časa Najboljša skupaj Kontrola pristopa + registracija delovnega časa Globalna rešitev prilagojena lokalnemu okolju Rešitev Time&Space je na voljo v 15-ih jezikih ter podpira latinico, cirilico in arabsko pisavo.

Prikaži več

NASLOV PREDAVANJA IME IN PRIIMEK PREDAVATELJA

NASLOV PREDAVANJA IME IN PRIIMEK PREDAVATELJA Portal e-vem obstoječe stanje in nadaljnji razvoj Jernej Baranja Ana Oblak 2 Registracija s.p. v 1 dnevu (prej 7 dni) Registracija d.o.o. v 3 dneh (prej več kot 60 dni) Brezplačna registracija s.p. in

Prikaži več

PowerPointova predstavitev

PowerPointova predstavitev Dostopnost elektronskih virov za slepe, slabovidne in druge osebe z motnjami branja Kristina Janc ZSSML - 27. Seja TIFLO sekcije 22.3.2012 Možnost izkoriščanja elektronskih virov za slepe, slabovidne in

Prikaži več