İster Android, ister iOS isterse Windows olsun mobil
platformlar için yazılım geliştiren her yazılımcının aklının bir köşesinde
eminim ki geliştirdiği uygulamalardan (doğrudan veya dolaylı olarak) para
kazanmak yatar. Herhangi bir firmadan bağımsız olarak yani kendi ücretli
işinizin bir parçası olarak geliştirmiyorsanız, uygulama üzerinden para
kazanmanızın birkaç yolu var. Bunlardan bir tanesi (ve belki de en düşük
ihtimalli olanı) çok faydalı ve çok popüler olacak bir uygulama geliştirip
biraz da şans yardımıyla bu uygulamayı üçüncü kişilere veya firmalara satmak
veyahutta uygulamayı sürekli geliştirerek (twitter, facebook misali)
şirketleşme yoluna gitmek. Bu seçenek sizi sarmadıysa veya pek olanaklı
görünmediyse :) bir diğer yol uygulamayı pazara sürerken ücretlendirmek.
Fakat daha önceki yazılarımda da birkaç kez tekrarladığım üzere eğer Android
geliştiricisi iseniz bu Türkiye pazarında şu an için pek mümkün değil, halen
Android Market üzerinden Türkiye kaynaklı hesaplar ile ücretli uygulama
yayınlanamıyor. (iOS geliştiricisi iseniz pek tabiki no problem !) Bir Android
geliştiricisi olarak bu seçeneği de arkamızda bıraktıktan sonra geriye bir
seçeneğimiz daha kalıyor, o da geliştirdiğimiz uygulamaya reklam alarak
reklamlar üzerinden para kazanmak. Bir önceki yazımda müjdelediğim üzere bu
yazımda Android uygulamamız üzerinde nasıl reklam yayınlar ve bu reklamlar
üzerinde para kazanırız bundan bahsedeceğim.
Android uygulamamız üzerinde reklam yayınlamak için ilk
yapmamız gereken uygun reklamları internet üzerinden çekerek uygulamamız
üzerinde göstermemizi sağlayacak bir mobil reklam şirketi bulmak ve buna üye
olmak. Android platformu için AdMob, MobFox, MobClix vs gibi birkaç seçeneğimiz
mevcut. Bunlardan reklam başına en yüksek ücret ödeyeni MobFox olarak gözükse
de tutarlılık, kontrol ve yönetim kolaylığı, reklam bulma oranı (Avrupa veya
Amerika’da değil Türkiye’de olduğumuzu unutmayalım) ve sahibin Google
olduğunu düşünürsek AdMob bir adım öne geçiyor. Bu nedenle ben kendi
uygulamamda AdMob kullandım ve yazının devamında AdMob reklamı
yayınlamaktan bahsedeceğim, AdMob ve
MobFox karşılaştırması için aşağıdaki linke gözatmanızı tavsiye ederim, ayrıca
diğer mobil reklam şirketlerinin karşılaştırmaları ile ilgili Google üzerinden daha detaylı bilgilere de ulaşılabilir.
AdMob Üyeliği
Oluşturma ve Uygulama Bilgilerini Girme:
Yukarıda da dediğim gibi AdMob bir Google ürünü (yakında
zamanda Google tarafından satın alındı) bu nedenle ayrı bir hesap açmanıza
gerek yok, Google hesabınızla giriş yapabiliyorsunuz. Giriş yaptıktan sonra
öncelikle hesap detaylarımızı ve ödeme bilgilerimizi girmemiz gerekiyor. Ödeme
bilgilerimizi girerken aşağıdaki gibi ilgili alanları doldurmalıyız.
Business
Name alanına kendi adımızı, tax id kısmına da vergi numaramızı yazmalıyız.
Ödemeleri nasıl alacağınız ise size kalmış, benim tavsiyem PayPal üzerinde bir
hesap açarak (henüz yoksa) ödemelerinizi PayPal vasıtasıyla almanız.
Ödeme bilgilerini girdikten sonra, Sites&Apps sekmesinden Add Site/App ile aşağıdaki
sayfaya geliyoruz, buradan Android App butonuna tıkladığımızda uygulama ile
bilgileri girebileceğimiz alanlar visible oluyor.
Henüz uygulamamızı
oluşturmadık bu bilgiler değişebilir diyerek endişe etmenize gerek yok, istediğiniz
zaman bu bilgileri değiştirebiliyorsunuz, ilk girişte dummy bilgiler girip
sonradan düzenleyebilirsiniz. İlerleyen sayfalarda uygulamamıza özgü Publisher ID
(Publisher Code) miz oluşacak ve AdMob SDK'yı yükleyebileceğimiz download
linkine ulaşacağız.
AdMob SDK Kurulumu ve
Kullanımı:
Bu adımda AdMob SDK nın kurulumu ve kullanımından
bahsedeceğim, yaknız öncelikle kurulum sırasında kendi yaşadığım bir sıkıntıdan
da bahsetmemde fayda var. Kendim AdMob
SDK'yı indirdikten sonra doğal olarak nasıl kullanılacağını öğrenmek amacıyla
Google üzerinde arama yaparak birçok özet bilgi, hatta video buldum. (Tabiki
hemen hemen hepsi yabancı kaynaklar, Türkçe kaynak bulmak neredeyse imkansız,
bu konudan bahsetmemdeki bir amacım da yararlı bir Türkçe kaynak oluşturmak)
Bulduğum kaynakların birçoğu AdMob SDKnın kullanımı hakkında aynı şeylerden
bahsediyordu, denilenleri yaptım fakat iş uygulamayı çalıştırma kısmına gelince
birçok sorunla karşılaştım. Biraz daha araştırdıktan (ve yeterli zamanı
kaybettikten) sonra anladım ki AdMob SDK nın önceki versiyonları ile son
versiyonunun kullanımı arasında dağlar hatta dünyalar kadar fark var. Bu kadar
fark olmasına ve buna kimsenin hatta AdMob un kendisinin dikkat çekmemesine
anlam vermek güç! İleride yeni bir sürümle birlikte yeni değişiklikler
yapılacak olursa (ki bundan sonra fazla değişiklik olacağını sanmıyorum) burada
yazılan bilgiler de anlamsız olacaktır, bu nedenle öncelikle AdMob’un kendi
developer sayfalarını kontrol etmekte ve buradaki bilgilerde sorun olup olmadığını
görmekte fayda var. Şimdi kaldığımız yerden AdMob SDK kullanımını anlatmaya
devam edelim.
Android AdMob SDK yı indirdikten sonra (128 KB) Android
projemiz altında (henüz yoksa) “libs” adında yeni bir folder oluşturuyoruz ve
download ettiğimiz .jar dosyamızı bu folder altına kopyalıyoruz.
Projectname
-> properties -> java build path -> libraries -> add jars üzerinden
libs altına eklediğimiz .jar dosyasını seçerek projemize eklemiş ve sdk yı
kullanıma hazır hale getirmiş oluyoruz.
Aşağıdaki linkten (AdMob developer sayfaları) daha detaylı
bilgiye ulaşılabilir:
SDK yı kullanılabilir hale getirdikten sonra reklamların
uygulamamızda görünmesi için kod içerisine bazı eklemeler yapmamız gerekiyor,
şimdi kısaca bunlardan bahsedelim;
a) AndroidManifest
Dosyasında Yapılacak Düzenlemeler:
1- Öncelikle com.google.ads.AdActivity adında yeni bir activity
ekliyoruz manifest dosyamıza.
<activity android:name="com.google.ads.AdActivity" android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"/>
2- Sonrasında manifest dosyamıza uygulamamızın
kullanabilmesi için bazı izinleri belirtmemiz gerekiyor. Malum uygulamamız
reklamları internet üzerinden çekeceğinden uygulamanın internete erişmesi
gerekmekte, bunun için de manifest dosyamız içinde
INTERNET
ve ACCESS_NETWORK_STATE
izinlerini tanımlamamız gerekiyor. Dolayısıyla kullanıcıların
da uygulamayı yüklemeden önce bundan haberdar olması ve internet erişimi için
uygulamaya izin vermeleri gerekecek.
<uses-permission android:name="android.permission.INTERNET"
/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>"
Mevcut bir manifest dosyası içerisinde yaptığımız eklemeler
aşağıdaki gibi görünecektir. (Kendi uygulamanız içerisinde uygulamanıza ait
başka eklemeler de bulunabilir tabiki..)
ÖNEMLİ: Burada
özellikle bir konuya dikkat çekmek istiyorum. (AdMob SDK'nın son sürümünü
indirdiğinizi varsayarak) Burada anlattığım eklemelerin çalışabilmesi için
kodun en az Android v3.2 ile derlenmesi gerekmekte. Bu nedenle
project.properties dosyamızda target olarak android-13 ü vermemiz gerekiyor.
(target=android-13) Burada kafanızda “yazdığım uygulama Android v3.2 den önceki
sürümleri çalıştıran cihazlarda çalışmayacak mı?” şeklinde bir soru işareti
oluşabilir. Target=android-13 olarak belirtmekle sadece uygulamamızı Android
v.3.2 kütüphanelerini kullanarak derlemiş oluyoruz, buradaki targetin değeri
uygulamanın hangi Android sürümlerinde çalışacağını belirtmiyor. Uygulamamızın
hangi Android sürümlerinde çalışacağını manifest dosyamızda aşağıdaki satırla
belirtiyoruz:
<uses-sdk android:minSdkVersion="8"
/>
Bu nedenle target değiştirirken herhangi bir çekinceniz
olmasın, uygulamanız manifest dosyanızda aksini belirtmediğiniz sürece Android
v3.2 öncesi sürümlerde de sorunsuzca çalışacaktır.
b) Source Code ve
.xml Dosyalarımızda Yapılacak Değişiklikler:
Manifest dosyamızda ilgili ayarlarımızı yaptıktan sonra adView nesnemizi uygulamıza nasıl ekleyeceğimize ve reklamları nasıl
çekeceğimize bakalım. adView nesnemizi direk kod içerisinden ekleyebileceğimiz
gibi .xml dosyalarımız içerisinden de ekleyebiliriz. (tüm Android bileşenlerinde
olduğu gibi) Benim tercihim .xml üzerinden eklemek olmasına karşın burada iki
seçenekten de bahsedeceğim, hangisini seçeceğiniz tamamen size kalmış.
Öncelikle kod içerisinden view’umuzu nasıl ekliyoruz ondan bahsedelim;
i- Kod İçerisinden
View Eklemek:
Aşağıdaki örnekte de görüleceği üzere com.google.ads.* yi import ederek AdView tipinde nesnemizi kullanabiliyoruz.
Burada dikkat edilecek notka kırmızı ile belirttiğim MY_AD_UNIT_ID yerine AdMob
sayfasından uygulamamıza özel olarak verilen Publisher ID mizi yapıştırmak.
adView.loadAd(new AdRequest()); satırı ile uygulamızın internet üzerinden yeni reklamları
çekmesini sağlıyoruz. Normal bir cihaz üzerinde debug yapıyorsak sorun
olmayacaktır fakat emulator üzerinde çalışıyorsak reklamları çekemeyecektir. Bu
nedenle debug yaparken test ad’leri kullanmalıyız, bunu nasıl yapacağımıza
birazdan değineceğim, biraz sabredelim.
ii- .xml Üzerinden
View Eklemek:
Reklamımızın görüneceği layoutumuza ait .xml dosyamız
içerisine AdView umuzu aşağıdaki gibi ekliyoruz. Önceki adımda olduğu gibi
burada da MY_AD_UNIT_ID yerine
kendi PublisherId mizi yapıştırmalıyız.
Bir diğer dikkat edeceğimiz nokta linearlayout tanımımız
içerisine aşağıdaki satırı eklemek;
xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads"
Burada ads:loadAdOnCreate="true"
satırı ile reklamımızın layoutun yükleme aşamasında çekilip gösterilmesini
sağlıyoruz. Bunun yerine olur da bir nedenle viewumuzu düzenlememiz gerekirse bu satırı kaldırarak kod içerisinden
aşağıdaki şekilde reklamların yüklenmesini sağlayabiliriz.
Layout .xml imizi düzenledikten sonra kod içerisinden
aşağıdaki gibi view umuzu kullanabilriz;
c) Test Adleri
Kullanmak:
Yukarıda bahsettiğim gibi emülatör üzerinde debug yaparken
uygulama internet üzerinden reklamları çekemeyebilir bunun yerine test amaçlı
reklamlar kullanarak debug yapabiliriz. Test amaçlı reklamların kullanılacağını
.xml üzerinden belirtebileceğimiz gibi kod içerisinden de belirtebiliriz.
.xml içerisinde adView tanımımıza ads:testDevices="TEST_EMULATOR,
TEST_DEVICE_ID" satırını ekleyebiliriz.
Kod içerisinden ise aşağıdaki şekilde test reklamlarını
kullanabiliriz.
//Test Adleri ile denemek için:
AdRequest adRequest = new AdRequest();
adRequest.addTestDevice("TEST_DEVICE_ID");
//Initiate a generic request to load
it with an ad
adView.loadAd(adRequest);
Her iki durumda da kırmızı ile belirttiğim TEST_DEVICE_ID kısmına
kendi test device id’nizi yapıştırmalısınız. Bunu da uygulamanızı test adler
olmadan çalıştırdığınızda logcat loglarını inceleyerek bulabilirsiniz.
(Not: “75FCFEE45832033F121C056D1D378C36” formatlı bir
karakter dizisi olacak, kendi emulatorunuze ait test device idyi bulup onu
kullanmalısınız, bu sadece örnek ;) )
d) Ad Yerleşimini
Ayarlama:
Reklam yüklenmeden önce eğer adView’aun height değerini
yeterli miktarda vermediyseniz logcat loglarında “Can’t get the viewWidth after the first layout” şeklinde bir hata
göreceksiniz ve reklamınız yüklenmeyecek. (Bu hata belki de en sık
karşılaşacağınız hata olacak, not edin :) ) Bu nedenle layoutunuza ait .xml
dosyanız içerisinde öncelikle adView’unuza min. 50dp şeklinde bir height değeri
vermeniz yerinde olacaktır.
Peki çalışma anında reklam bulunamazsa (cihazın internet
bağlantısı yoksa veya uygun reklam bulunamadığında) ne olacak ?, reklamımıza
ait alan bomboş bir şekilde kalacak mı ? Bence kalmamalı, bu nedenle adView
boyutunu dinamik olarak yönetmenizi tavsiye ediyorum. Bunun için de birkaç
ipucu vereceğim şimdi,
1-
adView.getHeight();
ile
yüklenen reklamınıza ait yüksekliği alabilir ve
LinearLayout l1 =
(LinearLayout)findViewById(R.id.LinearLayout25);
l1.setLayoutParams(new
LinearLayout.LayoutParams(width, height));
şeklinde
layoutumuzun yüksekliğini ayarlayabiliriz. Burada kırmızı ile belirttiğim width
değişmeyeceği için “LayoutParams.MATCH_PARENT” kullanabiliriz.
Height
içinse “mevcut ekran yüksekliği – reklam yüksekliği” şeklinde bir değer ataması
yapmamız gerekir. Bunu da aşağıdaki gibi yapabiliriz:
int heightOfAdd = adView.getHeight();
DisplayMetrics metrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(metrics);
height
= metrics.heightPixels – heightOfAdd;
2- Reklamın yüklenip
yüklenememesine göre layout yüksekliğimizi ayarlamak istiyorsak activitymizde
AdListener interface’ini implement etmeliyiz (implements AdListener),
bu sayede aşağıdaki methodları override ederek kullabilir hale geliriz. Böylece
reklam yüklenemediğinde reklamımızın görüneceği alanda gereksiz bir boşluk
oluşmasını engellemiş oluruz.
public void
onFailedToReceiveAd(Ad arg0, ErrorCode arg1); //Reklam yüklenemezse çağırılır
public void
onReceiveAd(Ad arg0); //Reklam yüklendiğinde çağırılır
***
Tüm ayarlamalarınızı yaptınız takdirde ilk çalıştırmalarda
reklamların yüklenmesi 1 -2 dk gibi zaman alacaktır telaşlanmaya gerek
yok.
Uygulamanızı markete sunduktan sonra AdMob kullanıcı arayüzü üzerinden
yayınlanacak reklamların tipine kadar (Örneğin; politik reklamlar
gösterilmesin vs) birçok ayarlama yapabiliyorsunuz. Fakat örneğin
uygulamanızın kullanıcıları çoğunlukla
Türkiye’dense uygun reklam bulamama gibi durumlarla çok sık
karşılaşacaklardır. Bu nedenle size tavsiyem uygun reklam
bulunamadığında
Google AdSense reklamları gösterilsin seçeneğini seçmeniz ve bu sayede
hemen
hemen her zaman uygulamanızda bir reklamın gösterileceğini
garantilemeniz.
***
Reklamınızı eklediniz ve uygulamanızı markete sundunuz, bundan
sonra haydi bakalım gelsin paracıklar... Böyle düşünüyorsanız şayet biraz hayal
kırıklığına uğrayabilirsiniz. Reklamlar üzerinden çok fazla para kazanmayı
beklemeyin derim, çok yüklenen bir uygulamanız olduğunda dahi günde 0,50$
kazanıyorsanız büyük bir başarı sayılır. Yine de umutsuzluğa kapılmaya gerek
yok, markette birden fazla uygulamanız varsa ve her birinde reklam
kullanmışsanız, tabiri caizse akmasa da damlayacaktır.
0 yorum