• Ei tuloksia

Android sovelluksen kehitys

N/A
N/A
Info
Lataa
Protected

Academic year: 2022

Jaa "Android sovelluksen kehitys"

Copied!
27
0
0

Kokoteksti

(1)

T E K I J Ä / T : Aleksi Järvenpää

ANDROID SOVELLUKSEN KEHITYS

Xamarin.Android -ympäristössä

OPINNÄYTETYÖ - AMMATTIKORKEAKOULUTUTKINTO

TEKNIIKAN JA LIIKENTEEN ALA

(2)

SAVONIA-AMMATTIKORKEAKOULU OPINNÄYTETYÖ Tiivistelmä Koulutusala

Tekniikan ja liikenteen ala

Koulutusohjelma/Tutkinto-ohjelma Tietotekniikan tutkinto-ohjelma Työn tekijä(t)

Aleksi Järvenpää Työn nimi

Android sovelluksen kehitys Xamarin.Android –ympäristössä

Päiväys 5.5.2019 Sivumäärä/Liitteet 27

Ohjaaja(t)

Jussi Koistinen, Keijo Kuosmanen Toimeksiantaja/Yhteistyökumppani(t) Yksityinen

Tiivistelmä

Työn tarkoituksena oli luoda prototyyppisovellus konseptin toimivuuden toteamiseksi. Alustaksi rajattiin pilottivaiheessa Android, joskin sovellus on tarkoitus kääntää myös Applen iOs laitteille.

Sovelluksen työstäminen aloitettiin suunnittelulla ja ominaisuuksien rajauksella. Sovellus päätettiin toteuttaa käyttöliittymänä, josta otetaan yhteys API:in. API toteuttaa siksi että valmis sovellus olisi käytettävissä useilla laitteilla.

Kehitystyö jaettiin neljään osioon: suunnitteluun, Android-sovelluksen toteuttamiseen, tietokannan toteuttamiseen sekä API:n tekemiseen. Eniten aikaa vei sovelluksen ja ominaisuuksien suunnittelu. Seuraavaksi eniten työtä aiheutti Xamarin.Android alustan opettelu. Helpoimmat osiot työstä olivat tietokanta ja API, joissa käytettiin minulle entuudestaan tuttuja työkaluja.

Projektin lopputuloksena oli toimiva prototyyppisovellus. Jatkossa prototyyppia tullaan testaamaan yhteistyössä tilaajan sekä asiakkaiden kanssa ja tältä pohjalta toteutetaan tuotantoon tuleva sovellus.

Avainsanat

Android, Xamarin, C#, Visual Studio, MySQL, PHP

(3)

SAVONIA UNIVERSITY OF APPLIED SCIENCES THESIS Abstract Field of Study

Technology, Communication and Transport Degree Programme

Degree Programme in Information Technology Author(s)

Aleksi Järvenpää Title of Thesis

Android application development in Xamarin.Android

Date 5.5.2019 Pages/Appendices 27

Supervisor(s)

Mr Jussi Koistinen, Senior Lecturer Mr Keijo Kuosmanen, Senior Lecturer Client Organisation /Partners

Private Abstract

The purpose of this thesis was to build a fully functional Android prototype to test a concept. Based on the proto- type a full version of the software will be developed and later released.

The development started from a project plan which summarized the goals and features of the software. Some features had to be cut out from the software because of the strict timetable of the project. Based on the research about multi-platform mobile applications it was decided to build a PHP API in which all functions of the application should be executed and a user interface to use the API with a mobile device. The graphical user interface for An- droid was built using Xamarin.Android, a fully functioning android SDK (software development kit) written in C#. It houses all the features of Android development and is therefore great choice for developer familiar with C#. User input is sent as JSON to the API which then returns appropriate data back to the application.

As a result of the thesis, a functioning prototype was built which will be developed to publishable software. After the Android launch it will be ported to iOs devices as well.

Keywords

Android, Xamarin, C#, Visual Studio, MySQL, PHP

(4)

SISÄLTÖ

1 JOHDANTO ... 6

2 KÄYTETYT TEKNIIKAT JA LYHENTEET ... 7

2.1 Xamarin.Android ... 7

2.2 Android sovelluksen pääperiaatteet ja komponentit ... 8

2.2.1 Android SDK ... 8

2.2.2 Sovelluksen pääperiaatteet ... 8

2.2.3 Android manifest ... 9

2.2.4 Sovelluksen käyttämät materiaalit ... 9

2.3 Android-kehityksen vaihtoehdot ... 9

2.4 Prototyyppien rakentaminen ... 10

3 SUUNNITTELU JA MÄÄRITTELY ... 11

3.1 Android sovellus ... 11

3.1.1 Ulkoasu ... 11

3.1.2 Toiminnallisuudet ... 11

3.2 API ... 11

