Unity 3D Oyunlarınıza Unity Ads Reklamları Eklemek – Resimli Anlatım

Yayınlandı: 04 Nisan 2020 yasirkula tarafından Oyun Tasarımı, UNITY 3D içinde

Hepinize merhabalar,

Bu dersimizde, Android ve iOS için yaptığınız Unity oyunlarınıza, Unity Ads ile nasıl banner, interstitial (tam ekran, geçilebilir reklam) ve rewarded (ödüllü) reklam ekleyebileceğinizi göstereceğim. Alternatif bir reklam servisi olan AdMob entegrasyonu için ise şu dersime bakabilirsiniz: https://yasirkula.com/2014/05/26/unity-3d-android-oyunlariniza-admob-reklamlari-eklemek-resimli-anlatim/

Dilerseniz AdMob ile Unity Ads’i beraber kullanabilirsiniz. Eğer ilgileniyorsanız, AdMob dersimdeki mediation kısmına bakabilirsiniz. Bu durumda bu derse bakmanıza gerek yok.

Eğer henüz Android SDK‘yı kurmadıysanız, sizi önce şuraya alayım: https://yasirkula.com/2013/07/17/unity-android-sdk-kurulumu-resimli-anlatim/

Yazıyı yazarken faydalandığım kaynak: https://docs.unity3d.com/Packages/com.unity.ads@3.4/manual/index.html

Ödeme Bilgilerini Girmek

Unity Ads’in AdMob’a göre bir dezavantajı, reklam ödemelerinizi EFT ile değil de SWIFT ile almanız, yani uluslararası para transferi oluyor ve bunun için daha çok komisyon ödüyorsunuz. Eğer henüz SWIFT destekleyen bir bankada hesabınız yoksa, banka hesabı oluşturana kadar paranın Unity Ads hesabınızda birikmesini talep etmeniz de mümkün.

Derse ödeme bilgilerimizi sisteme girmekle başlayalım. https://id.unity.com adresine giriş yapın ve soldan Organizations butonuna tıklayıp hesabınızı seçin. Ardından yine soldan Payout Profile sayfasına geçiş yapıp Add profile butonuna tıklayın. Eğer oyununuzu bir şirket ile değil de tek başınıza yaptıysanız, “Payment recipient is“i Private individual yapın. Sonra diğer istenen bilgileri de doldurup Create butonuna tıklayın. “Full Name” ile ilgili bir hata alırsanız, isminizde Türkçe karakter kullanmayın.

Ödeme bilgilerinizi girmeden önce, vergi bilgilerinizi girmek için Payout Tax Info‘nun yanındaki Create butonuna tıklayın. Buradan sonra, sizden adım adım bir takım bilgiler girmeniz istenecek. Doğruya doğru, bu kısım gerçekten biraz karışık, ben de burada okuduğum her şeyi anlamıyorum. Bu yüzden bu esnada yanınızda, İngilizce’den anlayan ve mümkünse daha önce bu tarz işlerle uğraşmış birinin olması oldukça işinize yarayacaktır.

Vergi işlemlerini tamamladıktan sonra, artık ödeme bilgilerinizi girebilirsiniz. Bunun için Payout Method‘daki Add payout method butonuna tıklayın. Eğer henüz SWIFT para transferi destekleyen bir banka hesabınız yoksa, paranın Unity Ads hesabınızda birikmesi için “Hold my payments“ı seçin ve işlemi tamamlayın. Aksi taktirde “Bank transfer” seçeneğini seçin. Minimum Payout Amount, Unity Ads hesabınızda ne kadar para biriktikten sonra, bu paranın bankanıza aktarılacağıdır. Ancak uluslararası para transferi demek aynı zamanda bankanın bundan komisyon alması da demek olduğu için (ilaveten Unity de 7.5 euro komisyon alıyor), transfer sayısını minimuma indirmek adına bu değeri yüksek tutmanızı öneririm. Sonrasında Add bank transfer details butonu ile, banka bilgilerinizi Worldpay sistemi üzerinden girebilirsiniz. Bankanızın SWIFT bilgilerini, bankanın web sitesi üzerinden bulmanız mümkün. Banka bilgilerinizi de girdikten sonra artık ödeme almaya hazırsınız.

Reklamları Oluşturmak

Unity Ads 3 çeşit reklam destekler:

  • Banner: oyun boyunca ekranın üst veya alt kenarında gözüken ufak reklamlardır
  • Interstitial: tam ekran olan ve bir resimden veya videodan oluşan reklamlardır. Eğer reklam videodan oluşuyorsa, videoyu birkaç saniye izledikten sonra reklamı geçmek mümkündür
  • Rewarded: bunlar da video reklamlardır. Interstitial’in aksine, rewarded reklamlar geçilemez, sonuna kadar izlenir. Ama bunun karşılığında da oyuncuya bir oyun içi ödül (reward) verilir, mesela 50 altın. Rewarded reklam gösterip oyuncuya ödül vermemek, rewarded reklam politikasına aykırıdır ve oyununuzdaki reklamların durmasına sebep olabilir. Benzer şekilde, oyuncuya rewarded reklamın 50 altın vereceğini söyleyip sadece 10 altın ödül vermek de reklamın yanıltıcı olması demektir ve bu da reklamların durmasına sebep olabilir. O yüzden rewarded reklamlarda oyuncuya karşı dürüst olmalı, reklamı izlemenin karşılığında oyuncunun ne kazanacağını ona açık bir şekilde söylemeli ve oyuncu reklamı izleyince o ödülü oyuncuya vermelisiniz

Yeni bir reklam oluşturmak için, öncelikle yeni bir proje oluşturmalıyız. Bunun için https://operate.dashboard.unity3d.com/ adresine gidin, soldan Projects sekmesine geçiş yapın ve New Project butonuna tıklayın. “Project name“e projenizin ismini girin ve eğer uygulamanız özellikle 13 yaş altı çocuk kitlesine hitap ediyorsa, “This game is directed to children under the age of 13 in the United States” seçeneğini işaretleyin (eğer Google Play’de “Designed for Families” programına katılacaksanız, bu seçeneği işaretlemek zorundasınız). “App Store ID“leri şimdilik boş bırakabilirsiniz. İşlemi tamamlamak için Add project butonuna tıklayın.

Reklam oluşturmak için projenizin ana sayfasında sol tarafta yer alan menüden Monetization-Placements yolunu izleyin ve Add Placement butonuna tıklayın. “Placement ID“e reklam için bir isim girin (boşluk ve Türkçe karakter kullanmayın) ve eğer banner reklam oluşturuyorsanız Banner, interstitial reklam oluşturuyorsanız Interstitial video, yoksa Rewarded video seçeneğini seçip Create placement butonuna tıklayarak işlemi sonlandırın:

Yeni oluşturduğunuz projelerde Unity Ads otomatik olarak bir interstitial bir de rewarded reklam oluşturur ve bunlara video ile rewardedVideo isimlerini verir:

Dilerseniz yeni bir interstitial veya rewarded reklam oluşturmak yerine, direkt bunları kullanabilirsiniz. Burada benim önerim, interstitial (video) reklama tıklayıp Ad types‘ında yer alan her şeyi işaretlemeniz ve Save butonu ile değişikliği kaydetmeniz:

Buradaki değerler şunlardır:

  • Video: birkaç saniye sonra geçilebilir video reklam
  • Display: statik bir resimden oluşan reklam
  • Playable: oyuncunun reklamla etkileşime geçebildiği, reklamdaki oyunu direkt reklam üzerinden oynayabildiği reklamlar

Son olarak da, aynı sayfadan Allow skip‘in değerini değiştirerek, oyuncunun kaç saniye sonra interstitial reklamı geçebileceğini belirleyebilirsiniz:

Reklamları Filtrelemek

Reklamlarınızın hedef kitlenize daha çok hitap etmesi için, reklam filtrelerini kullanabilirsiniz. Filtrelere erişmek için, soldaki menüden Monetization-Ad Filters yolunu izleyin. Gelen pencerede göreceğiniz üzere, Android (Google Play Store) ve iOS (Apple App Store) için farklı filtreler oluşturabilirsiniz. Reklamlarınıza 2 çeşit filtre uygulayabilirsiniz:

  • Category filtering: belli kategorilerdeki reklamların oyununuzda gözükmemesini sağlar. Buradaki filtrelerden, oyununuzun türüyle alakasız olanları işaretlemenizi öneririm (işaretli kategorilere ait reklamlar oyununuzda gözükmez). Örneğin Other Categories altında yer alan kategoriler, oyunlardan bağımsız kategorilerdir. Puzzle oyunu yapıyorsanız, oyununuzu oynayan kişilerin politika, döviz veya çöpçatan kategorilerindeki bir reklama tıklama oranı, başka bir puzzle oyunla ilgili bir reklama tıklama oranına göre çok daha az olacaktır. Alttaki resimde, ben sadece puzzle ile alakalı kategorileri açık bıraktım, geriye kalan her şeyi filtreledim:

Burada yukarıdaki uyarı mesajı dikkatinizi çekmiş olabilir. Unity, reklamları filtreledikçe reklam gelirimizin azalabileceği yönünde bizi uyarıyor. Ne kadar çok kategori filtrelenirse, reklam havuzunda bize sunulabilecek reklam sayısı da o kadar az olur. Bu yüzden tek bir kategoriyi açık bırakmak yerine, oyununuzla alakalı olabilecek birden çok kategoriyi açık bırakmanızı öneririm.

  • Age limits: belli bir yaş üstüne hitap eden reklamların oyununuzda gözükmemesini sağlar. Oyununuz daha çok çocuklara hitap ediyorsa, bu filtreyi mutlaka kullanın. Alttaki örnekte, 13 yaş ve üzerine hitap eden reklamları filtreledim, artık bu reklamlar oyunumda gözükmeyecek (eğer Google Play’de “Designed for Families” programına katılacaksanız, sizde de bu değer en fazla 13 olmalı):

Reklam Entegrasyon Bilgileri

Unity Ads reklamlarınızla alakalı not almanız gereken iki değer var:

  • Reklam(lar)ınızın “Placement ID”leri: Monetization-Placements ekranından reklama tıklayarak, gelen sayfadan öğrenebilirsiniz
  • Game ID: sol taraftan Settings-Project Settings sekmesine geçiş yapınca “Google Play Store” (Android) ve “Apple App Store” (iOS) satırlarında yer alır, yani oyununuzun Android ve iOS sürümlerinin GAME ID‘leri farklıdır

Bu değerleri not aldıktan sonra, Unity Ads’i Unity projemize entegre etmeye hazırız.

Unity Ads’i Unity Projesine Eklemek

Unity Ads için gerekli dosyaları projemize import etmek için 2 farklı yöntem mevcut:

  • Package Manager: Unity 2019 öncesi sürümlerde bu yöntemi önermiyorum çünkü bu sürümlerde Unity Ads’in son sürümü hata veriyor. Eğer Unity 2019 veya üstü bir sürüm kullanıyorsanız, Window-Package Manager yolunu izleyip Ads paketinin son sürümünü seçin ve Update butonu ile bu sürümü yükleyin:

Reklamları Göstermek

a) Banner Reklamlar

Reklam.cs adında yeni bir C# script oluşturup bunu kameraya component olarak verin:

using UnityEngine;
using UnityEngine.Advertisements;

public class Reklam : MonoBehaviour
{
	public string GameID = "GAME ID";
	public string BannerPlacementID = "BannerReklam";
	public bool testModu = true;

	private bool bannerGosterilecek = true;

	void Start()
	{
		// Unity Ads'i kullanıma hazır hale getir
		Advertisement.Initialize( GameID, testModu );
	}

	void Update()
	{
		if( bannerGosterilecek )
		{
			// Banner reklam gösterilmeye hazır mı diye kontrol et
			if( Advertisement.IsReady( BannerPlacementID ) )
			{
				// Banner reklam gösterilmeye hazır, o halde reklamı göster!
				Advertisement.Banner.Show( BannerPlacementID );

				// Banner'ı gösterdik, artık bu if koşulunu kontrol etmemize gerek yok
				bannerGosterilecek = false;
			}
		}
	}

	// Ekranda test amaçlı "Banner Göster" ve "Banner Gizle" butonları göstermeye yarar, bu fonksiyonu silerseniz butonlar yok olur
	void OnGUI()
	{
		if( GUI.Button( new Rect( Screen.width / 2 - 300, Screen.height - 300, 300, 300 ), "Banner Göster" ) )
			BannerGoster();

		if( GUI.Button( new Rect( Screen.width / 2, Screen.height - 300, 300, 300 ), "Banner Gizle" ) )
			BannerGizle();
	}

	public void BannerGoster()
	{
		bannerGosterilecek = true;
	}

	public void BannerGizle()
	{
		bannerGosterilecek = false;

		// Banner'ı gizle
		Advertisement.Banner.Hide();
	}
}

Ardından Inspector’dan Game ID değişkenine değer olarak oyununuzun Game ID‘sini, Banner Placement ID‘ye değer olarak da banner reklamınızın Placement ID‘sini verin.

Unity Ads’in güzel bir yanı, reklamları editörde de kabaca önizleyebilmeniz; bu yüzden Play butonuna basarsanız, reklamın editörde de gözüktüğünü göreceksiniz:

Reklam kodumuzu adım adım inceleyelim:

  • Script’imizin en başına using UnityEngine.Advertisements; yazdık, Unity Ads fonksiyonlarına erişebilmek için bu gerekli
  • Start fonksiyonu, sahne açıldığında çalıştırılır. Bu fonksiyonun içerisinde Advertisement.Initialize fonksiyonu ile Unity Ads’i initialize ediyoruz, yani çalışmaya hazır hale getiriyoruz. Reklamların gözükmesi için oyunun başında tek sefere mahsus bu fonksiyonu çağırmak zorundayız. Bu fonksiyon ilk parametre olarak oyunun Game ID‘sini alır. İkinci parametresi ise, test reklamları mı (true) yoksa gerçek reklamlar mı (false) alacağımızı belirler. Yazının devamındaki Test Reklamları kısmında bundan daha detaylı bahsedeceğim; şimdilik bilmeniz gereken şey, hesabınızın kapatılmaması için, oyununuzu test ederken daima test reklamlarını açmanız
  • Update fonksiyonunda öncelikle bannerGosterilecek değişkeninin true olup olmadığına bakıyoruz. Bu değişkenin değeri true ise, banner reklamın gösterilmeye hazır olup olmadığını, yani reklamın sunucudan inip inmediğini, Advertisement.IsReady fonksiyonu ile kontrol ediyoruz. Bu fonksiyon parametre olarak, sunucudan inip inmediğini kontrol etmek istediğiniz reklamın Placement ID‘sini alır; reklam gösterilmeye hazırsa da true döndürür. Bu durumda Advertisement.Banner.Show fonksiyonu ile banner reklamı ekranda gösteriyoruz. Bu fonksiyon da parametre olarak Placement ID‘yi alır. Reklamı gösterdikten sonra bannerGosterilecek’i false yapıyoruz çünkü artık banner reklam ekranda olduğu için, boş yere Advertisement.IsReady veya Advertisement.Banner.Show fonksiyonunlarını çağırmamıza gerek yok
  • OnGUI fonksiyonu test amaçlı ekranda iki buton gösterir, bu butonlara tıklayınca BannerGoster ve BannerGizle fonksiyonları çağrılır
  • BannerGoster fonksiyonu sadece bannerGosterilecek’i true yapar, banner’ın ekranda gözükmesi işini Update fonksiyonu halleder
  • BannerGizle fonksiyonu ise, bannerGosterilecek’i false yapmaya ilaveten, banner reklamın zaten ekranda olması ihtimaline karşılık Advertisement.Banner.Hide fonksiyonu ile banner reklamı ekrandan gizler

