Endless Runner'da AdMob: Temel Reklam Entegrasyonu
Giriş: Endless Runner ve Reklam Gelirleri
Endless Runner türündeki mobil oyunlar, basit oynanışları ve bağımlılık yapıcı yapıları sayesinde geniş kitlelere ulaşabilir. Bu tür oyunların geliştiricileri için en popüler gelir modellerinden biri de reklam entegrasyonudur. Google AdMob, dünya genelinde milyonlarca uygulama tarafından kullanılan, güvenilir ve esnek bir reklam platformudur. Bu makalede, Unity motorunu kullanarak geliştirdiğiniz bir Endless Runner oyununa AdMob reklamlarını (Banner, Geçiş ve Ödüllü Video) nasıl entegre edeceğinizi adım adım öğreneceğiz. Oyununuzdan gelir elde etmeye başlamak için bu Unity AdMob Entegrasyonu rehberi size yol gösterecek.
Unity AdMob Entegrasyonuna Başlarken
AdMob Hesabı ve Uygulama Kaydı
Unity AdMob Entegrasyonu sürecine başlamadan önce bir AdMob hesabınızın olması ve uygulamanızı AdMob'a kaydetmeniz gerekmektedir. AdMob paneline giriş yaparak yeni bir uygulama ekleyin. Uygulamanız henüz mağazada yayınlanmamışsa, bu adımı geçebilir ve daha sonra bağlayabilirsiniz. Uygulamanızı kaydettikten sonra, her bir reklam türü için reklam birimleri (Ad Units) oluşturmanız gerekecek. Bu birimler için alacağınız kimlikler (ID'ler) Unity projenizde kullanılacaktır.
Unity Projenize AdMob SDK'sını Ekleme
AdMob SDK'sını Unity projenize dahil etmek oldukça basittir:
- Unity Hub'dan projenizi açın.
- Üst menüden
Window > Package Manager'ı seçin. - Paket Yöneticisi penceresinde sol üstteki
+simgesine tıklayın veAdd package from git URL...seçeneğini seçin. - Açılan alana
com.google.unity.adsyazın veAddbutonuna basın. - SDK indirilip projenize eklenecektir.
Alternatif olarak, Google Developers sitesinden Google Mobile Ads Unity Plugin'ini (.unitypackage) indirip projenize aktarabilirsiniz.
SDK eklendikten sonra, Assets > Google Mobile Ads > Settings yolunu izleyerek AdMob uygulama kimliğinizi (App ID) buraya girmeniz gerekmektedir. Bu kimlik, AdMob panelinde uygulamanızı seçtiğinizde görünen 'App ID'dir (örneğin, ca-app-pub-XXXXXXXXXXXXXXXX~YYYYYYYYYY).
Reklam Birimleri Oluşturma
AdMob panelinizde uygulamanız için Banner, Geçiş (Interstitial) ve Ödüllü Video (Rewarded Video) reklam birimleri oluşturun. Her bir reklam birimi için benzersiz bir kimlik (Ad Unit ID) alacaksınız. Bu kimlikleri projenizde kullanmak üzere bir kenara not edin. Test amaçlı kullanabileceğiniz örnek reklam birimi kimlikleri de mevcuttur; geliştirme aşamasında bunları kullanmanız önemlidir.
Reklam Türleri ve Entegrasyon
Unity AdMob Entegrasyonu kapsamında en çok kullanılan üç reklam türünü ele alalım.
Banner Reklamlar
Banner reklamlar, ekranın üstünde veya altında küçük bir bant şeklinde sürekli gösterilen reklamlardır. Endless Runner oyunlarında genellikle oyun arayüzünü engellemeyecek bir yere konumlandırılırlar.
using UnityEngine;
using GoogleMobileAds.Api;
public class AdMobBannerManager : MonoBehaviour
{
private BannerView bannerView;
public string bannerAdUnitId = "ca-app-pub-3940256099942544/6300978111"; // Test ID
void Start()
{
MobileAds.Initialize(initStatus => { });
RequestBanner();
}
private void RequestBanner()
{
if (bannerView != null)
{
bannerView.Destroy();
}
// Yeni bir banner reklam oluştur
bannerView = new BannerView(bannerAdUnitId, AdSize.Banner, AdPosition.Bottom);
// Reklamı yükle
AdRequest request = new AdRequest.Builder().Build();
bannerView.LoadAd(request);
Debug.Log("Banner reklam yüklendi.");
}
public void HideBanner()
{
if (bannerView != null)
{
bannerView.Hide();
}
}
public void ShowBanner()
{
if (bannerView != null)
{
bannerView.Show();
}
}
void OnDestroy()
{
if (bannerView != null)
{
bannerView.Destroy();
}
}
}
Bu kodu bir GameObject'e ekleyip çalıştırdığınızda, ekranın altında bir test banner reklamı belirecektir. Kendi Ad Unit ID'nizi kullanmayı unutmayın.
Geçiş Reklamları (Interstitial Ads)
Geçiş reklamları, genellikle oyun seviyeleri arasında, oyun bittiğinde veya menüye dönüş gibi doğal duraklamalarda tüm ekranı kaplayarak gösterilen reklamlardır. Kullanıcı deneyimini bozmamak için doğru zamanda gösterilmeleri kritik öneme sahiptir.
using UnityEngine;
using GoogleMobileAds.Api;
public class AdMobInterstitialManager : MonoBehaviour
{
private InterstitialAd interstitialAd;
public string interstitialAdUnitId = "ca-app-pub-3940256099942544/1033173712"; // Test ID
void Start()
{
MobileAds.Initialize(initStatus => { });
LoadInterstitialAd();
}
public void LoadInterstitialAd()
{
if (interstitialAd != null)
{
interstitialAd.Destroy();
}
interstitialAd = new InterstitialAd(interstitialAdUnitId);
AdRequest request = new AdRequest.Builder().Build();
interstitialAd.LoadAd(request);
interstitialAd.OnAdClosed += HandleOnAdClosed;
Debug.Log("Interstitial reklam yükleniyor.");
}
public void ShowInterstitialAd()
{
if (interstitialAd != null && interstitialAd.IsLoaded())
{
interstitialAd.Show();
Debug.Log("Interstitial reklam gösterildi.");
}
else
{
Debug.LogWarning("Interstitial reklam henüz yüklenmedi.");
LoadInterstitialAd(); // Yüklenmediyse tekrar yükle
}
}
private void HandleOnAdClosed(object sender, System.EventArgs args)
{
Debug.Log("Interstitial reklam kapatıldı.");
LoadInterstitialAd(); // Reklam kapatıldığında bir sonraki için yükle
}
void OnDestroy()
{
if (interstitialAd != null)
{
interstitialAd.Destroy();
}
}
}
Bu sınıfı oyununuzun bittiği zaman veya menüye geçiş yaptığınızda ShowInterstitialAd() metodunu çağırarak kullanabilirsiniz.
Ödüllü Video Reklamlar (Rewarded Ads)
Ödüllü video reklamlar, kullanıcının izlemeyi tamamlaması karşılığında oyun içi bir ödül (ekstra can, para, yeni karakter vb.) sunduğunuz reklamlardır. Bu reklamlar, hem kullanıcı etkileşimini artırır hem de yüksek gelir potansiyeli sunar.
using UnityEngine;
using GoogleMobileAds.Api;
public class AdMobRewardedManager : MonoBehaviour
{
private RewardedAd rewardedAd;
public string rewardedAdUnitId = "ca-app-pub-3940256099942544/5224354917"; // Test ID
void Start()
{
MobileAds.Initialize(initStatus => { });
LoadRewardedAd();
}
public void LoadRewardedAd()
{
if (rewardedAd != null)
{
rewardedAd.Destroy();
}
rewardedAd = new RewardedAd(rewardedAdUnitId);
// Olay dinleyicilerini tanımla
rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
rewardedAd.OnAdClosed += HandleRewardedAdClosed;
rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
AdRequest request = new AdRequest.Builder().Build();
rewardedAd.LoadAd(request);
Debug.Log("Ödüllü reklam yükleniyor.");
}
public void ShowRewardedAd()
{
if (rewardedAd != null && rewardedAd.IsLoaded())
{
rewardedAd.Show();
Debug.Log("Ödüllü reklam gösterildi.");
}
else
{
Debug.LogWarning("Ödüllü reklam henüz yüklenmedi veya gösterilemiyor.");
LoadRewardedAd(); // Yüklenmediyse tekrar yükle
}
}
private void HandleRewardedAdLoaded(object sender, System.EventArgs args)
{
Debug.Log("Ödüllü reklam başarıyla yüklendi.");
}
private void HandleUserEarnedReward(object sender, Reward args)
{
string type = args.Type;
double amount = args.Amount;
Debug.LogFormat("Kullanıcı ödül kazandı: {0} {1}", amount, type);
// Burada oyuncuya ödülünü verin (örn: +1 can, +100 altın)
GameManager.Instance.GivePlayerReward((int)amount); // Örnek
}
private void HandleRewardedAdClosed(object sender, System.EventArgs args)
{
Debug.Log("Ödüllü reklam kapatıldı.");
LoadRewardedAd(); // Reklam kapatıldığında bir sonraki için yükle
}
private void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args)
{
Debug.LogError("Ödüllü reklam gösterilemedi: " + args.Message);
LoadRewardedAd(); // Hata durumunda tekrar yüklemeyi dene
}
void OnDestroy()
{
if (rewardedAd != null)
{
rewardedAd.Destroy();
}
}
}
Ödüllü reklamlar için HandleUserEarnedReward metodunda oyuncuya ödülünü vermeyi unutmayın. Bu genellikle bir buton tıklamasıyla tetiklenir.
Pratik İpuçları ve En İyi Uygulamalar
Kullanıcı Deneyimi Odaklı Reklam Yerleşimi
Reklamlar, oyunun akışını ve kullanıcı deneyimini bozmamalıdır. Endless Runner oyunlarında:
- Banner Reklamlar: Ekranın alt veya üst kısımlarında, oyun alanını kapatmayacak şekilde konumlandırılmalıdır.
- Geçiş Reklamları: Oyuncu öldüğünde, seviye tamamlandığında veya menüye döndüğünde gibi doğal duraklamalarda gösterilmelidir. Asla oyunun ortasında aniden belirlememelidir.
- Ödüllü Video Reklamlar: Kullanıcının isteği üzerine (örneğin, "Can kazanmak için izle" butonu) gösterilmelidir. Şeffaf bir şekilde ödülün ne olduğunu belirtmek önemlidir.
Test Reklam Birimleri Kullanımının Önemi
Geliştirme aşamasında her zaman AdMob'un sağladığı test reklam birimi kimliklerini kullanın. Kendi gerçek reklam birimi kimliklerinizi geliştirme sırasında kullanmak, AdMob politikalarını ihlal etmenize ve hesabınızın askıya alınmasına neden olabilir. Test kimlikleri, reklamların düzgün çalıştığını doğrulamanızı sağlar ve gerçek gösterim sayınızı etkilemez.
Reklam Yükleme Süreçlerini Optimize Etme
Reklamların yüklenmesi biraz zaman alabilir. Bu nedenle, bir reklamı göstermeden önce onu önceden yüklemeyi düşünebilirsiniz. Örneğin, oyun başlarken veya bir seviye bittikten hemen sonra bir sonraki geçiş reklamını yüklemeye başlayın. Böylece, reklamı gösterme zamanı geldiğinde hazır olacaktır ve kullanıcı beklemek zorunda kalmaz.
Kullanıcı İzni Yönetimi (GDPR, ATT)
Özellikle Avrupa Birliği (GDPR) ve iOS 14.5+ (App Tracking Transparency - ATT) kuralları nedeniyle, kullanıcılardan kişiselleştirilmiş reklamlar için izin almanız gerekebilir. AdMob SDK'sı, bu izinleri yönetmenize yardımcı olacak araçlar sunar. Uygulamanızı yayınlamadan önce bu yasal gereklilikleri araştırın ve uygulamanıza uygun bir izin akışı ekleyin. Bu, Unity AdMob Entegrasyonu sürecinin önemli bir parçasıdır.
Yaygın Hatalar ve Çözümleri
Reklamlar Görünmüyor veya Yüklenmiyor
- Hata: Reklam birimi kimlikleri (Ad Unit ID) yanlış.
- Çözüm: AdMob panelinizdeki kimliklerle projenizdeki kimliklerin tam olarak eşleştiğinden emin olun. Test kimliklerini doğru kullandığınızı kontrol edin.
- Hata: İnternet bağlantısı yok veya zayıf.
- Çözüm: Cihazınızın internete bağlı olduğundan emin olun. Reklam sunucularına erişim engellenmiş olabilir (VPN, güvenlik duvarı vb.).
- Hata:
MobileAds.Initialize()çağrılmadı veya yanlış yerde çağrıldı. - Çözüm: Bu metodun uygulamanın başlangıcında bir kere çağrıldığından emin olun.
- Hata: SDK kurulumu eksik veya hatalı.
- Çözüm: Unity Package Manager üzerinden SDK'nın doğru yüklendiğini kontrol edin. Android için
AndroidManifest.xmlayarlarının doğru olduğundan emin olun (SDK otomatik yapar ancak kontrol etmekte fayda var).
Uygulama Çöküyor
- Hata: Reklam objeleri yanlış yönetiliyor, örneğin birden fazla kez başlatılmaya çalışılıyor veya yok edilmeden yeniden oluşturuluyor.
- Çözüm: Reklam objelerinin yaşam döngüsünü (oluşturma, yükleme, gösterme, yok etme) dikkatlice yönetin. Her reklam türü için tek bir yönetim sınıfı kullanmak ve reklam objelerini gerektiğinde
Destroy()etmek önemlidir. - Hata: UI thread'i bloke ediliyor.
- Çözüm: AdMob SDK'sı genellikle kendi thread'lerinde çalışır, ancak geri çağrımların (callbacks) Unity'nin ana thread'inde işlendiğinden emin olun. Genellikle bu otomatik olarak yönetilir, ancak karmaşık senaryolarda dikkatli olmak gerekir.
Reklamlar Doğru Zamanda Gösterilmiyor
- Hata: Reklamlar kullanıcı deneyimini bozacak şekilde aniden çıkıyor.
- Çözüm: Reklamları oyun akışındaki doğal duraklamalara yerleştirin. Özellikle geçiş reklamları ve ödüllü reklamlar için bu çok önemlidir. Kullanıcıya kontrol hissi verin.
- Hata: Reklamlar yeterince sık gösterilmiyor veya çok sık gösteriliyor.
- Çözüm: Oyununuzun ritmine uygun bir reklam gösterme stratejisi belirleyin. Çok sık reklam göstermek kullanıcıları rahatsız edip uygulamanızı sildirebilir, çok az göstermek ise gelirleri düşürebilir. A/B testleri ile en uygun dengeyi bulmaya çalışın.
Performans ve Optimizasyon Notları
Unity AdMob Entegrasyonu yaparken performansı göz önünde bulundurmak önemlidir:
- Bellek Kullanımı: Her reklam objesi bir miktar bellek tüketir. Kullanılmayan reklam objelerini (özellikle
InterstitialAdveRewardedAd)Destroy()metodu ile temizlemeyi unutmayın. Önceden yükleme yaparken çok fazla reklamı aynı anda bellekte tutmaktan kaçının. - CPU Kullanımı: Video reklamlar, özellikle eski veya düşük güçlü cihazlarda CPU ve pil tüketimini artırabilir. Reklamları gösterirken oyunun genel performansını test edin.
- Ağ İstekleri: Reklam yükleme işlemleri ağ istekleri gerektirir. Bu isteklerin oyunun kritik anlarında (örneğin, hızlı tempolu bir oyunun ortasında) gecikmeye neden olmaması için arka planda ve uygun zamanlarda yapılmasını sağlayın.
Sonuç
Unity ile bir Endless Runner oyununa AdMob reklamlarını entegre etmek, doğru adımları izlediğinizde oldukça kolaydır. Banner, Geçiş ve Ödüllü Video reklamlarını stratejik olarak kullanarak hem oyununuzdan gelir elde edebilir hem de oyuncularınıza değerli bir deneyim sunabilirsiniz. Unutmayın, iyi bir Unity AdMob Entegrasyonu sadece kod yazmakla kalmaz, aynı zamanda kullanıcı deneyimini ve AdMob politikalarını da göz önünde bulundurmayı gerektirir. Bu rehberdeki ipuçlarını ve kod örneklerini kullanarak, kendi oyununuzda başarılı bir reklam stratejisi oluşturabilirsiniz.
🧠 Ders Sonu Değerlendirme Testi
Dersi tamamladıktan sonra bilgilerinizi test edin ve ekstra puanlar kazanın.
Yorumlar (0)
İlk yorumu siz yapın!