3.3 Tietokanta ... 12

4 ANDROID SOVELLUS ... 14

4.1 Käyttöliittymä ... 14

4.1.1 Värimaailma ... 14

4.2 Ominaisuudet ... 14

4.2.1 Tuotehaku ... 14

4.2.2 Tuotesivu ... 15

4.2.3 Kirjautuminen ... 16

4.2.4 Myyjän profiili ... 17

4.2.5 Tuotteen lisäys ... 17

5 API ... 19

5.1 Rakenne ... 19

5.2 Config ... 20

5.3 Includes ... 21

5.4 Objects ... 22

5.5 Muut kansiot ... 23

(5)

5.6 Tietoturva ... 23

6 TIETOKANTA ... 25

7 PROJEKTIN TULOS JA JATKOKEHITYS ... 26

8 LÄHTEET ... 27

(6)

1 JOHDANTO

Tämän opinnäytetyön aiheena oli tutkia ja toteuttaa Android sovellus Microsoftin Visual Studion tarjoamalla Xamarin.Android –kirjastolla. Työn tilaaja on yksityishenkilö, jonka kanssa sovellus suunniteltiin. Tekniset ratkaisut ovat minun itseni suunnittelemia ja toteuttamia, ainoastaan ulkoasua on suunniteltu yhdessä tilaajan kanssa

Kehitysympäristöksi valikoitui moderni C# -koodia hyödyntävä Xamarin.Android –kirjasto, jonka avulla on mahdollista hyödyntää kaikkia Androidin tarjoamia toimintoja.

Sovelluksen tarkoitus on tarjota alusta kaupoille mainostaa ja tarjota tuotteitaan alennetuin hinnoin.

Käyttäjä pystyy rajaamaan hakua haluamanlaisekseen ja siten löytää juuri häntä kiinnostavat tarjoukset.

(7)

2 KÄYTETYT TEKNIIKAT JA LYHENTEET

C#

Android sovelluksessa käytettävä oliopohjainen ohjelmointikieli, joka on kehitetty alunperin .NET- kirjastoa varten. C# perustuu vanhempaan C++-kieleen ja se tukee moderneja tekniikoita sekä siihen on saatavilla useita kirjastoja, joita hyödyntämällä voidaan rakentaa erilaisia sovelluksia.

MySQL

Relaatiotietokantaohjelmisto, jota on mahdollista käyttää vapaalla GNU GPL –lisenssillä. Yleisimmin käytetty web-pohjaisten sovellusten yhteydessä. Tässä sovelluksessa tietokannan kanssa

kommunikointiin käytetään PHP-pohjaista API:a.

PHP

Oliopohjainen tai proseduraalinen ohjelmointikieli, joka tulkataan vasta suorituksen aikana. Erittäin suosittu web-pohjaisissa sovelluksissa.

API

Sovellusrajapinta, jolla kommunikoidaan käyttäjän (client) ja tietokantapalvelimen (database) välillä.

(Mursu, 2016)

CRUD

CRUD tulee sanoista create (luo), read (lue), update (päivitä) ja delete (poista). Sillä tarkoitetaan tiedon tallentamiseen käytettyjä neljää pääfunktiota. Samoja nimityksiä käytetään niin SQL- kyselyiden nimistä kuin HTTP-metodeista.

XML

XML (Extensible Markup Language) on tekstidokumentti joka noudattaa XML-syntaksia. Android ohjelmoinnissa XML:ää käytetään kuvaamaan sovelluksen ulkoasua sekä tallentamaan usein käytettyä dataa kuten tyylimäärittelyjä.

JSON

Yksinkertainen avoimen standardin tiedostomuoto jota käytetään tiedonvälitykseen eri sovellusten kesken. JSON (JavaScript Object Notation) soveltuu hyvin Android-sovelluksen ja API:n väliseen kommunikointiin.

2.1 Xamarin.Android

Xamarin.Android on Microsoftin Visual Studion sisältämä täysi Android SDK (software development kit), jolla voidaan kehittää nykyaikaisia Android-sovelluksia. (Microsoft, 2018) Tuettuina

ohjelmointikielinä on C# ja F#. Yleisempi vaihtoehto on kuitenkin C#, jolla tämäkin työ on toteutettu.

(8)

2.2 Android sovelluksen pääperiaatteet ja komponentit

Sovelluskehitys Xamarin.Androidilla noudattaa samaa kaavaa perinteisen Java-kehityksen kanssa.

Aluksi valitaan Androidin versio (eli API-taso), jota sovelluksen on vähintäänkin tuettava. Tässä työssä vähintään vaadituksi Android-versioksi valittiin 5.0 (Lollipop) eli API-taso 21. Valintaan päädyttiin sillä kyseiseltä API-tasolta löytyy kaikki tähän sovellukseen vaadittavat ominaisuudet ja lisäksi näin sovellusta pystyy käyttämään 88,9% maailman Android laitteista. (Google, 2018)