Banner reklamın ekranın neresinde gözükeceğini biz belirliyoruz. Varsayılan olarak reklamın neresinde gözükeceği belli olmayabilir, mesela üstteki resimde banner ekranın sol üst köşesinde gözükmüş. Çoğu zaman reklamı ekranın üst kenarının ortasında veya alt kenarının ortasında göstermek istersiniz. Bunun için Advertisement.Banner.SetPosition fonksiyonunu kullanabilirsiniz. Örneğin Start fonksiyonunu şöyle düzenleyerek, banner’ın ekranın alt kenarının ortasında gözükmesini sağlayabilirsiniz:

void Start()
{
	// Unity Ads'i kullanıma hazır hale getir
	Advertisement.Initialize( GameID, testModu );

	// BOTTOM_CENTER: alt orta kenar
	// TOP_CENTER: üst orta kenar
	// LEFT: sol
	// RIGHT: sağ
	// CENTER: ekranın ortası
	Advertisement.Banner.SetPosition( BannerPosition.BOTTOM_CENTER );
}

b) Intertitial Reklamlar

ReklamInterstitial adında yeni bir C# script oluşturup bunu kameraya component olarak verin:

using UnityEngine;
using UnityEngine.Advertisements;

public class ReklamInterstitial : MonoBehaviour
{
	public string GameID = "GAME ID";
	public string InterstitialPlacementID = "video";
	public bool testModu = true;

	private bool interstitialGosterilecek = false;

	void Start()
	{
		// Unity Ads'i kullanıma hazır hale getir
		Advertisement.Initialize( GameID, testModu );
	}

	void Update()
	{
		if( interstitialGosterilecek )
		{
			// Interstitial reklam gösterilmeye hazır mı diye kontrol et
			if( Advertisement.IsReady( InterstitialPlacementID ) )
			{
				// Interstitial reklam gösterilmeye hazır, o halde reklamı göster!
				Advertisement.Show( InterstitialPlacementID );

				// Interstitial'ı gösterdik, artık bu if koşulunu kontrol etmemize gerek yok
				interstitialGosterilecek = false;
			}
		}
	}

	// Ekranda test amaçlı "Interstitial Göster" butonu göstermeye yarar, bu fonksiyonu silerseniz buton yok olur
	void OnGUI()
	{
		if( GUI.Button( new Rect( Screen.width / 2 - 300, 0, 300, 300 ), "Interstitial Göster" ) )
			InterstitialGoster();
	}

	public void InterstitialGoster()
	{
		interstitialGosterilecek = true;
	}
}

Fark ettiyseniz, bu kod banner koduna oldukça benziyor. Yine oyunun başında Unity Ads’i Initialize ediyoruz ve yine reklamın gösterilmeye hazır olup olmadığını Advertisement.IsReady ile kontrol ediyoruz. Burada banner’dan tek fark, reklamı gösterirken Advertisement.Banner.Show fonksiyonunu değil de Advertisement.Show fonksiyonunu kullanıyoruz.

c) Rewarded Reklamlar

ReklamRewarded adında yeni bir C# script oluşturup bunu kameraya component olarak verin:

using UnityEngine;
using UnityEngine.Advertisements;

// Unity Ads'ten geri bildirimler almak için IUnityAdsListener interface'ini implement ediyoruz
public class ReklamRewarded : MonoBehaviour, IUnityAdsListener
{
	public string GameID = "GAME ID";
	public string RewardedPlacementID = "rewardedVideo";
	public bool testModu = true;

	private int altin = 0;

	private bool rewardedReklamGosterilecek = false;

	void Start()
	{
		// Unity Ads reklamlarıyla ilgili, bu ReklamRewarded objesine geri bildirimler yolla
		Advertisement.AddListener( this );

		// Unity Ads'i kullanıma hazır hale getir
		Advertisement.Initialize( GameID, testModu );
	}

	void Update()
	{
		if( rewardedReklamGosterilecek )
		{
			// Interstitial reklam gösterilmeye hazır mı diye kontrol et
			if( Advertisement.IsReady( RewardedPlacementID ) )
			{
				// Interstitial reklam gösterilmeye hazır, o halde reklamı göster!
				Advertisement.Show( RewardedPlacementID );

				// Interstitial'ı gösterdik, artık bu if koşulunu kontrol etmemize gerek yok
				rewardedReklamGosterilecek = false;
			}
		}
	}

	// Ekranda test amaçlı "Rewarded Reklam Göster" butonu göstermeye yarar, bu fonksiyonu silerseniz buton yok olur
	void OnGUI()
	{
		// Sahip olduğumuz altın sayısını ekrana bastır
		GUI.Box( new Rect( 0, 0, 100, 50 ), "Altın: " + altin );

		if( !Advertisement.IsReady( RewardedPlacementID ) )
		{
			// Eğer rewarded reklam gösterilmeye hazır değilse, butonu tıklanamaz yap ve kırmızı renkte göster
			GUI.enabled = false;
			GUI.backgroundColor = Color.red;
		}
		else
		{
			// Rewarded reklam hazırsa, butonu tıklanabilir yap ve mavi renkte göster
			GUI.enabled = true;
			GUI.backgroundColor = Color.blue;
		}

		if( GUI.Button( new Rect( Screen.width / 2, 0, 300, 300 ), "Rewarded Reklam Göster" ) )
			RewardedReklamGoster();
	}

	public void RewardedReklamGoster()
	{
		rewardedReklamGosterilecek = true;
	}

	//// Buradan sonraki fonksiyonlar, IUnityAdsListener'ın geri bildirim fonksiyonlarıdır. Bu fonksiyonlar Unity Ads tarafından otomatik olarak çağrılırlar. ////

	// placementId'ye sahip reklamın gösterilmeye hazır hale geldiğini söyler
	// Bu fonksiyon çağrıldıktan sonra Advertisement.IsReady(placementID) true döndürürmeye başlar
	public void OnUnityAdsReady( string placementId )
	{
	}

	// Bir reklamı sunucudan indirirken hata oluşmuştur
	public void OnUnityAdsDidError( string message )
	{
		// Hata mesajını konsola bastır
		Debug.LogError( message );
	}

