Diplomski Beta 3.2.2
Diplomski Beta 3.2.2
ELEKTROTEHNIČKI FAKULTET
Dragan Milanović
diplomski rad
Kandidat:
Dragan Milanović
UNIVERZITET U BANJOJ LUCI
ELEKTROTEHNIČKI FAKULTET
KATEDRA ZA RAČUNARSTVO I INFORMATIKU
SADRŽAJ
1. UVOD ............................................................................................................................................. 2
2. ISTORIJSKI RAZVOJ .................................................................................................................... 3
3. RAZVOJ APLIKACIJA.................................................................................................................. 6
3.1. Android Studio ............................................................................................................................. 6
3.2. Struktura ....................................................................................................................................... 7
3.3. Komponente ................................................................................................................................. 9
3.4 Internet i dozvole ......................................................................................................................... 11
3.5 Obfuskacija i optimizacija koda (ProGuard) ............................................................................... 12
3.6 Distribucija (Potpisivanje, Objavljivanje) ................................................................................... 13
3.6.1. Potpisivanje ......................................................................................................................... 13
3.6.2. Objavljivanje ....................................................................................................................... 14
3.6.3. Google Play ......................................................................................................................... 15
3.6.4. Alternative ........................................................................................................................... 16
4. MODELI MONETIZACIJE .......................................................................................................... 17
4.1 Oglasi (Reklame) ......................................................................................................................... 17
4.1.1. Oglasna platforma ......................................................................................................... 17
4.1.2. Modeli određivanja cijena (PPC, CPC, CPM, CPI, CPA, CPV, eCPM)....................... 18
4.1.3. Formati mobilnih oglasa ................................................................................................ 19
4.1.4. Implementacija oglasa ......................................................................................................... 20
4.2. Premium ..................................................................................................................................... 24
4.3. Freemium.................................................................................................................................... 25
4.4. eCommerce................................................................................................................................. 26
4.5. Kupovina u aplikaciji (IAP) ....................................................................................................... 26
4.5.1. Uvod .................................................................................................................................... 26
4.5.2. Implementacija .................................................................................................................... 27
4.6. Pretplate ...................................................................................................................................... 28
4.7. Hibrid ......................................................................................................................................... 30
4.8. Statistika ..................................................................................................................................... 31
1. PRAKTIČAN RAD ....................................................................................................................... 33
1.1. Aplikacija .............................................................................................................................. 33
1.2. Objavljivanje ......................................................................................................................... 34
1.3. Monetizacija .......................................................................................................................... 37
2. ZAKLJUČAK ............................................................................................................................... 40
LITERATURA
1
Diplomski rad Dragan Milanović
1. UVOD
2
Diplomski rad Dragan Milanović
2. ISTORIJSKI RAZVOJ
1
https://www.perficientdigital.com/insights/our-research/mobile-vs-desktop-usage-study.
2
WAP (Wireless Application Protocol) - Protokol za online aplikacije.
3
Podružnica - kompanija koja je pod kontrolom ili u potpunom vlasništvu druge kompanije.
4
SDK (Software Development Kit) - Paket za razvoj softvera.
3
Diplomski rad Dragan Milanović
oktobru iste godine je pokrenut i Android Market, koji postaje drugi po redu dominantni
distributer mobilnih aplikacija, glavna konkurencija App Store-u [6].
Google kupuje Admob za 750 miliona dolara 2009. godine [2], početkom iste godine
Apple širom svijeta pokreće kampanju „Postoji aplikacija za to“ (eng. There's An App For
That) [6], a u novembru je lansiran WhatsApp i Angry Birds, najprodavanija komercijalna
aplikacija svih vremena [6]. Naredne godine Apple se pridružuje mobilnom oglašavanju sa
iAd platformom, kao konkurencija AbMob-u, ali je doživila veliki neuspjeh i obustavljena u
junu 2016. godine [2].
Engleska riječ App proglašena je za „Riječ godine 2010“. Facebook počinje da
prikazuje svoje oglase u Facebook mobilnoj aplikaciji 2012. godine. Iste godine Android
Market mijenja ime u Google Play Store, a u maju 2012. godine aplikacija (igrica) Angry
Birds dostiže milijardu preuzimanja [2]. Google Play broji 50 milijardi preuzimanja i ima
preko milion aplikacija sredinom 2013. godine [6]. U 2017. godini je imao preko 82 milijarde
preuzetih aplikacija i dostigao broj od preko 3,5 miliona objavljenih aplikacija [7].
Android je tokom svog života prošao kroz mnoge verzije. Svaka verzija ima broj
verzije, kodno ime i API5 nivo. Broj verzije je konvencionalni sistem za verzije kao što su 2.1,
2.3.3, 3.0, 4.0, 4.1, 5.0, 6.0 i tako dalje. Kada se prva cifra verzije promijeni, radi se o velikoj
promjeni sa mnogo novih API-ja. Kada se druga cifra promijeni, to je više evolucija nego
revolucija (a ponekad i novo kodno ime), a ako se samo treća cifra promijeni, radi se o
5
API (Application Programming Interface) je skup protokola i rutina koji sistem, biblioteka ili aplikacija
obezbjeđuje drugim aplikacijama.
4
Diplomski rad Dragan Milanović
manjim promjenama. API nivoi su monotono numerisani. Kodna imena Android operativnog
sistema su abecedna i uvijek se odnose na slatku hranu. API nivoi 1 i 2 nisu zvanično imali
kodna imena.
Android sistem je kompatibilan unazad u uobičajenom smislu: aplikacija izgrađena za
stariju verziju će raditi na novijoj verziji Android-a, ali ne i obrnuto (osim ako se ne poduzme
posebna briga). Na primjer, aplikacija izgrađena za verziju 1.5 treba da radi bez rekompilacije
na Android-u 7. Međutim, aplikacija napisana i kompajlirana na Android-u 7 će vjerovatno
koristiti API pozive koji ne postoje u verziji 1.5, tako da će uređaj u stvari odbiti da instalira
noviju aplikaciju, osim ako se ne koriste neki dodaci za verzije i kompatibilnost. Glavne
verzije Android-a sažete su u tabeli 2.1.
6
web.archive.org/web/20170514051830/https://www.android.com/history/.
5
Diplomski rad Dragan Milanović
3. RAZVOJ APLIKACIJA
7
https://developer.android.com/studio/.
6
Diplomski rad Dragan Milanović
3.2. Struktura
Android Studio podrazumijevano daje pregled datoteka u obliku Android projekta, kao
što je prikazano na slici 3.2. Ovaj prikaz je organizovan po modulima kako bi omogućio brži
pristup ključnim izvornim datotekama projekta. Sve datoteke potrebne za prevođenje
aplikacije vidljive su u sekciji Gradle Scripts, a svaki modul aplikacije sadrži sljedeće foldere:
manifest, java, res.
8
https://www.oracle.com/technetwork/java/javase/downloads/index.html.
7
Diplomski rad Dragan Milanović
<application
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".DisplayMessageActivity"
android:parentActivityName=".MainActivity" />
</application>
</manifest>
Folder java sadrži fajlove Java izvornog koda, uključujući JUnit testove. U njemu se
kreira MainActivity.java pri pokretanju wizard-a za generisanje novog projekta. Sve Java
klase će biti dostupne ovdje, a Android Studio će čak povezati putanju paketa tako da je
moguće raditi sa folderima bez potrebe za traganjem kroz foldere koji čine paket.
Resursi su smješteni u res folder. Pod resursom se podrazumijeva sve što nije izvorni
kôd, na primjer: slike, plan korisničkog interfejsa, znakovne konstante i još mnogo toga.
Uvijek treba izdvojiti resurse aplikacije iz koda, tako da Android koristi odgovarajući resurs
na temelju trenutne konfiguracije. Na primjer, možda se želi pružiti drugačiji raspored
korisničkog interfejsa u zavisnosti od veličine ekrana ili različite znakovne konstante u
zavisnosti od podešavanja jezika [9]. Neki folderi će automatski biti generisani, a neki se
mogu dodati ručno. Folderi koji se mogu koristiti unutar res foldera su: drawable, layout,
mipmap, values, raw i drugi.
8
Diplomski rad Dragan Milanović
3.3. Komponente
import android.app.Activity;
import android.os.Bundle;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
9
Diplomski rad Dragan Milanović
service), koji se izvršavaju u istom procesu kao i ostatak aplikacije i udaljene (eng. remote
service), koji se izvršavaju u zasebnom procesu.
Broadcast Receiver je komponenta koja prima poruke koje šalju druge komponente i
aplikacije, npr. promjena vremenske zone, slaba baterija i sl. Takođe, aplikacija može i sama
poslati broadcast poruku.
Content Provider služi za razmjenu podataka između različitih aplikacija. Ti podaci
mogu biti smješteni u Android fajl sistemu, SQLite bazi podataka itd.
Intent je poruka koja opisuje koji postupak odnosno koja operacija će se izvršiti. Na
primjer, slanje email poruke, prelazak na drugu aktivnost, odabir slika, poziv i slično. Gotovo
sve u Androidu koristi intent pa je relativno jednostavno zamijeniti postojeće komponente ili
dodati nove. Ukoliko neka aplikacija želi poslati email ona zahtjeva slanje email-a preko
intenta. Kada se to inicira, otvaraju se sve aplikacije preko kojih se može slati email. Tako je i
moguće napraviti aplikaciju za slanje email-a koja će primati ”send mail“ intent i na njega
odgovarati.
Svaka aktivnost ima svoj životni ciklus koji koristi 7 metoda: onCreate, onStart,
onPause, onResume, onStop, onRestart, onDestroy. Aktivnost nastaje naredbom onCreate
koja prima jednu varijablu tipa Bundle. Ta varijabla sadrži podatke o prethodnom stanju
aktivnosti ukoliko ga je bilo. U onCreate se stavlja sve što je potrebno pri inicijalizaciji
aktivnosti (pozadina, tipke, itd.). Metode onStart i onResume prvenstveno služe za povratak iz
onStop i onPause stanja. U njuh se stavlja dio koda koji se izvršava pri povratku u aktivnost.
Aktivnost je u onPause stanju kada se vidi u pozadini, ali nije aktivna. Naredba onDestroy se
izvršava pri zatvaranju aplikacije. Pošto se ta metoda ne mora nužno izvršiti ne preporučuje se
u njoj izvoditi bitne funkcionalnosti, poput čuvanja pristupnih podataka. Na slici 3.3 su
prikazana sva stanja aktivnosti i odgovarajuće metode koje se izvršavaju pri prelasku iz
jednog stanja u drugo.
10
Diplomski rad Dragan Milanović
11
Diplomski rad Dragan Milanović
ConnectivityManager cm = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = cm.getActiveNetworkInfo();
Ova provjera može biti od velike koristi ukoliko se u aplikaciji prikazuju oglasi, a
aplikacija ima određenu funkcionalnost i ako nije povezana sa internetom, tada je moguće
ograničiti te funkcionalnosti dok se aplikacija ne poveže na internet i počne ponovo
prikazivati oglase. Takođe je važno istaći da se mrežna aktivnost mora izvršiti u zasebnoj niti
(eng. thread). Svaki pokušaj izvođenja komplikovanih mrežnih operacija u aktivnosti na
glavnoj niti može uzrokovati grešku u izvođenju aplikacije (eng. runtime exception) ili grešku
aplikacije koja se ne odaziva (eng. application not responding). Ovaj problem je moguće
izbjeći korištenjem asinhronog pristupa, pomoću AsyncTask objekta.
12
Diplomski rad Dragan Milanović
3.6.1. Potpisivanje
9
APK - Android Paket.
10
Binarni fajl (.jks ili .keystore) koji služi kao repozitorijum sertifikata i privatnih ključeva.
13
Diplomski rad Dragan Milanović
3.6.2. Objavljivanje
11
https://play.google.com/apps/publish/signup/.
12
https://play.google.com/apps/publish/.
14
Diplomski rad Dragan Milanović
13
https://developer.android.com/distribute/google-play
15
Diplomski rad Dragan Milanović
3.6.4. Alternative
16
Diplomski rad Dragan Milanović
4. MODELI MONETIZACIJE
Oglasna platforma ili oglasna mreža je kompanija koja povezuje oglašivače sa web-
lokacijama koje mogu da prikazuju oglase. Fraza “oglasna mreža“ sama po sebi je neutralna u
medijima u smislu da može postojati "televizijska oglasna mreža" ili "štampana oglasna
mreža", ali se sve više koristi u značenju "online oglasne mreže" jer se najčešće nalaze u
online prostoru. Osnovna razlika između tradicionalnih medijskih oglasnih mreža i online
oglasnih mreža je u tome što online oglasne mreže koriste centralni oglasni server za isporuku
oglasa potrošačima, što omogućava ciljanje, praćenje i izveštavanje o utiscima na načine koji
nisu mogući pomoću analognih medija.
Za popularnu aplikaciju sa slobodnim oglasnim prostorom, umjesto da se prave
direktni ugovori sa potencijalnim oglašivačima, koristi se oglasna mreža. Iza scene proces je
automatizovan, kada se instalira SDK oglasne mreže njihov API poziva njihove servere. Na
osnovu postavljenih kriterijuma, oglasna mreža pronalazi oglase koji će odlično funkcionisati
s aplikacijom. Ukoliko je nekoliko partnera za oglašavanje na mreži zainteresovano za
određeni oglasni prostor, da bi se odredilo čiji oglas se prikazuje, oglasna mreža obično
održava aukciju. Oglasna mreža ne bira pobjednika isključivo po cijeni, već razmatra koji je
oglašivač najrelevantniji za korisničku bazu, vrstu aplikacije i cijenu. Prikazuje pobjednički
oglas u aplikaciji i taj oglas koji se prikazuje smatra se „utiskom“. Ako korisnik klikne na
17
Diplomski rad Dragan Milanović
njega oglašivač dobija potencijalnog novog kupca, a profit se dijeli sa oglasnom mrežom. Sve
se to događa vrlo brzo, obično za manje od sekunde.
Važno je napomenuti da nisu sve oglasne mreže iste. Neke mreže se fokusiraju na
cijenu i da prikažu oglas ispred što više ljudi. Neke se više brinu o kvalitetu svojih oglašivača.
Druge uključuju dodatne funkcije koje će pomoći u drugim dijelovima poslovanja. Postoji
mnogo opcija i mnogo faktora koje treba razmotriti [14]. U narednoj tabeli (Tabela 4.1) su
izdvojene neke oglasne mreže sa poređenjem određenih karakteristika, koje su objašnjene u
daljem tekstu, za lakši odabir i izvlačenje maksimuma od oglasne mreže [15].
Oglasna
Platforme Plaćanje Formati Tržište
mreža
Android, iOS, CPC, CPM, Banner, Interstitial, Video,
AdMob Globalno
Unity, Cocos CPI Native, Trueview
Android, iOS, Globalno,
Unity Ads CPM, CPI Banner, Interstitial, Video,
Unity SAD
Android, iOS,
AppLovin CPC, CPA Interstitial, Video, Native, SAD
Mobile Web
Android, iOS, Interstitial, Video, Offer Globalno,
Chartboost CPC, CPI
Unity wall SAD
Facebook Android, iOS,
CPM, CPI Banner, Video, Slideshow Globalno
Ads Mobile Web
4.1.2. Modeli određivanja cijena (PPC, CPC, CPM, CPI, CPA, CPV, eCPM)
18
Diplomski rad Dragan Milanović
dobro funkcioniše kada oglašivači žele posjetioce na njihovim web lokacijama. Ovaj model
radi bolje za oglašivače, jer im omogućava da plaćaju samo za slučajeve kada je interes za
njihov proizvod ili uslugu eksplicitan (njihovi oglasi su kliknuti). Za izdavača ovaj model
uvijek predstavlja određeni rizik da će besplatno poslužiti mnoštvo pojavljivanja oglasa [15].
Tržišni udio CPC-a je rastao svake godine od njegovog uvođenja, smanjujući dominaciju
CPM-a [16].
CPM (Cost Per Mille) omogućava da oglašivači plaćaju za svakih hiljadu prikaza
svoje poruke potencijalnim kupcima (mille je engleska riječ za hiljadu). Ovo je najbolji
poslovni model za izdavače, jer omogućava da zarade novac svaki put kada se oglas prikaže.
Ako imaju stabilan predvidiv saobraćaj mogu da prognoziraju svoj prihod. Nedostatak je da
oni mogu izgubiti neke dodatne prihode, ako je korisnik njihove aplikacije ili web stranice
zaista zainteresovan za proizvod ili uslugu koja se oglašava. U tom slučaju model CPC bi im
omogućio da zarade više novca [15].
CPI (Cost Per Install) je specifičan slučaj generičkog CPC modela za mobilne
aplikacije i mobilno oglašavanje. U CPI modelu oglašivači plaćaju fiksne stope ponude samo
kada je aplikacija instalirana. Cijena po instalaciji postala je jedna od najvažnijih metrika za
marketinške korisnike mobilnih aplikacija za mjerenje i praćenje, jer ona u suštini predstavlja
cijenu koju plaćaju da bi stekli klijente i stoga bi to trebalo da bude faktor u izračunavanju
ROI14.
CPA (Cost Per Action) ili PPP (Pay Per Performance) oglašavanje znači da oglašivač
plaća za broj korisnika koji obavljaju željenu aktivnost, kao što je završetak kupovine ili
popunjavanje obrasca za registraciju. PPP može takođe uključivati dijeljenje prihoda, gdje
izdavači zarađuju postotak profita oglašivača koji je rezultat oglašavanja. Ovo naravno
prenosi rizik neuspjelog oglašavanja na izdavače. Koristi se kod oglašavanja kao način
određivanja cijena još od 1998. godine.
CPV (Cost Per View) je video oglašavanje po cijeni gledanja. Sa ovim modelom
oglašivači plaćaju za svaku instancu prikazanog video oglasa. CPV je primarno mjerilo koje
se koristi u YouTube reklamnim kampanjama, kao dio Google AdWords platforme. Sa
trenutnim tempom rasta video oglašavanja ovaj model postaje sve popularniji.
Postoji 5 glavnih formata koje podržavaju mobilne oglasne mreže: banner, interstitial,
native, video i „zid ponuda“ (eng. offer wall).
Banner oglasi su klasični statični ili animirani slikovni oglasi koji se nalaze unutar
interfejsa aplikacije. Pojavljuju se na vrhu ili dnu ekrana uređaja i obično se šire preko cijelog
ekrana kada se dodirnu.
Interstitial oglasi se prikazuju preko čitavog ekrana pokrivajući površinu čitave
aplikacije. Ovaj format se njačešće koristi pri promjeni prozora u aplikaciji ili pri prelasku u
naredni nivo ukoliko se radi o mobilnoj igri.
14
RIO (Return On Investment) - Povrat investicije.
19
Diplomski rad Dragan Milanović
15
JSON (JavaScript Object Notation) je tekstualno baziran standard za razmjenu podataka.
16
Oglas koji promoviše vlastitu aplikaciju.
17
https://apps.admob.com/.
20
Diplomski rad Dragan Milanović
allprojects {
repositories {
google()
jcenter()
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:26.1.0'
implementation 'com.google.android.gms:play-services-ads:17.2.0'
}
<manifest>
<application>
<!-- Sample AdMob App ID -->
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-3940256099942544~3347511713"/>
</application>
</manifest>
Kada se integriše SDK, moguće je odabrati format oglasa i slijediti korake za njegovu
implementaciju. Prije učitavanja oglasa, potrebno je da aplikacija inicijalizuje SDK za
mobilne oglase tako što će pozvati MobileAds.initialize() s ID-em AdMob aplikacije. Ovo
treba uraditi samo jednom, idealno pri pokretanju aplikacije.
21
Diplomski rad Dragan Milanović
Banner oglasi se implementiraju tako što se u aktivnost dodaju linije koda prikazane u
listingu 4.4 i 4.5.
...
<com.google.android.gms.ads.AdView
xmlns:ads="http://schemas.android.com/apk/res-auto"
android:id="@+id/adView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_alignParentBottom="true"
ads:adSize="BANNER"
ads:adUnitId="ca-app-pub-3940256099942544/6300978111">
</com.google.android.gms.ads.AdView>
...
...
import com.google.android.gms.ads.AdRequest;
import com.google.android.gms.ads.AdView;
mAdView = findViewById(R.id.adView);
AdRequest adRequest = new AdRequest.Builder().build();
mAdView.loadAd(adRequest);
}
}
22
Diplomski rad Dragan Milanović
...
import com.google.android.gms.ads.InterstitialAd;
Native oglasi se učitavaju preko klase AdLoader, koja ima svoju klasu Builder za
prilagođavanje tokom kreiranja. Dodavanjem listener-a AdLoader-u prilikom njegovog build-
a, aplikacija određuje koje vrste oglasa je spremna da primi (listingu 4.7).
...
AdLoader adLoader = new AdLoader.Builder(context, AD_MOB_APP_ID)
.forUnifiedNativeAd(new UnifiedNativeAd.OnUnifiedNativeAdLoadedListener() {
@Override
public void onUnifiedNativeAdLoaded(UnifiedNativeAd unifiedNativeAd) {
// PRIKAŽI OGLAS
}})
.withAdListener(new AdListener() {
@Override
public void onAdFailedToLoad(int errorCode) {
// NEUSPJEH PRIKAZA OGLASA
}})
.withNativeAdOptions(new NativeAdOptions.Builder()
// POZIV METODA NativeAdOptions.Builder
.build())
.build();
...
23
Diplomski rad Dragan Milanović
4.2. Premium
18
SKU (Stock Keeping Unit) je poseban identifikator proizvoda u prodaji.
24
Diplomski rad Dragan Milanović
4.3. Freemium
25
Diplomski rad Dragan Milanović
4.4. eCommerce
Ovaj model je vrlo jednostavan – prodaje se fizička roba kroz aplikaciju. Aplikacija je
besplatna za preuzimanje i posjeduje portal za korisnike koji pretražuju i kupuju proizvode.
Profitne marže za eCommerce biznise su obično veće od tradicionalnih prodavnica. Moguće
je započeti prodavanje robe sa malim inventarom, mnogo jednostavnije i sa smanjenim
rizikom. Model je idealan za kompanije koje prodaju fizičku robu, na primjer Amazon (slika
4.5).
4.5.1. Uvod
26
Diplomski rad Dragan Milanović
Google Play servisima [18]. Google Play Billing se može koristiti za prodaju sljedećih vrsta
proizvoda u aplikaciji:
Jednokratni proizvodi: Proizvod u aplikaciji koji zahtijeva jednokratnu naknadu koja
se ne ponavlja nakon plaćanja. Dodatni nivoi igre, premium nagradne kutije i medijske
datoteke su primjeri jednokratnih proizvoda. Google Play konzola naziva jednokratne
proizvode managed products, a biblioteka Google Play Billing ih naziva "INAPP".
Nagradni proizvodi: Proizvod u aplikaciji koji zahtijeva od korisnika da gleda video
oglas. Dodatni pokušaji, valuta u igri i brzo izvršavanje zadatih zadataka su primjeri
nagradnih proizvoda. Google Play konzola naziva nagradne proizvode rewarded
products, a biblioteka Google Play Billing ih naziva "INAPP".
Pretplate: Proizvod u aplikaciji koji zahtijeva periodično ponavljajuću naknadu.
Online časopisi i usluge streaming-a muzike su primjeri pretplata. Google Play Billing
ih naziva "SUBS".
4.5.2. Implementacija
dependencies {
...
implementation 'com.android.billingclient:billing:1.2.2'
}
27
Diplomski rad Dragan Milanović
Sljedeći uzorak koda (listing 4.9) pokazuje kako pokrenuti vezu i testirati da li je
BillingClient spreman za upotrebu.
4.6. Pretplate
Slično modelu freemium koji naplaćuje više funkcija, ovaj model naplaćuje više
sadržaja. Korisnici mogu da vide određenu količinu sadržaja besplatno i onda se od njih traži
da se prijave za plaćenu pretplatu za nastavak pristupa. Ovaj model se dobro uklapa sa
oglasima. I dalje je moguće ostvariti zaradu od slobodnih (nepretplaćenih) korisnika s
oglasima, dopuštajući tom visokokvalitetnom sadržaju da bude pristupačniji. Sve dok su
zadovoljni korisnici koji plaćaju, oni će nastaviti da redovno plaćaju. Ali kao i freemium
model, nekim aplikacijama je teško ponuditi i uvjerljivu besplatnu i komercijalnu verziju
aplikacije. Nije lako testirati koliko bi sadržaja trebalo besplatno pružiti. Na primjer, da li bi
aplikacija zaradila više novca nudeći besplatno dijelove svakog članka ili bi se zaradilo više
novca dopuštajući korisnicima da čitaju određeni broj punih članaka besplatno mjesec dana.
Uglavnom, ovaj model je idealan za sadržajne i medijske kompanije. Dobar primjer je
YouTube i YouTube Red.
Za proizvode u aplikaciji koje se nude putem usluge Google Play, u koje spadaju i
pretplatnički proizvodi, naknada za transakcije iznosi 30% od cijene. Od 1. januara 2018.
godine naknada za pretplatničke proizvode se smanjuje na 15% za sve pretplatnike koji ostanu
nakon 12 plaćenih mjeseci. Period stupanja na snagu nove naknade zavisi od aktivnosti
korisnika. Na primjer, ako je pretplatnik aktivan 4 mjeseca, naknada za transakcije će se
smanjiti na 15% nakon 8 plaćenih mjeseci.
Google Play konzola omogućava da se izvrši promjena cijene pretplata koje se nude u
aplikaciji. Ova funkcionalnost je od velike koristi ako se promijeni količina sadržaja ili opseg
pogodnosti u aplikaciji. U svakom slučaju je potrebno obavijestiti korisnika o promjeni cijene.
U roku od najmanje 7 dana je potrebno kontaktirati postojeće pretplatnike o promijeni cijene
prije nego što ih Google Play počne obavještavati. Google Play automatizovano obaviještava
korisnike u vidu prozora (eng. dialog box) koji prikazuje staru cijenu, novu cijenu i datum
kada nova cijena stupa na snagu.
28
Diplomski rad Dragan Milanović
19
RTDN (Real-Time Developer Notifications) su obaveštenja u realnom vremenu za programere.
29
Diplomski rad Dragan Milanović
4.7. Hibrid
30
Diplomski rad Dragan Milanović
4.8. Statistika
Google Play Store trenutno (jun 2019) ima preko 2.954.900 aplikacija, od kojih su
4,6% premium a ostalih 95,4% besplatne. Postoji ukupno 49 kategorija, a igre čine 13,7% od
ukupnog broja aplikacija. U prosjeku se objavi 3,967 aplikacija dnevno za ovaj kvartal, što je
oko 28.000 aplikacija sedmično, odnosno preko 130,000 aplikacije mjesečno [19]. AdMob
oglasnu mrežu koristi 57,02% aplikacija i po statistikama iz 2017 godine većina prihoda za
aplikacije se ostvaruje preko oglasa, dok mobilne igre 43% zarade ostvare preko plaćanja u
aplikaciji [20]. Detaljna statistika je prikazana na slici 4.9.
Plaćanje u aplikaciji postaje sve popularnije, što se može vidjeti na slici 4.10 gdje je
prikazan udio prihoda za mobilne aplikacije kroz period od 7 godina [21]. Međutim, potrebno
je napomenti da po studiji gdje je analizirano 40 Android aplikacija, 20 aplikacija sa oglasima
i njihove odgovarajuće komercijalne verzije kupljene na Google Play-u, komercijalne
aplikacije su se pokazale kao bolji izbor [22]. Iz eksperimentalne studije potvrđeno je da
aplikacije sa oglasima koriste više resursa od njihovih odgovarajućih komercijalnih verzija i
zaključak je da su razlike statistički značajne i da se, u zavisnosti od upotrebe, komercijalne
aplikacije mogu smatrati boljim izborom za korisnika jer se njegov trošak može amortizovati
u kratkom vremenskom periodu.
31
Diplomski rad Dragan Milanović
32
Diplomski rad Dragan Milanović
1. PRAKTIČAN RAD
Cilj praktičnog dijela rada je realizacija aplikacije koja uključuje barem jedan od
analiziranih načina monetizacije. Implementirana je Android aplikacija koja komunicira sa
eksternim sistemom i oglasnom mrežom, preuzima podatke od eksternog sistema i oglase od
oglasne mreže i vrši njihovo prikazivanje unutar određenih dijelova interfejsa.
1.1. Aplikacija
33
Diplomski rad Dragan Milanović
1.2. Objavljivanje
20
https://play.google.com/apps/publish/signup/
34
Diplomski rad Dragan Milanović
21
https://play.google.com/apps/publish/signup/.
35
Diplomski rad Dragan Milanović
22
https://play.google.com/apps/publish/signup/.
36
Diplomski rad Dragan Milanović
1.3. Monetizacija
<LinearLayout>
...
<com.google.android.gms.ads.AdView
android:id="@+id/adView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
app:adSize="SMART_BANNER"
app:adUnitId="ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX">
</com.google.android.gms.ads.AdView>
...
</LinearLayout>
23
https://admob.google.com/home/.
37
Diplomski rad Dragan Milanović
import com.google.android.gms.ads.AdView;
...
public class TimelineActivity extends AppCompatActivity {
...
private AdView mAdView;
...
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mAdView = findViewById(R.id.adView);
mAdView.setAdListener(new AdListener() {
@Override
public void onAdOpened() {
// KOD KOJI SE IZVRSI KADA SE OTVORI OGLAS
tvAdSpace.setText("");
}
});
38
Diplomski rad Dragan Milanović
@Override
protected void onCreate(Bundle savedInstanceState) {
...
mInterstitialAd = new InterstitialAd(this);
mInterstitialAd.setAdUnitId("ca-app-pub-XXXXXXXXXXXXXXXX/XXXXXXXXXX");
mInterstitialAd.setAdListener(new AdListener() {
@Override
public void onAdLoaded() {
mInterstitialAd.show();
} // Ad finishes loading.
@Override
public void onAdFailedToLoad(int errorCode) {} // GRESKA
@Override
public void onAdOpened() {} // PRIKAZAN
@Override
public void onAdClicked() {} // KLIKNUO
@Override
public void onAdLeftApplication() {} // NAPUSTIO APLIKACIJU
@Override
public void onAdClosed() {} // ZATVOREN
});
}
...
@Override
protected void onRestart() {
super.onRestart();
mInterstitialAd.loadAd(new AdRequest.Builder().build());
}
...
Kreirana je i aktivnost koja ima plaćanje u aplikaciji sa ciljem da korisnici mogu kupiti
gorivo za projekat i time pomoći da se realizuje aplikacija u potpunosti. Nažalost, za sad u
BiH moguće je imati samo Google developer nalog, ne i Google Merchant koji omogućava
kreiranje proizvoda u aplikaciji i njihovo prodavanje. Tako da je taj dio potrebno
implementirati pomoću PikPay24-a ili nekog drugog servisa za plaćanje u aplikaciji.
Implementirane su dvije autobuske linije različitih kompanija sa ciljem demonstracije
proizvoda koje te kompanije mogu kupiti. Ukoliko dođe do prodaje jednostavno se dodaju sve
linije i dizajn se prilagodi novom vlasniku. Ovo kao rezultat generiše dvije različite vrste
prihoda. Jedan pri samoj prodaji, a drugi periodičan prihod za održavanje. Ako bi se desilo da
nema zainteresovanog kupca i dalje se mogu implementirati određene linije i ostvariti prihod
od oglasa u aplikaciji.
24
https://ipg.pikpay.ba/
39
Diplomski rad Dragan Milanović
2. ZAKLJUČAK
40
Diplomski rad Dragan Milanović
LITERATURA
[1] Ian F. Darwin, Android Cookbook. O’Reilly Media, Inc., California, 2017.
[2] „History of Mobile Advertising“, Know Online Advertising,
http://www.knowonlineadvertising.com/online-mobile-advertising/history-of-mobile-
advertising/, posjećeno: 08.05.2019.godine.
[3] Adrianne Jeffries, „Disconnect: why Andy Rubin and Android called it quits“, The Verge,
https://www.theverge.com/2013/3/19/4120208/why-andy-rubin-android-called-it-quits,
posjećeno: 08.05.2019.godine.
[4] "Google's Android OS: Past, Present, and Future", PhoneArena,
https://www.phonearena.com/news/Googles-Android-OS-Past-Present-and-Future_id21273,
posjećeno: 08.05.2019.godine.
[5] Steve Dowling, Lynn Fox, „iPhone to Support Third-Party Web 2.0 Applications“, Apple,
https://www.apple.com/newsroom/2007/06/11iPhone-to-Support-Third-Party-Web-2-0-
Applications/, posjećeno: 08.05.2019.godine.
[6] Matt Strain, „1983 to today: a history of mobile apps“, The Guardian,
https://www.theguardian.com/media-network/2015/feb/13/history-mobile-apps-future-
interactive-timeline/, posjećeno: 08.05.2019.godine.
[7] „Number of available applications in the Google Play Store from December 2009 to
December 2018“, Statista, https://www.statista.com/statistics/266210/number-of-available-
applications-in-the-google-play-store/, posjećeno: 08.05.2019.godine.
[8] Maxim Shafirov, „Kotlin on Android. Now official“, blog.jetbrains.com,
https://blog.jetbrains.com/kotlin/2017/05/kotlin-on-android-now-official/, posjećeno:
08.05.2019.godine.
[9] „Meet Android Studio“, Android Developers, https://developer.android.com/studio/intro,
posjećeno: 08.05.2019.godine.
[10] Phil Dutson, Android Development Patterns. Pearson Education, Inc., Indiana, 2016.
[11] Veikko Krypczyk, Olena Bochkor, „Von der Idee bis zum Store“, Javamagazin, 1.2019,
str. 84-92, januar 2019.
[12] „Publish your app“, Android Developers, developer.android.com/studio/publish,
posjećeno: 08.05.2019.godine.
[13] Joe Salisbury, The No-nonsense Guide to App Monetization. AdMob, San Francisco,
2016.
[14] Joe Salisbury, The No-nonsense Guide to In-App Ads. AdMob, San Francisco, 2016.
[15] Artyom Dogtiev, „Top Mobile Ad Networks 2018“, Business of Apps,
http://www.businessofapps.com/guide/top-mobile-ad-networks/, posjećeno:
08.05.2019.godine.
[16] Hu, Yu; Shin, Jiwoong; Tang, Zhulei, „Performance-based Pricing Models in Online
Advertising: Cost per Click versus Cost per Action“, 2012,
http://faculty.som.yale.edu/JiwoongShin/Downloads/workingpapers/PerformanceBasedPricin
gModels.pdf, posjećeno: 08.05.2019.godine.
[17] „Mobile Ads SDK (Android)“, Android Developers,
https://developers.google.com/admob/android/quick-start, posjećeno: 08.05.2019.godine.
[18] James Steele, Nelson To, Android Developer's Cookbook: Building Applications with the
Android SDK. Addison-Wesley Professional, Boston, 2013.
[19] „Store Stats for Mobile Apps“, 42matters, https://42matters.com/stats, posjećeno:
10.06.2019.godine.
41
Diplomski rad Dragan Milanović
42