2.2.1 Android SDK

Android Software development kit sisältää tarpeelliset työkalut Android-sovelluksen kehitykseen.

Näihin työkaluihin kuuluvat muun muassa debuggeri, luokkakirjastot, QEMU-pohjainen emulaattori, dokumentaatio, esimerkkikoodia ja tutoriaaleja. Android SDK sisältyy yleisimpiin kehitystyökaluihin kuten Visual Studioon sekä Android Studioon.

2.2.2 Sovelluksen pääperiaatteet

Kun tarvittavat työkalut on ladattu sekä sovelluksen minimissään vaatima API-taso valittu päästään kehittämään itse sovellusta. Tarkastellaan kuitenkin ensiksi Android sovelluksen kehityksessä tarvittavia komponentteja ja perusperiaatteita. Sovelluksessa voi olla neljää erilaista

pääkomponenttia (app components).

• Activities (näkymät)

• Services (palvelut)

• Broadcast receivers (ilmoitukset)

• Content providers (sisällöntarjoaja)

Activities

Activity (näkymä) on yksi käyttöliittymän ruutu, jossa voi olla useita toimintoja samassa paketissa.

Vaikka kaikki näkymät ovat samaa sovellusta, ovat ne toisistaan riippumattomia. Tämä mahdollistaa sen, että sovelluksen näkymiä voidaan avata myös muista sovelluksista, jos näkymien käyttö muissa applikaatioissa on sallittu.

Services

Service (palvelu) on taustalla ajettava sovelluksen osa, jolla ei ole käyttöliittymää. Palvelulla voidaan esimerkiksi soittaa musiikkia käyttäjän ollessa toisessa sovelluksessa tai hakea tietoa netin yli sovelluksen ollessa silti käytettävissä samaan aikaan.

Broadcast receivers

Broadcast receiver (ilmoitukset) on komponentti jolla voidaan esittää käyttäjälle ilmoituksia sovelluksesta. Sovelluksen ei tarvitse olla käynnissä ennenkuin ilmoitus aktivoituu, jolloin laitteen käyttöaika yhdellä latauksella pitenee. Tässä sovelluksessa ilmoitukset päätettiin ottaa käyttöön vasta prototyyppivaiheen jälkeen.

(9)

Content providers

Content provider (sisällöntarjoaja) on luokka jolla voidaan tallentaa ja jakaa sovelluksen sisältämää dataa. Data voidaan tallentaa esimerkiksi laitteen muistiin SQLite tietokantaan, palvelimella olevaan tietokantaan tai mihin tahansa muuhun tallennuspaikkaan johon sovelluksella on käyttöoikeus.

Hyvänä esimerkkinä datan jakamisesta on käyttäjän yhteystiedot, joita voidaan hakea ja muokata jos sovelluksella on tarvittavat käyttöoikeudet.

2.2.3 Android manifest

Android manifest on XML-muotoinen listaus sovelluksen komponenteista. Käyttöjärjestelmä lukee manifest-tiedoston ennen sovelluksen avaamista. Tiedostossa on komponenttien lisäksi kerrottu sovelluksen tarvitsemat käyttöoikeudet, minimi API-taso, rauta- ja sovellusominaisuudet joita applikaatio käyttää sekä API-kirjastot jotka vaativat linkkauksen, esimerkiksi Google Maps-kirjasto.

2.2.4 Sovelluksen käyttämät materiaalit

Android sovellus sisältää tyypillisesti muutakin kuin pelkkää suoritettavaa ohjelmakoodia. Erillään ohjelmakoodista ovat ainakin kuvat, äänitiedostot sekä kaikki visuaaliseen esitykseen liittyvät tiedostot. Animaatiot, valikot, tyylitiedostot, värit ja käyttöliittymän suunnitelma esitetään XML- tiedostoina.

Jokaista projektiin liitettyä tiedostoa vastaamaan Android SDK luo uniikin kokonaislukutyyppisen ID:n jota voidaan käyttää ohjelmakoodissa viittauksena kyseiseen materiaaliin. Esimerkiksi logo.png -tiedostolle SDK antaa ID:n ”R.drawable.logo”.

Myös sovelluksen käyttämille teksteille voidaan antaa omat ID:nsä. Näin pystytään helposti luomaan sovelluksesta omat kieliversiot. Tämän työn sovelluksessa valittiin toiseksi kieleksi suomen lisäksi englanti. Englanninkieliset tekstit ovat tiedostossa ”values/strings.xml” ja suomenkieliset vastineet tiedostossa ”values-fi/strings.xml”.

Kuva 1: Lokalisointi toteutetaan luomalla lisäkielille oma kansio sekä strings.xml -tiedosto.