	// placementId'ye sahip interstitial veya rewarded reklamın, Advertisement.Show vasıtasıyla gösterilmeye başladığını söyler
	public void OnUnityAdsDidStart( string placementId )
	{
	}

	// placementId'ye sahip interstitial veya rewarded reklamın kapatıldığını söyler
	// Reklamın sonuna kadar izlenip izlenmediğini kontrol etmek için showResult'tan faydalanılır
	public void OnUnityAdsDidFinish( string placementId, ShowResult showResult )
	{
		// Eğer bu geri bildirim rewarded reklam için çağrılmışsa
		if( placementId == RewardedPlacementID )
		{
			if( showResult == ShowResult.Skipped )
			{
				// Oyuncu reklamı geçmiş, yani sonuna kadar izlememiştir: oyuncuya ödül verme
			}
			else if( showResult == ShowResult.Finished )
			{
				// Oyuncu reklamı sonuna kadar izlemiştir: oyuncuyu ödüllendir
				altin += 50;
			}
			else if( showResult == ShowResult.Failed )
			{
				// Bir sebepten ötürü rewarded reklam gösterilirken hata oluşmuştur: oyuncuya ödül verme
				// ama mümkünse durumu izah eden bir mesaj gösterip tekrar reklamı izlemeyi denemesini söyle
			}
		}
	}
}

Kodun temel kısımları, interstitial kodu ile aynı. Fazlalık kodun büyük bir kısmı, Unity Ads’ten geri bildirim fonksiyonları almaktan ibaret. Oyuncu rewarded reklamı sonuna kadar izleyince onu ödüllendirmek zorunda olduğumuz için, reklamın sonuna kadar izlenip izlenmediğini Unity Ads’ten öğrenmek zorundayız. Bu bilgiyi IUnityAdsListener interface’inin sağladığı fonksiyonlar vasıtasıyla alıyoruz. Kodu inceleyecek olursak:

  • öncelikle script’imizin MonoBehaviour’a ilaveten, IUnityAdsListener interface’ini de implement etmesini sağlıyoruz
  • IUnityAdsListener’ı implement eden objemizin Unity Ads’ten geri bildirimler alabilmesi için, Start fonksiyonunda objeyi (this) Advertisement.AddListener ile Unity Ads’e tanıtıyoruz
  • OnGUI fonksiyonunun içerisinde, test amaçlı oyuncunun sahip olduğu altın sayısını ekrana yazdırıyoruz. Ayrıca rewarded reklamın gösterilmeye hazır olup olmamasına göre, “Rewarded Reklam Göster” butonunun rengini ve tıklanabilirliğini değiştiriyoruz
  • script’in geri kalanında, IUnityAdsListener’ın sahip olduğu fonksiyonları implement ediyoruz: OnUnityAdsReady, OnUnityAdsDidError, OnUnityAdsDidStart ve OnUnityAdsDidFinish. Her fonksiyonun ne işe yaradığını, kodda comment’lerle açıklamaya çalıştım. Rewarded reklamlarda bizi ilgilendiren fonksiyon OnUnityAdsDidFinish; bu fonksiyon rewarded reklam kapatıldığında çağrılır. Fonksiyonun aldığı ShowResult parametresinin değeri ShowResult.Finished ise, oyuncu reklamı sonuna kadar izlemiştir. Bu durumda oyuncuyu 50 altın ile ödüllendiriyoruz

NOT: IUnityAdsListener‘dan faydalanmak için illa rewarded reklam kullanmanıza gerek yok. Örneğin bir reklamın sunucudan indirilip indirilmediğini sürekli Advertisement.IsReady ile kontrol etmek istemiyorsanız, onun yerine OnUnityAdsReady fonksiyonunu kullanabilirsiniz. Veya reklamlar sunucudan çekilirken bir hata alıp almadığınızı görmek istiyorsanız, OnUnityAdsDidError fonksiyonunda hatayı konsola yazdırabilirsiniz.

Test Reklamları (ÖNEMLİ)

Reklamları test ederken test modunu açmazsanız, kendi reklamlarınızdan para kazandığınız için hesabınız kapatılabilir. Test modunu açtığınızda test reklamları alırsınız ve bu reklamlara tıklasanız dahi para kazanmazsınız, böylece reklamları rahatça test edebilirsiniz. Test modunun bir başka avantajı ise, fill rate sıkıntısı yaşamamasıdır. Reklam havuzunda reklam olmamasına fill rate sıkıntısı denir ve bu durumda uygulamanızda reklamlar gözükmeyebilir. Fill rate ülkeden ülkeye değişebilir; bazı ülkelerde hemen her zaman havuzda reklam varken bazı ülkelerde daha sık fill rate sıkıntısı yaşanabilir. Ancak test modunu açtığınızda, havuzda reklam olmasa bile size test reklamları gelmeye devam eder.

Test modunu aktifleştirmenin 3 yolu vardır:

  1. Yukarıdaki kodlarda da gördüğümüz üzere, Advertisement.Initialize‘a 2. parametre olarak true verebilirsiniz. Ancak oyunu yayımlamadan önce bu değeri false yapmayı unutmayın
  2. https://operate.dashboard.unity3d.com/ adresinden projenizi seçtikten sonra, soldan Settings-Project Settings sayfasını açın. Burada yer alan Test Mode satırından Android (Google Play Store) veya iOS (Apple App Store) için Override client test mode seçeneğini aktifleştirin ve “Force test mode ON“u işaretleyip Save butonuna tıklayın:

Bu şekilde, oyununuza gelen tüm reklamlar test reklamları olacak. Eğer oyununuzu halihazırda yayımladıysanız, oyuncularınıza test reklamları gitmemesi için, bu adım yerine 1. veya 3. adımları tercih edin.

Test moduna yapılan değişikliklerin reklamlara yansıması yarım saat kadar sürebilir, o yüzden bu seçeneği değiştirdikten sonra bir süre bekleyin. Oyunu yayımlamadan önce de Override client test mode‘u kapatmayı unutmayın.

  1. Cihazınızı test cihazı olarak tanıtın. Böylece o cihaza daima test reklamları gelir. Bunun için https://operate.dashboard.unity3d.com/ adresine girip soldan Ads Data Export-Test Devices yolunu izleyin ve Add New Device butonuna tıklayın. Gelen pencerede Device name‘e cihaz için bir isim girip Advertising ID‘ye de cihazın reklam kimliğini girin. Unity dokümantasyonunda yazdığına göre, bu kimliği bulmak için şu yazıdan faydalanabilirsiniz: https://www.mparticle.com/resources/how-to-find-your-mobile-device-identifiers

Store ID’lerini Güncellemek

Unity, oyununuzu yayımladıktan sonra Unity Ads üzerindeki Store ID‘leri güncellemenizi öneriyor. Bazı reklam sağlayıcıları bu ID’leri girmezseniz size reklam sağlamıyor(muş).

Store ID’leri güncellemek için, https://operate.dashboard.unity3d.com/ adresinden projenizi seçin ve soldan Settings-Project Settings sayfasını açın. Son olarak da, burada yer alan Store IDs satırının sağındaki Add Store Id butonuna tıklayıp, gelen kutucuğa mağazadaki uygulamanızın ID’sini girin.

Uygulamanızın ID’sini şu şekilde bulabilirsiniz:

Eğer oyununuzu daha yeni yayımladıysanız, oyununuzun Add Store Id tarafından tanınması 1 hafta kadar sürebilir.