2.3 Android-kehityksen vaihtoehdot

Android-sovelluksia voidaan kehittää useilla eri alustoilla ja ohjelmointikielillä. Tässä työssä käytetty Xamarin.Android on hieman harvemmin käytetty esimerkiksi Googlen tarjoamiin Kotlin ja Java pohjaisiin SDK:hin verrattuna. Valinta kuitenkin kohdistui Xamariniin, koska C# on minulle

(10)

henkilökohtaisesti tutumpi ohjelmointikieli kuin Kotlin tai Java sekä osa C#-pohjaisista kirjastoista on käytettävissä myös Applen iOS sovelluksissa. Näin ollen sovelluksen kääntäminen iOS:ille helpottuu, kun esimerkiksi kameran ja tiedostojärjestelmän käyttämiseen tarvittava ohjelmakoodi on suoraan käytettävissä myös iOS laitteilla.

Aloittavalle kehittäjälle Java on varmasti helpoin vaihtoehto varsinkin saatavilla olevien materiaalien puitteissa. C# pohjaisia esimerkkejä on huomattavasti vähemmän tarjolla kuin Javaan pohjautuvia.

Kuitenkin Java ja C# ovat syntaksiltaan kohtalaisen lähellä toisiaan, joten osa Javalla tehdyistä tutoriaaleista ja esimerkeistä ovat helposti käännettävissä myös C#:ille.

Uusin Google suoraan tukemista ohjelmointikielistä on Kotlin. Nykypäivänä monet kehittäjät vaihtavat Javasta Kotliniin Android-kehityksessä. Kotlinissa on monia ohjelmoijien arvostamia ominaisuuksia. Se toimii suoraan yhdessä Javan kanssa, joten vanhemmatkin projektit pystyvät hyödyntämään olemassa olevia kirjastoja käyttäen silti pääsääntöisesti Kotlinia. Sen syntaksi on lähellä Javaa ja C#:ia. String-tyyppisten tekstimuuttujien käsittely on Kotlinissa Javaa helpompaa eikä muuttujan tyyppiä tarvitse halutessaan määritellä muuttujaa luodessa. Lisäksi Kotlinissa on monia muita käyttöä helpottavia ominaisuuksia, jotka koskevat muun muassa toistorakenteita sekä muuttujien vertailua. Lisäksi Java-koodi on mahdollista kääntää Kotliniksi IntelliJ IDE:lla. (Vinther, 2017)

Pelkästään Android-sovellusta tehdessä luonnollinen valinta on Kotlin sen erinomaisten

ominaisuuksien takia. Tässä projektissa kuitenkin vaakakupissa painoivat myös henkilökohtaiset mieltymykset sekä ohjelmakoodin osittainen toimivuus myös iOS ympäristössä.

2.4 Prototyyppien rakentaminen

Android-prototyyppien kehitykseen on nykyään tarjolla erinomaisia ohjelmistoja. Niillä saa nopeasti luotua sovellukseen interaktiivisen käyttöliittymän. Onkin kannattavaa hyödyntää prototyyppien kehitykseen tarkoitettua ohjelmistoa ennen varsinaisen toimivan prototyypin aloittamista. Tällä säästäisi aikaa jonka voi käyttää ohjelmakoodin parempaan optimointiin. Harmillisesti tämän projektin kohdalla ulkoasusuunnittelu oli jo valmistunut tutustuessani tällaisiin ohjelmistoihin.

Tulevaisuuden projekteissa tulen kuitenkin ottamaan prototyyppien luomiseen suunnitellun sovelluksen käyttöön.

Näistä sovelluksista saa ulkoasun suoraan Androidin ymmärtämässä XML-muodossa siirrettyä Android projektiin, joten hieman ongelmia aiheuttanut ulkoasusuunnittelu voi toimia nopeammin ja helpommin.

(11)

3 SUUNNITTELU JA MÄÄRITTELY

Suunnittelussa lähdettiin liikenteeseen pohtimalla mitä ominaisuuksia sovelluksen

prototyyppiversioon halutaan toteuttaa. Ominaisuuksien rajaamisen jälkeen tehtiin alustava suunnitelma sovelluksesta. Tässä vaiheessa suunnitelmaan lisättiin myös API, jota tarvitaan estämään tietokannan käyttäjätunnuksen ja salasanan päätyminen väärinkäyttäjän haltuun.

Huollellisella suunnittelulla pyrittiin vähentämään ongelmia sovelluksen kehityksen edetessä sekä nopeuttamaan prototyypin valmistumista.

3.1 Android sovellus

3.1.1 Ulkoasu

Android sovelluksen suunnittelu aloitettiin piirtämällä alustavat näyttökuvat kaikista käyttäjälle näkyvistä näytöistä. Tämän jälkeen näyttökuvat muutettiin Androidin ymmärtämäksi XML- tiedostoksi. Lopullinen ulkoasu lyötiin lukkoon vasta sovelluksen kehityksen loppuvaiheessa, sillä sovellusta haluttiin testata, vaikkei ulkoasu vastannutkaan vielä lopullista versiota. Ulkoasuun tulleet muutokset olivat pelkästään kosmeettisia, sillä tekstikentät ynnä muut komponentit olivat selvillä jo työn alkuvaiheessa.

3.1.2 Toiminnallisuudet

Alusta asti oli selvää, että sovellus tarvitsee joko paikannustiedon puhelimen GPS-piiriltä tai käyttäjän sijainnin osoitteen perusteella. Lisäksi sovelluksen piti pystyä käsittelemään JSON- muodossa olevaa dataa, joka palautetaan tietokannasta API:n kautta. Myös API:lle tehtävät kutsut ovat JSON-muotoisia.

Sovelluksen tuli myös käyttää puhelimen kameraa tai tiedostojärjestelmää tuotekuvan lisäämiseksi.

Kuvien ja tiedostojen käsittelyyn löytyy valmis C#-kirjasto, joka on lisensoitu vapaasti käytettäväksi.

Näiden lisäksi sovelluksen ainoaksi toiminnallisuudeksi jäi käyttäjän kirjautuessa antaman salasanan salaus, sekä haettujen tuotteiden listaus näytölle.

3.2 API

API:n suunnittelu aloitettiin tutustumalla API:n rakenteeseen ja toimintaan (MuleSoft, 2019). API:n rakennetta kuvattiin kansiomaisesti puurakenteena, jossa jokaiselle oliolle luotiin oma luokka sekä omat metodit. API:n rakenne ilmenee taulukosta 1. API:n tietoturvaa parannettiin ottamalla käyttöön kaksi erillistä avainta, toinen käyttäjille ja toinen ylläpidolle. Näin mahdolliset hyökkääjät eivät pääse esimerkiksi poistamaan käyttäjiä tietokannasta.

(12)

Pääkansio Kansio Tiedosto AndroidAPI

config

core.php database.php includes

functions.php objects

product.php shop.php user.php products

create.php delete.php search.php search_one.php update.php shops

create.php delete.php search.php search_one.php update.php users

change_password.php create.php

delete.php log_in.php Taulukko 1: API:n rakenne

3.3 Tietokanta

Tietokantaa suunniteltiin yhdessä muun sovelluksen kanssa ja sen kentät tulivat suoraan sen mukaan, mitä dataa sinne talletetaan. Tietotyypit määriteltiin sen jälkeen kun kannan rakenne oli saatu valmiiksi. Lisäksi tietokantaan toteutettiin muutamia tauluja helpottamaan sovelluksen ylläpitoa.

Muutama aputaulu luotiin myös estämään väärinkäyttöä, kuten brute-force -hyökkäystä (väsytyshyökkäys) sekä helpottamaan sovelluksen hallintaa. Väsytyshyökkäyksen estäminen toteutettiin tallentamalla kirjautumisyritykset ja käyttäjän id aikaleiman kanssa tauluun ja tarkistamalla kirjautuessa montako kirjautumisyritystä käyttäjätunnuksella on tehty lyhyen ajan

(13)

sisällä. Jos yrityksiä on yli viisi, käyttäjätunnus lukitaan ja käyttäjän sähköpostiin lähetetään ilmoitus asiasta. Tietokantaa tuotantovalmiiksi kehitettäessä hallintatauluja tarvitaan vielä lisää, joihin voidaan tallentaa dataa esimerkiksi käyttäjien aktiivisuudesta sovelluksessa, kiinnostavimpien tuotteiden listaus sekä muita parempaan käytettävyyteen liittyviä tietoja.

(14)

4 ANDROID SOVELLUS

4.1 Käyttöliittymä

Sovelluksen toteutus aloitettiin suunnitelman mukaisesti ulkoasukuvien muuttamisella Androidin käyttämään XML-tiedostoon. Ulkoasuja viilattiin kehityksen aikana useampaan kertaan, alussa valmiina olivat ainoastaan tarvittavat kentät, valikot sekä käyttöliittymän napit.

Käyttöliittymään haettiin yhdessä tilaajan kanssa modernia ja helppokäyttöistä ulkoasua. Kuvassa 2 havainnollistetaan lopullista ulkoasua sekä esitellään eri kehitysversioita käyttöliittymästä.

Kuva 2: Käyttöliittymän kehitysversiot sekä prototyypin lopullinen ulkoasu.

4.1.1 Värimaailma

Sovelluksen pääväriksi valittiin valkoinen, sininen sekä musta. Käytännössä pohjana on valkoinen, sinistä käytetään komponenttien tehostevärinä ja mustaa tekstissä. Valkoista käytetään myös tekstin värinä jos pohjana on sininen.