app-ads.txt Entegrasyonu

Son zamanlarda oldukça popülerleşen app-ads.txt sistemi, daha güvenli bir şekilde reklam alabilmemize yardımcı oluyor(muş). Bazı reklam sağlayıcıları, app-ads.txt entegrasyonunu yapmazsanız size reklam sağlamıyor.

app-ads.txt‘yi destekleyebilmek için, oyununuzun Google Play ve/veya App Store sayfasında Website kısmına web sitenizin url’sini girmeniz ve bu adresin host’una erişim imkanınız olması lazım. Çünkü diyelim oraya https://websitem.com girdiyseniz, oluşturacağınız app-ads.txt dosyasını https://websitem.com/app-ads.txt adresine yüklemeniz gerekecek. Eğer henüz oyununuzu yayımlamadıysanız, bu işlemi oyunu yayımladıktan sonra da yapabilirsiniz çünkü bu işlem kodda hiçbir değişiklik gerektirmiyor.

Peki websitemize yükleyeceğimiz bu metin dosyasının içeriği ne olacak? Bunun için https://operate.dashboard.unity3d.com/ adresine girip soldan Settings butonuna tıklayın ve App-ads.txt satırının sağında yer alan kutucuktaki tüm metni kopyalayın:

Ardından bu metni, app-ads.txt isimli bir metin dosyasının içerisine yapıştırın. Son olarak da, bu metin dosyasını websitenizin root’unda yer alan public-html klasörüne upload edin. Başka bir işlem yapmanız gerekmiyor.

Reklam İstatistiklerini Okumak

Unity Ads’te farklı reklam sağlayıcıları, size farklı aksiyonlar için para ödeyebilir:

  • Ekranda reklam göstermek
  • Oyuncunun bir video reklamı sonuna kadar izlemesi
  • Oyuncunun bir reklama tıklaması
  • Oyuncunun bir reklama tıklayıp ardından o oyunu yüklemesi

Bu aksiyonların getirdiği kazanç, genel olarak yukarıdan aşağıya indikçe artar. En değerli aksiyonlar, oyuncuların reklama tıklayıp oyunu yüklemesi olduğu için, dersin başlarında bahsettiğim reklamları filtreleme olayı burada büyük bir önem arz ediyor: reklam oyuncunun ne kadar ilgisini çekerse, oyuncunun o reklama tıklama şansı da o kadar artar.

Reklam verilerinize erişmek için, https://operate.dashboard.unity3d.com/ adresinden projenizi seçin ve soldan Reporting-Ad Revenue‘ye geçiş yapın:

Burada en yukarıdaki ayarlarla, grafikte gösterilen veriyi filtreleyebilirsiniz. Filtreleri elledikçe, grafiğin hemen üzerinde gözüken veriler de kendilerini otomatik olarak güncelleyecektir:

  • Ads Revenue: reklamlardan elde edilen kazanç. Belli bir impression‘a rağmen kazancınız gözükmüyorsa, yaklaşık 5000 impression’ı yakalayana kadar sabretmeniz gerekebilir
  • Impressions: toplam reklam gösterim sayısı. Her reklam gösterdiğinizde, oyuncunun bu reklamı sonuna kadar izleyip izlememesine bakmaksızın bu değer 1 artar
  • eCPM: 1000 reklam gösterimi başına ortalama kazancınız. Ne kadar çok oyuncu reklamlarla etkileşime geçerse, bu değer (ve haliyle reklam kazancınız) o kadar artar
  • Fill Rate: reklam havuzunun doluluk oranı. Bazen reklam göstermek istediğiniz halde, reklam havuzunda reklam olmadığı için fill rate sıkıntısı yaşarsınız, reklamlarınız gözükmez. Unity, çoğu ülkede yaklaşık %95 fill rate’e sahip olduklarını söylüyor. Bu, her 100 reklam isteğinin 95’inin başarılı, 5’inin başarısız olması anlamına gelir
  • Impressions/DAU: günlük aktif kullanıcılarınızın (Daily Active Users, DAU) ortalama kaç reklam gördüğünü gösterir

Ve böylece bu dersin de sonuna gelmiş bulunuyoruz. Sonraki derslerde görüşmek üzere, takipte kalın!

yorum
  1. semiustunturks dedi ki:

    öncelikle yazılarınız için teşekkür ederim. ellerinize sağlık size bir soru sormak istiyorum. ben unity ilişkilendirmeden sadece google admob ile bağladım . kodum çalışıyor(show banner komutum konsolda görünüyor) fakat apk alınca test reklamları göremiyorum . internette de birçok kişi direk unity admob kodlarını yazıp yapıyordu . sizinki gibi ikişkilendirmeyi ilk defa görüyorum . bende görünmemesinin nedeni sizin gibi yapmamam olabilirmi? yada sadece admob da format daki önerilen şekilde yapmamız yeterli değilmi

  2. Berke dedi ki:

    using UnityEngine.Advertisements;
    public class reklamkod2 : MonoBehaviour {

    static reklamkod2 reklamkontrol2;
    public string AndroidID = “burada reklam kodum yazıyor”;
    public string ıOSID = “burada reklam kodum yazıyor”;

    string BannerReklamID = “banner”;
    bool TestMode=false;
    // Use this for initialization
    void Start() {
    #if UNITY_ANDROID
    Advertisement.Initialize(AndroidID, TestMode);
    #else
    Advertisement.Initialize(ıOSID, TestMode);
    #endif

    if (reklamkontrol2 == null)
    {

    DontDestroyOnLoad(gameObject);
    reklamkontrol2 = this;
    reklamlar2();
    }
    else
    {
    Destroy(gameObject);
    }
    }

    // Update is called once per frame
    void Update() {

    }
    void reklamlar2()
    {

    StartCoroutine(reklambeklemesuresi());

    //alt kısımda reklamı vermeyi ayarladık
    }
    IEnumerator reklambeklemesuresi()
    {
    while (!Advertisement.IsReady(BannerReklamID))
    {
    yield return new WaitForSeconds(0.5f);
    }
    Advertisement.Banner.SetPosition(BannerPosition.BOTTOM_CENTER);
    //Advertisement.Banner.Load(BannerReklamID);
    Advertisement.Banner.Show(BannerReklamID);

    }

    }
    Hocam Bu şekilde Unity ADS ile banner reklam ekledim.Fakat benim yapmaya çalıştığım şey her sahne yüklendiğinde bu gameobject’im yüklensin yani sürekli her sahenede reklamı çağırmak yerine ilk girişte çağırıp bütün yerlerde tutmak istedim.Fakat şuan build alıp uygulamayı test ettiğimde reklamlar gözükmüyor. Sizin bahsettiğniz 3 yerdende test olan reklamları normal gerçek reklama çevirdim.Sorunun nerede olduğunu bir türlü anlayamıyorum. Şimdiden yanıtınız için çok teşekkür ederim.

  3. Barış dedi ki:

    public bool testModu = true;
    Advertisement.Initialize( GameID, testModu );

    şu test işini hiç yapmadan direk sadece
    Advertisement.Initialize( GameID);
    yapsam olur mu?

    • yasirkula dedi ki:

      Unity’nin kendi dokümantasyonu (1, 2) hep testModu’nu kullanmış o yüzden olur diyemiyorum. Oyunu yayımlarken testModu’nu false yapabilirsiniz, çok ufak bir değişiklik.

  4. Furkan dedi ki:

    Hocam ben oyunumu yaptım reklam da ekledim fakat ben bu reklamdan gelen para için vergi ödemelimiyim şirket açmam şartmı vergi konusunu anlamadığım için oyunumu yayınlamaya korkuyorum vergi konusunda bilginiz varsa yardımcı olabilir misiniz?

    • yasirkula dedi ki:

      Ödeme bilgilerini girerken vergi formu da dolduruyoruz. Onun dışında açıkçası benim de bilgim yok.

      • Furkan dedi ki:

        Hocam o vergi formu Türkiye ile mi ilgili yoksa unitynin kendi bulunduğu ülkede kendi vermesi gereken vergiler için mi soruluyor yani cümle biraz bozuk oldu demek istediğim orda vergi bilgilerini girince ben vergimi ödemiş olup mu paramı almış oluyorum sizce oyunumu paylaşsam sıkıntı yaşar mıyım?

      • yasirkula dedi ki:

        Ben bireysel olarak (firma değil) oyun yapanlar için başka bir vergi olayı duymadım ama yanlışım da olabilir. Siz bu konuda kesin bilgi bulursanız, burada da paylaşırsanız çok sevinirim.

      • Furkan dedi ki:

        Hocam kusura bakmayın çok soruyorum yani unity ads deki tax kısmında unity bizim vergi işimizi kendisi mi yapıyor?

      • yasirkula dedi ki:

        Kesin bir bilgim yok. Siz bu konuda kesin bilgi bulursanız, burada da paylaşırsanız çok sevinirim.

      • Furkan dedi ki:

        Hocam bir sorum daha olacak unity ads deki tax bölümünde electronic signature yes mi seçtiniz yani orda çıkan formun çıktısını alıp imzalayıp geri yollamadınız değil mi?

      • yasirkula dedi ki:

        Elektronik yaptım. Ardından formu Adobe Reader ile doldurup imzalayabiliyoruz.

  5. oldgamesgl dedi ki:

    merhabalar, admob geçiş reklamını nasıl 5 saniye yapabileceğim? (:

  6. ensymn1 dedi ki:

    Hocam merhaba. Fonksiyonun update içinde olması banlanmaya yol açar mı ? bir ikinci sorumda test modunu false yapıp apk da denediğimde gene test reklamı çıkıyor

    • yasirkula dedi ki:

      Update’ten kastınız benim yazdığım script’ler ise hayır çünkü reklam kodu sadece 1 kere çağrılıyor. Kendiniz Update’te her frame’de reklam isteğinde bulunmak istiyorsanız ban yer misiniz bilmiyorum ama bence bu tarz bir aksiyona gerek yok ^^

      Test modunu kapattıktan yarım saat sonra tekrar deneyin ve dersteki bahsettiğim diğer test modlarının da kapalı olduğundan emin olun.

  7. hüseyin dedi ki:

    saygı değer hocam ben kac gündür unity ile satın alma işlemi üzerinde uğraşıyorum fakat sunucu üzerinden satın alma durumlarını kontrol edip öyle aldıgı ürünü teslim etmek istiyorum ama bir türlü acık bir kaynak bulamadım hep yabancı ve birisi başını anlatıyor bir başkası sonunu hep karşırık neyi nasıl alıp sunucuya gönderip sunucu üzerinden nasıl google veya apple ile baglantı kurup kontrol edebilirim nette bi link var https://github.com/voltrue2/in-app-purchase?fbclid=IwAR1SHqOmZideUcM8Mg-FHgSJJYjIpPSBp-msoBQLb7jmHXiPOvJYCVzbLsY

    buldugum en saglam kaynak buydu ama beceremedim bilginiz varsa bunun icin bir kaynak oluştururmusunuz türkce kaynak hiç yok

  8. Atilla Mısra dedi ki:

    Hocam merhaba,
    Sizin kodunuzu değil de coroutine içeren farklı bir implementasyonu kullanarak Unityads banner reklamı oyunuma ekledim ve android için build aldım. Reklam beklendiği şekilde çalışıyor ancak:

    Soru:1:
    Banner reklam gösterimi başladıktan sonra telefonun internet bağlantısını kapatıyorum ama yine banner reklam gösterimi (unity fake reklamı da olsa) devam ediyor. Bu reklam cache’e yüklendiği için mi orada kalmaya devam ediyor. Peki kullanıcı bu şekilde internet bağlantısı kapalı şekilde oyuna devam etse, reklam orada görünse bile unity reklam sunucusu ile bağlantımız koptuğu için haliyle bu reklam revenue’ya yansımayacak değil mi?

    Soru:2:
    Soru 1 ile bağlantılı: Diyelim ki kullanıcı internet bağlantısını kapattı ve 5 dakika sonra geri açtı. Cihazda her ne kadar banner reklam var gibi görünse de bu reklam çok eskiden başlayan ve server ile artık bağlantısı olmayan bir reklam değil mi?
    Dolayısı ile bizim, kullanıcının internet bağlantısını açma-kapama ihtimallerini içeren değişik senaryoları göz önüne alarak, her halükarda, birkaç dakikada bir banner reklamı isReady ile kontrol eden, ve eğer reklam hazır ise Show yapan bir implementasyon yapmamız mantıklı gibi geliyor. Peki internet bağlantısı sürekli açık olan bir kullanıcının cihazında bile birkaç dakikada bir Show metodunu yenileyen bir implementasyon reklamlar ile ilgili herhangi bir problem doğurur mu sizce?

    Teşekkürler

    • yasirkula dedi ki:

      1- Bence de revenue’ya yansımaz.
      2- Unity Ads ekibi bu tarz detayları zaten düşünmüş ve kodlarını ona göre yazmış olabilir. Bence böyle bir ekstra işe girişmeden önce, Unity Ads forumlarında 2 sorunuzu da sorup teknik ekipten cevap bekleyin.

      • Atilla Mısra dedi ki:

        Teşekkürler hocam,

        Soruları detaylandırıp şurada sordum:
        https://forum.unity.com/threads/does-the-advertisement-isshowing-only-check-the-showing-of-video-rewarded-video-ads.929046/

        Bir de bir şey daha danışmak istiyorum:

        Kullanıcıya 10 adet joker hakkı veren bir sistemim var oyun içinde. Bu joker hakları bitince kullanıcı ödüllü reklam izleyerek joker hakkı sayısını tekrar 10’a yükseltebiliyor. Joker hakları bitince isReady metodu ile hazırda reklam olup olmadığı kontrol edilip, eğer sonuç true dönerse üzerinde WATCH VIDEO yazılı bir buton görünür hale geliyor ve o butona tıklanıp reklam izlenince joker hakları 10’a tamamlanıyor. Sorum şu:

        Diyelim ki kullanıcı şu saniye son joker hakkını da kullandı ve hakları sıfıra indi ve ilgili script ile reklamlar isReady ile kontrol edildi ve hazırda reklam olduğu görülerek WATCH VIDEO butonu aktive edildi. Ancak kullanıcı o dakika bu butona basmadı ve aradan diyelim ki yarım saat geçti. Dolayısı ile bu geçen yarım saat içerisinde benim ara ara isReady ile reklam hazır olma durumunu tekrar tekrar kontrol edip, her kontrol sonrası hazırda reklam varsa butonu aktif etmem, hazırda reklam yoksa butonu ortadan kaldırmam gerekiyor çünkü mantıken reklam hazır olma durumunun her an kontrol edilmesi gerekiyor olsa gerek. Ben isReady ile reklam müsaitlik sorgusu yapınca cevabı true döndürdükten sonra bana bir reklam tahsis edip o reklamı benim için bekletmiyorlardır herhalde.

        Bunu sağlamak için de aklımda 2 yöntem var:
        1- Joker hakkının sıfır olduğu koşulda, belli zaman aralıkları ile isReady’yi çağırıp duruma göre reklam butonunu güncellemeliyim. Peki bu zaman aralığı mesela 5 saniye olsa, cihaza fazla CPU yükü yükler mi ve 5 saniyede bir sorgu reklam sistemi açısından sıkıntı olur mu?

        2- Joker hakkının sıfır olduğu koşulda, kullanıcının oyunla her bir etkileşimi sonrası -oyunla ilgili bir butona basması gibi- isReady ile kontrol ve sonrasında buton durumunda güncelleme olacak. Bu şık da, kullanıcının etkileşim sıklığına göre 1 numaralı yöntemin sahip olduğu açmazlara sahip olabilir.

        Uzattım ama kusura bakmayın. Bu durumlara çözüm olarak sizin tavsiyeniz ne olurdu?

      • yasirkula dedi ki:

        IsReady true olduğunda, reklam çoktan sunucudan indirilmiş demektir. Sizin tabirinizle o reklam size tahsis edilmiş ve sizin için bekletiliyordur. Kullanıcı butona basana kadar da ödüllü reklam gösterilmeye hazır bir şekilde beklemeye devam eder. Bu safhada IsReady kontrolünün CPU’ya yük bindireceğini sanmıyorum, hangi yol daha kolayınıza gelecekse onla devam edin bence.

      • Atilla dedi ki:

        Hocam isReady true olduğunda reklamın sunucudan indirilmiş olacağını hiç tahmin etmiyordum. Harika bir bilgi! Bu bilgi problemin tamamına yakınını çözüyor. Çok teşekkürler.

  9. destekverblog dedi ki:

    b) Intertitial Reklamlar kısmındaki butonu sildim. Benim belirlediğim butonlar bulunuyor. Buton’a basılınca reklamın çıkmasını istiyorum. Tam olarak hangi yötemi izlemem gerekiyor?

  10. Barış dedi ki:

    In App Purchase sistemiyle ben reklamları kaldırma özelliği ekleyeceğim daha önce hiç In App Purchase olayıyla uğraşmadım direk reklam aldım Unity Ads üzerinden fakat şimdi In App Purchase yaparsam kazancı Google Developer Console üzerinden TL olarak mı alıyoruz yoksa USD olarak mı? Bu konuda bir bilginiz var mı çünkü bu çok önemli hele Türkiye’de iseniz çünkü doları tekrar alsanız %1 BSMV vergisi veriyorsunuz ve banka makasıyla neredeyse 10 kuruş maliyet oluyor size. Eğer Unity Ads den parayı alıyorsanız zaten dolar gelir sıkıntı yok. TL ödeme seçeneği yok zaten Unity Ads de. Not: Birde parayı çekmeden doların yükselme ihtimali de var o yüzden kesinlikle dolarla ödeme yapmalı bence.

    • Barış dedi ki:

      Galiba benim araştırdığım ödemeyi illa Google Merchant Center üzerinden alıyoruz ve oda maalesef TL ile ödeme yapıyor sadece :/ Unity Ads üzerinden bir satın alma gerçekleştirmek sanırım imkansız? Abi ayrıca size bir kahve ısmarlamak isterim bunun için bana banka hesabınız varsa IBAN veya başka bir şey verebilir misiniz?

    • yasirkula dedi ki:

      IAP konusunda benim hiç bilgim yok, sizin yaptığınız araştırma büyük olasılıkla doğrudur. Kahveyi düşünmeniz yeterli.

  11. sadullah dedi ki:

    Hocam ben unity oyuna reklam ekledim daha sonrası için uygulmaya ”no ads” özelliğini eklemek istiyorum bunu nasıl yapabilirim. Teşekkür ediyorum

    • yasirkula dedi ki:

      In App Purchase yapacaksanız (gerçek parayla No Ads satın almak), oyuncunun satın aldığı ürünler nerede tutuluyor veya nasıl erişiliyor bilmiyorum. Aksi taktirde en basitinden PlayerPrefs kullanabilirsiniz:

      – No Ads satın alınca PlayerPrefs.SetInt("NoAds",1); ve PlayerPrefs.Save(); fonksiyonlarını çağırın
      – No Ads satın alınmış mı kontrol etmek için bool noAds = PlayerPrefs.GetInt("NoAds") == 1; değişkenini kullanın

      Her halükarda, No Ads’in satın alınıp alınmadığını oyunun başında kontrol edip bunu bir public static bool değişkende tutabilir, oyun esnasında reklam göstermeden önce de bu değişkenin değerinin true olup olmadığına bakabilirsiniz. Eğer true ise reklam gösterme kodunu çalıştırmazsınız.

  12. Koray dedi ki:

    Merhabalar, rewarded video kodunuzu kullanacağım fakat aklıma takılan bir şey oldu.
    RewardedPlacementID kısmını “rewardedVideo” şeklinde bırakmamız gerekiyor öyle değil mi ? GameID gibi bir dizi sayı yazmamız istenmiyor. Teşekkür ederim.

  13. Enes Kekeç dedi ki:

    Hocam oyunumda UnityAds seçeneği açıkken build edemiyorum. Kapalaıyken de reklam göstermiyor. Nedeni nedir?

  14. atayomer3078 dedi ki:

    Oynu play store’ye yükledim, reklamlar gözüküyor (muhtemelen 100den az defa videolar izlenmiştir)
    nasıl görebilirim ? illa 500 civarı izlenmesi mi gerekiyor ? Çünkü şu anda boşa kürek çekiyor gibi hissediyorum, istatistiklere ulaşamadığımdan dolayı 🙂

    • yasirkula dedi ki:

      Ben Unity Ads’in sitesinde yazanı kopyaladım ama illa 500 izlenme gerekmeyebilir, belki izlenmelerin gözükmesi biraz vakit alıyor olabilir.

  15. Efe dedi ki:

    Hocam test reklamlarını her yerden kapattım fakat hala test reklamları gözükmeye devam ediyor gerçek reklam gözükmüyor. Bu Arada oyunum Play Store de yayınlandı.

    • yasirkula dedi ki:

      Oyununuz hayırlı olsun. Test modu için bahsettiğim 3 metot da kapalı/kullanılmıyor ise ve 1 saat kadar beklediğiniz halde bir değişiklik olmuyorsa, maalesef bu benim de bilgim dışında kalıyor.

  16. Ahmet Yılmaz dedi ki:

    using System.Collections;
    using System.Collections.Generic;
    using UnityEngine;
    using UnityEngine.Advertisements;
    public class Reklam : MonoBehaviour, IUnityAdsListener
    {
    #if UNITY_IOS
    public string GameID;
    #elif UNITY_ANDROID
    public string GameID;
    #endif
    private int ipucu=0;
    public string BannerPlacementID;
    public string RewardPlacementID;
    public bool testModu;
    public BannerPosition bannerKonumu;
    void Start()
    {
    Advertisement.AddListener(this);
    Advertisement.Initialize(GameID, testModu);
    Advertisement.Banner.SetPosition(bannerKonumu);
    }
    IEnumerator BannerHazirMi()
    {
    while (!Advertisement.IsReady(BannerPlacementID))
    {
    yield return new WaitForSeconds(0.5f);
    }
    Advertisement.Banner.Show(BannerPlacementID);
    }
    public void BannerGoster()
    {
    StartCoroutine(BannerHazirMi());
    }
    public void BannerGizle()
    {
    Advertisement.Banner.Hide();
    }
    public void InterstitialGoster()
    {
    Advertisement.Show();
    }
    public void RewardedGoster()
    {
    Advertisement.Show(RewardPlacementID);
    }
    public void OnUnityAdsReady(string placementId)
    {

    }
    public void OnUnityAdsDidError(string message)
    {
    Debug.LogError(message);
    }

    public void OnUnityAdsDidStart(string placementId)
    {
    }

    public void OnUnityAdsDidFinish(string placementId, ShowResult showResult)
    {
    if (showResult == ShowResult.Finished)
    {
    ipucu += 1;
    }
    else if (showResult == ShowResult.Failed)
    {
    Debug.Log(“Ödüllü Reklam Durumu Başarısız”);
    }
    else if (showResult == ShowResult.Skipped)
    {
    Debug.Log(“Ödül Koşulu Sağlanmadı”);
    }
    }
    }
    Süleyman Bey admobdaki gibi açıklayıcı bir yazı olmuş. Emeğinize Sağlık. Bende admobtaki gibi Singleton Reklam hazırladım. Umarım işinize yarar. Kullanım olarak reklam scriptini atadığımız gameobjectin GetCompenent Komutuyla istediğimiz scripte kullanabiliyoruz.
    https://yasirkula.com/2019/07/27/unity-bir-scriptten-baska-bir-scriptteki-degiskene-ulasmak/ Bu dersteki Hedef script’e kod vasıtasıyla ulaşmak alt başlığı ile kullanabilirsiniz.

  17. Sefa dedi ki:

    Hocam lütfen yardım edin. Benim tek isteğim şey; belirli metinler yazdıktan sonra (30 40 tane cümle), bir buton olucak ona bastığım zaman rastgele olarak ekranda görünücek yazılar. Basit bir işlem gibi ama ben çözemedim. Yardımınızı rica edeceğim.

    • yasirkula dedi ki:

      Bu metinleri “public string[] metinler;” değişkeninde tuttuğunuzu varsayarsak, bu array’den rastgele bir string çekmek için şu kodu kullanabilirsiniz: string metin = metinler[Random.Range(0,metinler.Length)];

      • Sefa dedi ki:

        hocam bi de konu ile alakalı değil ama , benim uygulamamda 2 tane reklam var. Banner ve geçiş reklamı. iki scripti de önceden kullanmıştım ve çalışıyor hala eski uygulamamda. bugun aynı scriptle baska bir uygulamaya reklam yapmak istedim. banner çalışıyor (test reklamları bunlar) ama geçiş reklamı çalışmıyor. Unıty uzerinden calısıyor. çıktı aldığımda sadece banner çalışıyor. yardımcı olabilir misiniz sorunun kaynagını bir türlü anlamadım

      • yasirkula dedi ki:

        logcat kullanarak bir hata mesajı alıp almadığınızı kontrol etmenizi öneririm: https://yasirkula.com/2015/10/13/unity-android-oyunlarinizi-debug-etmek/

      • Sefa dedi ki:

        bu arada bu işlemi geröek admob reklamı ile de denedim gösterim olmadı ama istek adlı iki reklam da

      • Sefa dedi ki:

        kısaca admob reklamlarında test reklamları ; banner görünüyor , geçiş reklamı çıkmıyor bir türlü

  18. Faruk dedi ki:

    Hocam Firebase dersi istiyoruz lütfen

  19. faraza dedi ki:

    yasir bey test reklam açıkkende kapalıyken oyunumu play store yükledikten sonra böyle gözüküyor. burada reklam çıkması gerekmyormu https://imgyukle.com/i/ruYlXN

  20. Hüseyin dedi ki:

    İyi günler Yasir Hocam. Emeğiniz için çok teşekkür ederiz. Benim bir sorum olacaktı. Yerel Wifi yada bluetooth kullanarak nasıl multiplayer oyun yapabiliriz?

  21. Yiğit dedi ki:

    hocam merhaba, benim bir butonum var, bu butona bastıkça reklam çıksın istiyorum, şuan onu yaptım çıkıyor ama reklam hemen çıkmıyor ,bazen hiç çıkmıyor, bazen geç çıkıyor. bunun hemen çıkmasını nasıl sağlayabilirim? veya çıkmadıysa gibi bir fonksiyon nasıl yazabilirim? örn. if(reklam çıkmadıysa bunları yap).. gibi

  22. Yiğit dedi ki:

    teşekkürler hocam deneyeceğim. bir sorum var, şimdi reklamlar gözüküyor, gerçek reklamlar 1-2 kere tıkladım ama unity id hesabında henüz bir para girişi görünmüyor. biraz geç mi gelir acaba

  23. Yiğit dedi ki:

    Tüm test modlarını kapattım ama hala reklam çıkmıyor hocam. Dediklerinizi yaptım ama unity ekranında bunlar çıkıyor
    https://hizliresim.com/HwaZ8u

    cihazda ise bunlar da çıkmıyor.

    • yasirkula dedi ki:

      Logcat ile bir hata alıp almadığınıza bakın, büyük olasılıkla bir hata mesajı vardır: https://yasirkula.com/2015/10/13/unity-android-oyunlarinizi-debug-etmek/. Ya da kodunuzda sıkıntı olabilir. Örnek kodları denediğinizde düzgün çalışıyor mu? Game ID ve Placement ID değerlerini girmeyi unutmadınız değil mi?

      • Yiğit dedi ki:

        hocam şimdi çalıştı. bir şey soracağım, benim farklı bir kod içinde player ölme fonksiyonum var. ben her öldüğünde değil ama 2 veya 3 kere öldükten sonra interstial reklam çıksın istiyorum. bunu nasıl yapabilirim?

      • yasirkula dedi ki:

        private static int olmeSayisi; değişkeniniz olur ve her öldüğünüzde if( (++olmeSayisi) % 3 == 0 ) ise reklam gösterirsiniz.

  24. Yiğit dedi ki:

    hocam şuan ekledim banner ve instertial reklam ama reklamlar çıkmıyor, onun yerine bannerda this would be your banner ve diğerinde de beyaz ekran çıkıyor. başka yapmam gereken bir şey var mı çıkmaları için

    • yasirkula dedi ki:

      Reklamları Android cihazda test ediyorsanız ve test reklamları kapalıysa, gerçek reklam görmeniz lazım.

      • Yiğit dedi ki:

        Anroid tablette test ediyorum, test reklamlarını kapatmak için cameraya eklediğimiz booleanların tik işaretini kaldırmamız yeterli di mi?

      • yasirkula dedi ki:

        Evet Test Modu’nun tikini kaldırmanız yeterli, tabi yazıda bahsettiğim diğer test modlarından birini açtıysanız, onu da kapatmanız lazım.

  25. Yasir dedi ki:

    Hocam IUnityAdsListener’ı implement etmeme rağmen tanımıyor. Neden olabilir?

Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s

This site uses Akismet to reduce spam. Learn how your comment data is processed.