4.2 Ominaisuudet

4.2.1 Tuotehaku

Sovelluksessa haetaan lähellä sijaitsevien liikkeiden valikoimista tarjoustuotteita, joten tärkein ominaisuus on tuotehaku. Haku on suoraan sovelluksen etusivulla ja siinä voidaan rajata haettavia tuotteita kuvassa 3 näkyvien hakuehtojen mukaan.

(15)

Kuva 3: Hakuehtojen rajaus.

Käyttäjän painaessa Hae-nappia lähetetään hakuehdot JSON muodossa API:lle, joka palauttaa sovellukseen JSON:ina haun tulokset. Tämän jälkeen haun tuloksista luodaan objektilista, joka näyetään käyttäjälle.

4.2.2 Tuotesivu

Hakutulosta painamalla käyttäjä pääsee tuotesivulle, jossa näytetään mahdollinen tuotekuva, tuotteen otsikko, kuvaus, kaupan tiedot sekä kivijalkaliikkeen sijainti kartalla. Kartasta saa suoraan ajo-ohjeet kohteeseen.

(16)

Kuva 4: Tuotesivu.

4.2.3 Kirjautuminen

Navigointipalkista painamalla pääsee kirjautumissivulle. Prototyyppivaiheessa kirjautuminen on rajattu ainoastaan myyjille. Kirjautumissivulla annetaan käyttäjätunnus sekä salasana, jotka lähetetään salattuna JSON muodossa API:in. Jos käyttäjätunnus ja salasana täsmäävät johonkin tietokannassa olevaan vastaavaan pariin, palautetaan käyttäjän tiedot sovellukseen ja ohjataan käyttäjä profiiliinsa.

(17)

4.2.4 Myyjän profiili

Myyjät (liikkeet) voivat muokata profiiliaan halutunlaiseksi. Profiilista löytyvät perustiedot kuten nimi, osoite, kuvaus liikkeestä sekä myyjän listaamat tuotteet. Kun profiili tallennetaan, tiedot lähetetään palvelimelle ja tallennetaan tietokantaan. Palvelimelta palautetaan viesti jossa kerrotaan onnistuiko tallennus ja tämä viesti näytetään käyttäjälle.

Profiilista pystyy myös hallitsemaan omia ilmoituksia. Ilmoituksia voidaan muokata, poistaa ja piilottaa.

Kuva 5: Myyjäprofiili käyttäjän näkökulmasta.

4.2.5 Tuotteen lisäys

Myyjätunnuksilla kirjautuessa valikkoon aukeaa mahdollisuus lisätä tuote valikoimiin. Tuotetta lisätessä sille täytyy antaa otsikko, kuvaus, alkuperäinen hinta, alennusprosentti, osasto sekä sijainti.

Lisäksi tuotteelle voidaan antaa tuotekuva käyttäen valmiiksi otettua kuvaa puhelimen tiedostojärjestelmästä tai uutta kuvaa joka otetaan puhelimen kameralla.

(18)

Tallennettaessa tiedot lähtevät palvelimelle JSON muodossa ja se palauttaa viestin onnistumisesta tai epäonnistumisesta. Kuva lähetetään bitmap-muodossa, jolloin sen pystyy sisällyttämään http- kutsuun.

Kuva 6: Tuotteen lisäys.

(19)

5 API

5.1 Rakenne

Kuten taulukosta 1 käy ilmi, API on jaettu pääkansioon sekä sen alla oleviin alikansioihin.

Alikansioita ovat config asetuksille, includes yleisesti käytetyille funktioille, objects sovelluksen käyttämille luokille sekä jokaista luokkaa vastaava kansio kyseisen luokan toiminnoille.

Tässä työssä käytetty API on jaettu eri tiedostoihin CRUD-metodien perusteella. Esimerkiksi

”/AndroidAPI/users/create.php” -tiedosto ottaa vastaan HTTP POST-muodossa olevan JSON listauksen luotavan käyttäjätunnuksen parametreista. Kyseinen PHP-skripti tarkistaa, että kaikki tarvittavat parametrit ovat JSON:issa mukana, tarkistaa API-avaimen oikeellisuuden kyseiseen toimintoon, luo parametreista user-tyyppisen olion ja kutsuu sille create-metodia. Tämän jälkeen palautetaan tieto JSON muodossa käyttöliittymään joka ilmoittaa käyttäjälle onnistuiko käyttäjän lisäys.

Kuva 7: /AndroidAPI/users/create

(20)

Kuva 8: /AndroidAPI/objects/user create-metodi

5.2 Config

Config-kansion alta löytyvät API:in liittyvät asetukset ja tietokantayhteyteen tarvittavat tiedot.

Core.php tiedostosta löytyvät API:n asetukset ja database.php:sta tietokannan kirjautumistiedot.

Kuva 9: Database-luokka tiedostossa database.php.

Asetuksissa on määriteltynä kaksi erillistä avainta, joita käyttämällä API:lle voi tehdä kutsuja.

Kutsussa tulee aina olla mukana toinen näistä avaimista, jotta API:n puolella voidaan varmistua käyttäjän oikeuksista toteuttaa kyseinen kutsu.

(21)

Kuva 10: API:n asetukset.

5.3 Includes

Includes-kansiossa on yleisimmin käytettyjä funktioita kerättynä functions.php tiedostoon.

Tiedostosta functions.php löytyy esimerkiksi etäisyyden mittaamiseen käytettäviä funktioita, API- avaimen tarkistus, lokitiedostoon kirjoitus sekä ajan ja päivämäärien käsittelyyn liittyviä funktioita.

Käyttäjän ja myyjän etäisyyden arviointiin käytetään kahta funktiota. Toinen perustuu Haversinen kaavaan ja toinen Vincentyn kaavaan.

Kuva 11: Etäisyyden laskeminen.

Näiden kahden funktion tuloksen keskiarvolla arvioidaan käyttäjän ja myyjän välistä etäisyyttä.

Funktioita käytetään ainoastaan etäisyyden karkeaan arviointiin, lopullinen etäisyys mitataan käyttäen Google tarjoamaa Maps API:a. Ratkaisuun päädyttiin, koska Googlen API:n kutsuminen on maksullista eikä Haversinen tai Vincentyn kaavoilla saa mitattua etäisyyttä tietä pitkin. Tällä tavoin

(22)

säästetään kustannuksista kun karkea arviointi voidaan tehdä ennen sijaintien lähettämistä Googlen API:lle.

5.4 Objects

Objects pitää sisällään sovelluksen tarvitsemat luokat. Prototyyppivaiheessa tarvittavia luokkia ovat käyttäjä (user.php), kaupat (shop.php) ja tuote (product.php). Luokat sisältävät tarvittavat

muuttujat sekä luokan metodit.

Kuva 12: Shop-luokka.

(23)

5.5 Muut kansiot

Loput kansiot sisältävät tiedostoja jotka ottavat vastaan Android-sovelluksesta tulevat parametrit JSON-muodossa. Vastaanotetusta datasta luodaan tarvittava olio ja kutsutaan tälle oliolle haluttua metodia. Lopulta sovellukselle palautetaan tieto onnistumisesta JSON:ina.

Kuva 13: Käyttäjän kirjautumiseen tarvittavien tietojen vastaanotto ja reititys.

5.6 Tietoturva

API:n avoimuuden takia siinä on otettu käyttöön kiinteä avain, jonka tulee aina olla kutsun parametrina. Ennen kuin oliota luodaan tarkistetaan että avaimella on riittävät käyttöoikeudet.

(24)

Perustoiminnot kuten hakujen tekeminen ja kirjautuminen onnistuvat käyttäjän avaimella, mutta esimerkiksi käyttäjän lisääminen on mahdollista ainoastaan ylläpitäjän avaimella.

Tulevaisuudessa avaimia on mahdollista lisätä ja täten rajata erilaisten käyttäjien (tai hyökkääjien) mahdollisuuksia sovelluksessa.

Kuva 14: API-avaimen tarkistus.

(25)

6 TIETOKANTA

Tietokantana käytetään MySQL:n versiota 5.7. Taulut on suunniteltu ja toteutettu luokkakuvausten perusteella, joten ne sisältävät samat kentät kuin sovelluksissa olevat luokat. Lisäksi jokaisella rivillä on uniikki kokonaislukutyyppinen (integer) ID-kenttä, jolla eritellään rivit toisistaan.

Päätaulujen lisäksi tietokantaan luotiin aputaulu tallentamaan epäonnistuineiden

kirjautumisyrityksien aikaleima ja käyttäjän Id, jolla pyritään estämään salasanojen kalastelu.

Yhdellä käyttäjätunnuksella salasanan voi antaa lyhyessä ajassa väärin viisi kertaa, jonka jälkeen käyttäjätunnus lukitaan ja käyttäjää informoidaan asiasta sähköpostitse.

Lisäksi kauppojen tyyppien sekä tuotteiden osastojen hallintaan luotiin omat taulunsa. Näin uusien kategorioiden ja kauppojen lisääminen sekä vanhojen hallitseminen helpottuu.

Kuva 15: Tietokanta.

(26)

7 PROJEKTIN TULOS JA JATKOKEHITYS

Projektin tavoitteena oli luoda toimiva prototyyppi, jota on mahdollista esitellä tuleville

yhteistyökumppaneille. Prototyyppi saatiin toimivaksi ja jatkokehitystä on suunniteltu. Projektin aikataulun johdosta kehitettäviä kohteita jäi reilusti. Osa ominaisuuksista jouduttiin karsimaan kokonaan pois ja osaa jouduttiin rajaamaan yksinkertaisemmiksi.

Työn aikana hankaluuksia aiheuttivat kehitysympäristössä olleet pienet bugit, jotka yleensä korjaantuivat Visual Studion uudelleen käynnistyksellä. Yksi ikävimmistä bugeista liittyi kuviin, joita käyttöliittymän testausvaiheessa liitettiin käyttöliittymään suoraan Androidin kansiosta. Näissä tilanteissa kävi usein niin, että kääntäjä ei löytänytkään kuvaa, vaan ilmoitti puuttuvasta resurssista.

Tämä hidasti käyttöliittymien työstämistä hieman.

Seuraavaa vastaavaa projektia tehdessä loisin luultavasti visuaalisen prototyypin ennen toimivan ohjelmiston tekemisen aloitusta. Näin sovelluksen käyttöliittymiä olisi helpompi ja nopeampi testata käytännössä ilman että taustalla tarvitsisi olla koodia juurikaan. Prototyyppityökaluja Androidille on saatavilla kuitenkin reilusti, joten valinnanvaraa olisi hyvin ja osasta saa jopa valmiin ulkoasun suoraan siirrettyä projektiinsa.

Seuraavana vaiheena projektissa on prototyypin huolellinen testaaminen sekä tarvittavat korjaukset koodiiin, ulkoasuun ja API:in. Vaikka kokonaisuus on toimiva, täytyy monia asioita ja vielä hioa sekä parantaa.

Kun Android versio sovelluksesta on saatu tuotantovalmiiksi on tavoitteena ottaa sovellus

testikäyttöön. Testikäytön perusteella tehdään päätös sovelluksen kääntämisestä myös Applen iOs sovellukseksi. Sovelluksen kääntäminen on käytettyjen tekniikoiden ansiosta helppoa. Käytännössä ainoastaan ulkoasu täytyy suunnitella uudestaan, toiminnallisuudet tulevat API:n päästä ja ovat näin ollen käytettävissä millä tahansa alustalla.

(27)

8 LÄHTEET

Google. (26. October 2018). Distribution Dashboard. Noudettu osoitteesta Android Developers:

https://developer.android.com/about/dashboards/

Microsoft. (11. 08 2018). Microsoft Documents. Noudettu osoitteesta https://docs.microsoft.com/en- us/xamarin/android/

MuleSoft. (2019). MuleSoft. Noudettu osoitteesta What is REST API Desing:

https://www.mulesoft.com/resources/api/what-is-rest-api-design

Mursu, S. (2016). REST-TIETOKANTARAJAPINTA MOBIILISOVELLUKSELLE JA WEB-SIVUSTOLLE. Oulu: Oulun ammattikorkeakoulu.

Vinther, M. (10. May 2017). Medium. Noudettu osoitteesta Mediam Programming:

https://medium.com/@magnus.chatt/why-you-should-totally-switch-to-kotlin-c7bbde9e10d5

Viittaukset

LIITTYVÄT TIEDOSTOT

Title Generatorin kehityksessä tie- tokannan muokkamiseen käytettiin kuitenkin pääasiassa Notepad++- ohjelmistoa, sillä se käynnistyy nopeasti, mahdollistaa

sovelluskehyksen avulla uudelle käyttöjärjestelmälle lisätään vain alusta (engl. platform) projektiin, jotta sovellus voidaan kääntää uudelle käyttöjärjestelmälle

Projektin myöhem- missä vaiheissa toteutettiin myös sovelluksen käyttöönottoon sekä järjestelmän asen- nukseen liittyvät ominaisuudet, joita esittelen myöhemmin

Jotta sovelluksen voi päivittää uudempaan versioon laitteessa, jossa sovellus on jo asennettuna, tulee sovelluskoodin numeron olla edellisen version nume- roa korkeampi..

Sovellus voi- daan suunnitella käyttämään tekstistä puheeksi -synteesiä, jolla muutetaan kir- joitettu teksti puhuttuun muotoon ja sovellus pystyy näin myös vastaamalla

Käytännössä tämä on mahdollista vain, mikäli käyttää Cor- dova projektin ylläpitämiä liitännäisiä jotka on kirjoitettu jokaiselle alus- talle

Niitä voidaan sitten hyödyntää testikoodissa, jos halutaan saada kaikkien laitteiden tiedot testien niillä suorittamista varten.. Lopputuloksena syntyi järjestelmä,

Yksikkö- ja integraatiotestit testaavat komponenttien toimivuutta ja niiden välisiä integraatioita, mutta nämä testit eivät testaa sovelluksen käytettävyyttä