GÜNCELLEME (10.08.2022): Yazı Unity Ads’in en son sürümüne uygun olarak güncellendi.
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.unity.com/ads/UnityDeveloperIntegrations.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
Reklamlarımızı oluşturmadan önce bir proje oluşturmalıyız. Bunun için https://operate.dashboard.unity3d.com/ adresine gidin, soldan Projects sekmesine geçiş yapın ve Create 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” 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 Create project butonuna tıklayın.
Reklam oluşturmaya başlamadan önce, Unity Ads’i nasıl kullanacağımız ile ilgili basit bir form doldurmamız gerekiyor. Bunun için projenizin ana sayfasında sol tarafta yer alan menüden Monetization-Get started yolunu izleyin. İlk olarak, başka bir projenin reklam konfigürasyonunu bu projeye kopyalamak mı yoksa bu proje için sıfırdan bir reklam konfigürasyonu oluşturmak mı istiyoruz onu belirtmemiz gerekiyor. Yeni bir konfigürasyon oluşturmak için “No, I want to start fresh” seçeneğini seçebilirsiniz. İkinci soru, projemizde ne tarz bir mediation kullanmayı düşündüğümüzle ilgili. Eğer mediation kullanmayacaksanız (sadece Unity Ads reklamları kullanacak, AdMob vb. ikinci bir reklam servisi kullanmayacaksanız) “I don’t plan to use Mediation, only Unity Ads” seçeneğini seçin. Aksi taktirde, mediation’ı Unity Ads tarafından yönetmek istiyorsanız “Unity Mediation” seçeneğini seçin, yoksa “Third Party Mediation” seçeneğini seçip mediation’ı hangi reklam servisi tarafından yönetmek istiyorsanız onu seçin. Bu dersi mediation kullanmadan yazıyorum. Son olarak da, oyununuzu halihazırda Google Play veya App Store’a publish ettiyseniz oyununuzun store link(ler)ini ilgili alanlara yapıştırın, yoksa “My app is not live in an app store yet” seçeneğini seçin (store linklerini daha sonra ekleyebilirsiniz) ve Add project butonuna tıklayarak formu tamamlayın.
Reklam oluşturmak için projenizin ana sayfasında sol tarafta yer alan menüden Monetization-Ad Units yolunu izleyin ve Add Ad Unit butonuna tıklayın. “Ad Unit Name“e reklam için bir isim girin (boşluk ve Türkçe karakter kullanmayın), “Platform“dan Android veya iOS’u seçin ve eğer banner reklam oluşturuyorsanız Banner, interstitial reklam oluşturuyorsanız Interstitial, yoksa Rewarded seçeneğini seçip Create butonuna tıklayarak işlemi sonlandırın:

Yeni oluşturduğunuz projelerde Unity Ads otomatik olarak her platform için bir banner, bir interstitial ve bir de rewarded reklam oluşturur, dilerseniz direkt onları da kullanabilirsiniz.
Burada benim önerim, interstitial reklamlara 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-Project Overview-Ad Controls yolunu izleyin. Buradan Android (Google Play Store) ve iOS (Apple App Store) için farklı filtreler oluşturabilirsiniz. Reklamlarınıza 2 çeşit filtre uygulayabilirsiniz:
- CATEGORY FILTERS: 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 SETTINGS: 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 (Ad Unit ID): Monetization-Ad Units ekranından reklama tıklayarak, gelen sayfadan öğrenebilirsiniz (örneğin Android_BannerReklam veya Rewarded_Android)
- Game ID: sol taraftan Monetization-Project Overview-Settings sekmesine geçiş yapınca, Game IDs başlığı altında “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
Window-Package Manager yolunu izleyip Advertisement paketinin son sürümünü seçin ve Update (veya Install) butonu ile bu sürümü yükleyin:

Reklamları Göstermek
a) Banner Reklamlar
ReklamBanner.cs adında yeni bir C# script oluşturup bunu kameraya component olarak verin:
using UnityEngine;
using UnityEngine.Advertisements;
public class ReklamBanner : MonoBehaviour, IUnityAdsInitializationListener
{
public string Android_GameID = "ANDROID GAME ID";
public string iOS_GameID = "iOS GAME ID";
public string GameID { get { return ( Application.platform == RuntimePlatform.IPhonePlayer ) ? iOS_GameID : Android_GameID; } }
public string Android_BannerPlacementID = "Banner_Android";
public string iOS_BannerPlacementID = "Banner_iOS";
public string BannerPlacementID { get { return ( Application.platform == RuntimePlatform.IPhonePlayer ) ? iOS_BannerPlacementID : Android_BannerPlacementID; } }
public bool TestModu = true;
private bool bannerReklamHazir;
private void Start()
{
// Unity Ads'i kullanıma hazır hale getir
Advertisement.Initialize( GameID, TestModu, true, this ); // Advertisement package'ının 4.0.0 veya üzeri bir sürümünü kullanırken bu satır hata verirse, 3. sıradaki true parametresini silin
}
// Unity Ads başarılı bir şekilde Initialize edildi
public void OnInitializationComplete()
{
BannerReklamiYukle();
}
// Unity Ads Initialize edilirken bir hata oluştu
public void OnInitializationFailed( UnityAdsInitializationError error, string message )
{
Debug.Log( "Unity Ads Initialize edilemedi: " + error + " - " + message );
}
private void BannerReklamiYukle()
{
// Banner reklamın yüklenmesiyle alakalı event'leri belirle
BannerLoadOptions options = new BannerLoadOptions
{
loadCallback = OnBannerLoaded, // Reklam yüklendiğinde çağrılacak fonksiyon
errorCallback = OnBannerError // Reklam yüklenemediğinde çağrılacak fonksiyon
};
// Banner reklamı sunucudan indirmeye başla
Advertisement.Banner.Load( BannerPlacementID, options );
}
// Banner reklam başarılı bir şekilde yüklendi
private void OnBannerLoaded()
{
bannerReklamHazir = true;
}
// Banner reklam yüklenirken bir hata oluştu
private void OnBannerError( string message )
{
Debug.Log( "Banner reklam yüklenemedi: " + message );
// İsterseniz burada banner reklamı tekrar yüklemeyi deneyebilirsiniz
//BannerReklamiYukle();
}
// Ekranda test amaçlı "Banner Göster" ve "Banner Gizle" butonları göstermeye yarar, bu fonksiyonu silerseniz butonlar yok olur
private void OnGUI()
{
GUI.enabled = bannerReklamHazir; // Banner reklam gösterime hazır olana kadar bu butonları inaktif bırak
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();
GUI.enabled = true;
}
public void BannerGoster()
{
// Banner reklamın gösterimiyle alakalı event'leri belirle
BannerOptions options = new BannerOptions
{
showCallback = OnBannerShown, // Reklam gösterildi
hideCallback = OnBannerHidden, // Reklam gizlendi
clickCallback = OnBannerClicked // Reklama tıklandı
};
// Banner'ı göster
Advertisement.Banner.Show( BannerPlacementID, options );
}
public void BannerGizle()
{
// Banner'ı gizle
Advertisement.Banner.Hide();
}
// Banner reklam ekranda gösterildi
private void OnBannerShown()
{
}
// Banner reklam ekrandan gizlendi
private void OnBannerHidden()
{
}
// Banner reklama tıklandı
private void OnBannerClicked()
{
}
}
Ardından Inspector’dan Game ID değişkenlerine değer olarak oyununuzun Game ID‘lerini, Banner Placement ID‘lerine değer olarak da banner reklamınızın Android ve iOS için Placement ID‘lerini 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. Bu fonksiyon opsiyonel olarak, IUnityAdsInitializationListener türünde son bir parametre alır (ReklamBanner script’inin bu interface’i implement ettiğine dikkat edin), buraya değer olarak verilen objenin OnInitializationComplete ve OnInitializationFailed fonksiyonları, Initialize fonksiyonunun sonucuna göre sistem tarafından otomatik olarak çağrılır
- OnInitializationComplete fonksiyonunda (Initialize başarılı bir şekilde sonuçlandıysa), BannerReklamiYukle fonksiyonunu çağırıyoruz. O da, Advertisement.Banner.Load fonksiyonunu çağırarak banner reklamın sunucudan indirilmesini sağlıyor. Bu fonksiyon banner reklamın Placement ID‘sini ve BannerLoadOptions türünde bir objeyi parametre olarak alır. BannerLoadOptions, banner’ın sunucudan indirildiği veya indirilemediği durumlarda hangi fonksiyonların çağrılacağını belirler
- Eğer banner başarılı bir şekilde sunucudan indirilirse (OnBannerLoaded), bannerReklamHazir değişkenini true yapıyoruz. Reklamın indirilemediği durumda isterseniz reklamı tekrar indirmeyi deneyebilirsiniz (ben burada 5-10 saniye gibi bir gecikme vermenizi öneririm ki banner reklam çok sık aralıklarla sunucudan indirilmeye çalışılmasın)
- OnGUI fonksiyonu ekranda test amaçlı iki buton gösterir, bu butonlara tıklayınca BannerGoster ve BannerGizle fonksiyonları çağrılır. Bu butonlara sadece bannerReklamHazir değişkeni true olduğunda tıklanabilir
- BannerGoster fonksiyonu, Advertisement.Banner.Show fonksiyonu ile banner reklamı ekranda göstermeye yarar. Bu fonksiyon, banner reklamın Placement ID’sini ve BannerOptions türünde bir objeyi parametre olarak alır. BannerOptions, banner’ın ekranda gösterildiği, ekrandan gizlendiği ve reklama tıklandığı durumlarda hangi fonksiyonların çağrılacağını belirler
- BannerGizle fonksiyonu ise, 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, true, this );
// BOTTOM_CENTER: alt orta kenar
// TOP_CENTER: üst orta kenar
// 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, IUnityAdsInitializationListener, IUnityAdsLoadListener, IUnityAdsShowListener
{
public string Android_GameID = "ANDROID GAME ID";
public string iOS_GameID = "iOS GAME ID";
public string GameID { get { return ( Application.platform == RuntimePlatform.IPhonePlayer ) ? iOS_GameID : Android_GameID; } }
public string Android_InterstitialPlacementID = "Interstitial_Android";
public string iOS_InterstitialPlacementID = "Interstitial_iOS";
public string InterstitialPlacementID { get { return ( Application.platform == RuntimePlatform.IPhonePlayer ) ? iOS_InterstitialPlacementID : Android_InterstitialPlacementID; } }
public bool TestModu = true;
private bool interstitialReklamHazir;
private void Start()
{
// Unity Ads'i kullanıma hazır hale getir
Advertisement.Initialize( GameID, TestModu, true, this ); // Advertisement package'ının 4.0.0 veya üzeri bir sürümünü kullanırken bu satır hata verirse, 3. sıradaki true parametresini silin
}
// Unity Ads başarılı bir şekilde Initialize edildi
public void OnInitializationComplete()
{
InterstitialReklamiYukle();
}
// Unity Ads Initialize edilirken bir hata oluştu
public void OnInitializationFailed( UnityAdsInitializationError error, string message )
{
Debug.Log( "Unity Ads Initialize edilemedi: " + error + " - " + message );
}
private void InterstitialReklamiYukle()
{
// Interstitial reklamı sunucudan indirmeye başla
Advertisement.Load( InterstitialPlacementID, this );
}
// Bir interstitial veya rewarded video reklam başarılı bir şekilde yüklendi
public void OnUnityAdsAdLoaded( string placementId )
{
if( placementId == InterstitialPlacementID ) // Interstitial reklam başarılı bir şekilde yüklendi
interstitialReklamHazir = true;
}
// Bir interstitial veya rewarded video reklam yüklenirken bir hata oluştu
public void OnUnityAdsFailedToLoad( string placementId, UnityAdsLoadError error, string message )
{
Debug.Log( "Reklam yüklenemedi: " + placementId + " - " + error + " - " + message );
if( placementId == InterstitialPlacementID ) // Interstitial reklam yüklenemedi
{
// İsterseniz burada interstitial reklamı tekrar yüklemeyi deneyebilirsiniz
//InterstitialReklamiYukle();
}
}
// Ekranda test amaçlı "Interstitial Göster" butonu göstermeye yarar, bu fonksiyonu silerseniz buton yok olur
private void OnGUI()
{
GUI.enabled = interstitialReklamHazir; // Interstitial reklam gösterime hazır olana kadar bu butonu inaktif bırak
if( GUI.Button( new Rect( Screen.width / 2 - 300, 0, 300, 300 ), "Interstitial Göster" ) )
InterstitialGoster();
GUI.enabled = true;
}
public void InterstitialGoster()
{
Advertisement.Show( InterstitialPlacementID, this );
}
// Bir interstitial veya rewarded video reklam ekranda gösterilmeye başlandı
public void OnUnityAdsShowStart( string placementId )
{
if( placementId == InterstitialPlacementID ) // Interstitial reklamın gösterimine başlandı
interstitialReklamHazir = false; // Bir interstitial reklamı birden çok kez kullanamayacağımız için, artık yeni bir interstitial reklam indirmemiz gerekiyor
#if UNITY_EDITOR
// Eğer OnUnityAdsShowComplete fonksiyonu editörde çalışmıyorsa (reklam SDK'inin bir hatası gibi duruyor), isterseniz bu fonksiyonu burada elle çağırabilirsiniz
//OnUnityAdsShowComplete( placementId, UnityAdsShowCompletionState.COMPLETED );
#endif
}
// Bir interstitial veya rewarded video reklam ekranda gösterilmeye çalışılırken bir hata oluştu
public void OnUnityAdsShowFailure( string placementId, UnityAdsShowError error, string message )
{
Debug.Log( "Reklam gösterilemedi: " + placementId + " - " + error + " - " + message );
if( placementId == InterstitialPlacementID ) // Interstitial reklam ekranda gösterilemedi
{
// İsterseniz burada interstitial reklamı tekrar yüklemeyi deneyebilirsiniz
//InterstitialReklamiYukle();
}
}
// Bir interstitial veya rewarded video reklama tıklandı
public void OnUnityAdsShowClick( string placementId )
{
}
// Bir interstitial veya rewarded video izlendi (sonuna kadar izlenip izlenmediğini anlamak için showCompletionState'in değeri kontrol edilmeli)
public void OnUnityAdsShowComplete( string placementId, UnityAdsShowCompletionState showCompletionState )
{
if( placementId == InterstitialPlacementID ) // Interstitial reklam izlendi
InterstitialReklamiYukle(); // Yeni bir interstitial reklam indir
}
}
Fark ettiyseniz, bu kodun bazı kısımları banner koduna oldukça benziyor. Yine oyunun başında Unity Ads’i Initialize ediyoruz ve Initialize başarılı bir şekilde sonuçlanırsa reklamı yüklemeye başlıyoruz. Ancak bu sefer reklamı yüklerken Advertisement.Load fonksiyonunu kullanıyoruz. Bu fonksiyon reklamın Placement ID‘sini ve IUnityAdsLoadListener türünde bir objeyi parametre olarak alır (ReklamInterstitial script’inin bu interface’i implement ettiğine dikkat edin), buraya değer olarak verilen objenin OnUnityAdsAdLoaded ve OnUnityAdsFailedToLoad fonksiyonları, Load fonksiyonunun sonucuna göre sistem tarafından otomatik olarak çağrılır.
Reklam başarılı bir şekilde yüklendiğinde, reklamı ekranda göstermek için Advertisement.Show fonksiyonunu çağırıyoruz. Bu fonksiyon reklamın Placement ID’sini ve IUnityAdsShowListener türünde bir objeyi parametre olarak alır (ReklamInterstitial script’inin bu interface’i implement ettiğine dikkat edin), buraya değer olarak verilen objenin OnUnityAdsShowStart, OnUnityAdsShowFailure, OnUnityAdsShowClick ve OnUnityAdsShowComplete fonksiyonları, reklamın ekranda gösterimi/gösterilememesi, reklama tıklanım ve reklamın ekranda gösteriminin sonlanması durumlarında sistem tarafından otomatik olarak çağrılır.
Eğer kameraya aynı anda hem ReklamBanner hem de ReklamInterstitial fonksiyonlarını verirseniz, bu script’lerden birisi çalışmaz çünkü her ikisinde de Advertisement.Initialize fonksiyonunu çağırıyoruz ve bu iki script’ten hangisi bu fonksiyonu en son çağırırsa, sadece o script’in OnInitializationComplete fonksiyonu çağrılır, diğer script’inki çağrılmaz (Advertisement.Initialize bu yüzden sadece tek bir yerden çağrılmalı). Eğer oyununuzda banner/interstitial/rewarded reklamlardan birden çoğunu kullanacaksanız, bu reklamları tek bir reklam script’inde birleştirmelisiniz. Üstteki kodların çoğunluğunu kopyala-yapıştır yapabileceğiniz için, bunun zor olmayacağını düşünüyorum.
c) Rewarded Reklamlar
ReklamRewarded adında yeni bir C# script oluşturup bunu kameraya component olarak verin:
using UnityEngine;
using UnityEngine.Advertisements;
public class ReklamRewarded : MonoBehaviour, IUnityAdsInitializationListener, IUnityAdsLoadListener, IUnityAdsShowListener
{
public string Android_GameID = "ANDROID GAME ID";
public string iOS_GameID = "iOS GAME ID";
public string GameID { get { return ( Application.platform == RuntimePlatform.IPhonePlayer ) ? iOS_GameID : Android_GameID; } }
public string Android_RewardedPlacementID = "Rewarded_Android";
public string iOS_RewardedPlacementID = "Rewarded_iOS";
public string RewardedPlacementID { get { return ( Application.platform == RuntimePlatform.IPhonePlayer ) ? iOS_RewardedPlacementID : Android_RewardedPlacementID; } }
public bool TestModu = true;
private int altin = 0;
private bool rewardedReklamHazir;
private void Start()
{
// Unity Ads'i kullanıma hazır hale getir
Advertisement.Initialize( GameID, TestModu, true, this ); // Advertisement package'ının 4.0.0 veya üzeri bir sürümünü kullanırken bu satır hata verirse, 3. sıradaki true parametresini silin
}
// Unity Ads başarılı bir şekilde Initialize edildi
public void OnInitializationComplete()
{
RewardedReklamiYukle();
}
// Unity Ads Initialize edilirken bir hata oluştu
public void OnInitializationFailed( UnityAdsInitializationError error, string message )
{
Debug.Log( "Unity Ads Initialize edilemedi: " + error + " - " + message );
}
private void RewardedReklamiYukle()
{
// Rewarded reklamı sunucudan indirmeye başla
Advertisement.Load( RewardedPlacementID, this );
}
// Bir interstitial veya rewarded video reklam başarılı bir şekilde yüklendi
public void OnUnityAdsAdLoaded( string placementId )
{
if( placementId == RewardedPlacementID ) // Rewarded reklam başarılı bir şekilde yüklendi
rewardedReklamHazir = true;
}
// Bir interstitial veya rewarded video reklam yüklenirken bir hata oluştu
public void OnUnityAdsFailedToLoad( string placementId, UnityAdsLoadError error, string message )
{
Debug.Log( "Reklam yüklenemedi: " + placementId + " - " + error + " - " + message );
if( placementId == RewardedPlacementID ) // Rewarded reklam yüklenemedi
{
// İsterseniz burada rewarded reklamı tekrar yüklemeyi deneyebilirsiniz
//RewardedReklamiYukle();
}
}
// Ekranda test amaçlı "Rewarded Reklam Göster" butonu göstermeye yarar, bu fonksiyonu silerseniz buton yok olur
private void OnGUI()
{
GUI.Box( new Rect( 0, 0, 100, 50 ), "Altın: " + altin ); // Sahip olduğumuz altın sayısını ekrana bastır
GUI.enabled = rewardedReklamHazir; // Rewarded reklam gösterime hazır olana kadar bu butonu inaktif bırak
if( GUI.Button( new Rect( Screen.width / 2, 0, 300, 300 ), "Rewarded Reklam Göster" ) )
RewardedReklamGoster();
GUI.enabled = true;
}
public void RewardedReklamGoster()
{
Advertisement.Show( RewardedPlacementID, this );
}
// Bir interstitial veya rewarded video reklam ekranda gösterilmeye başlandı
public void OnUnityAdsShowStart( string placementId )
{
if( placementId == RewardedPlacementID ) // Rewarded reklamın gösterimine başlandı
rewardedReklamHazir = false; // Bir rewarded reklamı birden çok kez kullanamayacağımız için, artık yeni bir rewarded reklam indirmemiz gerekiyor
#if UNITY_EDITOR
// Eğer OnUnityAdsShowComplete fonksiyonu editörde çalışmıyorsa (reklam SDK'inin bir hatası gibi duruyor), isterseniz bu fonksiyonu burada elle çağırabilirsiniz
//OnUnityAdsShowComplete( placementId, UnityAdsShowCompletionState.COMPLETED );
#endif
}
// Bir interstitial veya rewarded video reklam ekranda gösterilmeye çalışılırken bir hata oluştu
public void OnUnityAdsShowFailure( string placementId, UnityAdsShowError error, string message )
{
Debug.Log( "Reklam gösterilemedi: " + placementId + " - " + error + " - " + message );
if( placementId == RewardedPlacementID ) // Rewarded reklam ekranda gösterilemedi
{
// İsterseniz burada rewarded reklamı tekrar yüklemeyi deneyebilirsiniz
//RewardedReklamiYukle();
}
}
// Bir interstitial veya rewarded video reklama tıklandı
public void OnUnityAdsShowClick( string placementId )
{
}
// Bir interstitial veya rewarded video izlendi (sonuna kadar izlenip izlenmediğini anlamak için showCompletionState'in değeri kontrol edilmeli)
public void OnUnityAdsShowComplete( string placementId, UnityAdsShowCompletionState showCompletionState )
{
if( placementId == RewardedPlacementID ) // Rewarded reklam izlendi
{
if( showCompletionState == UnityAdsShowCompletionState.SKIPPED )
{
// Oyuncu reklamı geçmiş, yani sonuna kadar izlememiştir: oyuncuya ödül verme
}
else if( showCompletionState == UnityAdsShowCompletionState.COMPLETED )
{
// Oyuncu reklamı sonuna kadar izlemiştir: oyuncuyu ödüllendir
altin += 50;
}
else if( showCompletionState == UnityAdsShowCompletionState.UNKNOWN )
{
// Açıkçası bu ne zaman çağrılır bilmiyorum çünkü bunla ilgili bir bilgi sağlanmamış. Oyuncu reklamı sonuna kadar izlememiş gibi varsaymanızı öneririm
}
RewardedReklamiYukle(); // Yeni bir rewarded reklam indir
}
}
}
Kodun temel kısımları, interstitial kodu ile aynı. Fazladan sadece altin isminde bir değişken tutuyoruz ve OnUnityAdsShowComplete fonksiyonunda, rewarded reklam sonuna kadar izlenmişse kullanıcıyı 50 altın ile ödüllendiriyoruz.
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:
- 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
- https://operate.dashboard.unity3d.com/ adresinden projenizi seçtikten sonra, soldan Monetization-Project Overview-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.
- 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 Monetization-ORGANIZATION-Setup-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/blog/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 Monetization-Project Overview-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:
- Android: uygulamanızın store linki https://play.google.com/store/apps/details?id=com.unity3d.genericremote ise, ID’niz com.unity3d.genericremote‘tur
- iOS: uygulamanızın store linki https://apps.apple.com/us/app/unity-remote-4/id871767552 ise, ID’niz 871767552‘dir
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 Monetization-ORGANIZATION-Setup-Organization 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.
Eğer bu aşamayı doğru yapıp yapmadığınızı kontrol etmek isterseniz, Monetization-ORGANIZATION-Setup-Organization Settings sayfasındaki Developer Website alanına web sitenizi girebilirsiniz. Akabinde sistem, girdiğiniz bu adresteki app-ads.txt dosyasını otomatik olarak okuyup size geri bildirimde bulunacak.
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 Monetization-Project Overview-Unity Ads Reporting‘e 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
- Requests: toplam reklam isteği sayısı. Sunucudan istenen bir reklam oyuncuya gösterilmeden (impression) oyuncu oyundan çıksa bile, bu değer 1 artar
- 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!
hocam eline emeğine sağlık sana bir sorum olacak uygulamama banner reklam ekledim telefonda test ederken çalışıyor ama play store yükledim güncelledikten sonra uygulamaya girdim ama reklam gözükmedi bunun sebebi daha yeni olması mı yoksa başka sebepler olabilir mi
Maalesef aklıma bir şey gelmiyor. Logcat’i incelemenizi öneririm: https://yasirkula.com/2015/10/13/unity-android-oyunlarinizi-debug-etmek/
hocam test reklamlarını unity üzerinden görüntüleyebiliyorum ancak mobile üzerinden ne test nede normal görüntüleyebiyorum -.Unity ads sürümüm 4.3.0. Sebebi ne olabilir. Bide dashboardda watterfallar rewardedde kırmızı. Sebebi ve çözümü nedir biliyormusunuz?
Waterfall varsa mediation kullanıyorsunuz diye anlıyorum. Unity Ads’in mediation sistemini kullanmadığım için sorun ne olabilir maalesef bilmiyorum. Reklam göstermeden önce bir Debug.Log koyup, cihazda logcat ile bu log’un gözüküp gözükmediğine ve Unity Ads’in bir hata verip vermediğine bakmanızı öneririm.
hocam mediation u kapattım inşallh şimdi olacak yardımınız için teşekkürler olursa geri dönecem
hocam mobile atınca hiçbir türlü gelmiyor cihazımı test cihazı olarak ekledim ancak yine de olmadı. Sebebini ne olabilir biliyor musunuz?
Logcat’te ne tarz log’lar buldunuz?
hocam logcat de ” Info Unity Error showing Ad Unit Rewarded_Android: NOT_READY – Placement not ready” bu çıkıyor tüm reklamlarda
sebebini anlamıyorum
Örnek kodu (ReklamRewarded) test amaçlı kullandığınızda o düzgün çalışıyor mu?
unityden sıkıntısız çalışıyor test reklamı arayüzü çıkıyor ancak mobilden çalışmıyo ztn cihaz test cihazı olarak kayıtlı
Test modunu açtığınızı anladım. Ben cümlemi biraz yanlış kurdum. Eğer örnek kodu kullanmıyorsanız, test amacıyla örnek kodu kullanıp reklamları bir de öyle test edebilir misiniz demek istedim 😀
Pardon az geç gördüm. Hocam şimdide bu “Error UnityAds com.unity3d.services.core.api.Sdk.logError() (line:1) :: Show invocation failed: Placement not ready” şimdide bu hata veriyor
Örnek kod “rewardedReklamHazir” true olana kadar reklam gösterme butonunu OnGUI fonksiyonunda inaktif hale getirdiği halde, OnGUI’deki buton sizde aktif hale geliyor, ona tıklıyorsunuz ve bu hatayı alıyorsunuz öyle mi?
hocam olmadı yine mobilde etkinleşmedi ongui
Logcat’te “Reklam yüklenemedi” log’u yine aynı hata mesajını veriyorsa, bana bu yaşadığınız sıkıntı mantıklı gelmedi. Test modunda reklam havuzu sorunu da olmaması lazım. İnternette hatayı ilk arattığımda reklam havuzu ile alakalı yorumlar görmüştüm ama test modunda öyle sorun olmamalı diye düşünüyorum. Örnek kodu yazarken Unity’nin kendi dokümantasyonundan epey esinlendim o yüzden kodda da bir sıkıntı olduğunu sanmıyorum. Maalesef aklıma bir şey gelmiyor, isterseniz siz de hatayı bir aratıp farklı bir şeyler bulabilir misiniz bir bakın.
Hocam advertisement 4.2.1 vardı onu 4.3.0 a güncelledim ama çok pişmanım hiç hata yokken hata çıkmaya başladı halbuki her şey mükemmeldi. 4.2.1 e geri de döndüremedim nasıl o sürümü bulabilirim? Veya eğer o sürümü bulamazsam nasıl hatayı düzeltebilirim?
https://www.hizliresim.com/3g5lwh2
https://www.hizliresim.com/51h76xu
https://www.hizliresim.com/1d9vn8o
Evet eski sürümler artık gözükmüyormuş. Proje klasörünüzdeki Packages/packages.json’daki numarayı elle değiştirmeyi deneyin derim.
https://www.hizliresim.com/774z516 Hocam buradaki Build settings de max texture size 1024 yapmıştım önceden bunu no override yaptım ve ÇOK ŞÜKÜR sorunum çözüldü hocam çok mutluyum. Hala 4.3.0 sürümü var bu arada.
Bence dersinize bu notu ekleyin başka kişilerde bu soruna yakalanabilir.
Ama gerçektende çok ilginç değil mi? Texture için yapılan bir ayar buna sebep oldu.
Bu ayarın sebep olması bana da çok mantıklı gelmedi, belki şans eseri bu seçeneği değiştirince düzelmiştir. Belki Unity’i yeniden başlatsanız da sorun düzelecekmiştir.
Hocam burayı güncelleyince https://www.hizliresim.com/gxa77eu hata almaya başladım.error CS0246: The type or namespace name ‘IUnityAdsListener’ could not be found (are you missing a using directive or an assembly reference?) ne yapmam gerek hocam
https://www.hizliresim.com/i5u8zkz
https://www.hizliresim.com/1n0b68m
Gün geçmiyor ki Unity Ads bir başka köklü değişikliğe gitmesin… Evet değişiklik olmuş o yüzden dersi yakında güncelleyeceğim.
uygulamanız, aralarında Advertising ID, Android ID tanımlayıcılarının da bulunduğu ancak bunlarla sınırlı olmayabilecek kişisel veya hassas verileri toplayan com.unity3d.ads:unity-ads adlı SDK’yı veya kitaplıklarınızdan birinin kullandığı bir SDK’yı içeriyor. Kalıcı cihaz tanımlayıcıları, Kullanıcı Verileri Politikası’nda açıklandığı üzere diğer kişisel ve hassas kullanıcı verilerine veya sıfırlanabilir cihaz tanımlayıcılarına bağlanamaz.
1 Ekim 2022 gece yarısından (UTC) itibaren, Kullanıcı Verileri Politikası’na uymayan SDK sürümlerini içeren yeni uygulama sürümlerinin kullanıma sunulması engellenebilir. SDK sağlayıcınızda mevcutsa bu SDK’nın ihlale yol açan kodu içermeyen ve politikaya uygun bir sürümüne geçmeyi ya da bu SDK’yı uygulamanızdan kaldırmayı düşünebilirsiniz.
SDK sağlayıcınızın verdiği bilgilere göre 4.0.1 sürümüne geçmeyi düşünebilirsiniz. Daha fazla bilgi için lütfen SDK sağlayıcıya danışın.
İŞLEM GEREKLİ: Uyumlu olan yeni bir sürüm yükleyin VE uyumlu olmayan sürümü devre dışı bırakın.
Daha fazla ayrıntı için Kullanıcı Verileri politikasını okuyun ve güncellenmiş bir uygulamayı nasıl incelemeye göndereceğinizi buradan öğrenin.
Politikayı incelediyseniz ve kararımızın hatalı olabileceğini düşünüyorsanız lütfen politika destek ekibimizle iletişime geçin.
Hocam developer console de tüm oyunlarımda bu uyarı var 1 ekime kadar süre tanımışlar yoksa kaldıracaklarmış. Yeni gördüm ve şaşırdım. 4.0.1 sürümü ve üstü istiyor illa.
Hocam inşallah dersi 1 ekime kadar yayınlarsınız 😀 Benim içinde sıkıntı olacak yoksa.
Şimdi dersi güncellemeyi bitirdim. Kod kısmını baştan sona güncellemek zorunda kaldım. İlaveten, reklam oluştururken artık Android ve iOS için farklı reklam birimleri oluşturmamız gerekiyormuş bilginiz olsun.
Hocam merhabalar unity ads reklamı çıkıyor 5 saniyelik fakat oyunda zaman başlamış oluyor. Reklam çıktığında zamanı durdurup kapata basınca yani reklam gidince zamanı başlatabilir miyim?
OnUnityAdsDidStart fonksiyonunda Time.timeScale’i 0 yapıp OnUnityAdsDidFinish fonksiyonunda ise 1 yapabilirsiniz.
Merhaba,
Google Play store’da yayınlanmayan farklı mağazalarda (örneğin Amazon Appstore’da) yayınlanan uygulamalarda unity ads reklamları çıkar mı?
Şurada yazdığına göre, reklam çıkar ama kullanıcının cihazında Google Play Store yoksa işe yaramaz ve gelir kazandırmaz: https://support.unity.com/hc/en-us/articles/360000117543-What-platforms-does-Unity-Ads-support-
Hocam oncelikle merhaba 3-4 kez burada sizden yardım istemiştim hepsinede koşmuştunuz hepsinide çözmüştünüz çok teşekkür ederim yardımlarınız için. Aradığım konuyu bulamadım bu yüzden buraya yazıyorum ve bunun için özür dilerim. Hocam ben unity ile uzun süredir çalışıyorum ve şuan yeni bir laptop macbook vb bir cihaz bakıyorum maddi sıkıntım yok ama masaüstü olmamalı. Sizden ricam bana ileri seviye oyunlar yapabilecegim unity ile rahatça çalışabileceğim bilgisayar önermeniz. Şimdiden çok teşekkür ederim dönüşünüzü bekliyorum hoşçakalın.
İlginiz için teşekkür ederim; bu konuda maalesef ben yardımcı olamam. Bilgisayarın bileşenleri ne kadar üst seviye olursa o kadar iyi tabi ki ama “şu ekran kartı en ideali” gibi bir şey maalesef diyemeyeceğim. Yeni bilgisayarınız şimdiden hayırlı olsun.
Yasir bey merhaba, ben alp Store’a yeni bir oyun yükledim. Unity Ads girişini de entegre ettim. Fakat oyunum içerisinde reklam kısımları geldiği zaman herhangi bir video çıkmıyor. Fill rate dolu request alıyor fakat impression yok ve Video gösterilmiyor nedeni nedir?
Maalesef bilmiyorum. Xcode’da oyunu test ederken Xcode konsolundaki log’lara bakmanızı öneririm.
Selamun aleyküm hocam, “Reklam oluşturmak için projenizin ana sayfasında sol tarafta yer alan menüden Monetization-Placements yolunu izleyin” dediniz yazınızda ama ben Monetization ‘a girdiğimde Placements ‘i bulamadım. Ondan önce “get started with a mediator” ‘a mı tıklamam lazım?
Değişen şeyleri dikkate alarak yazının o kısmını güncelledim, teşekkürler.
Tamamdır şimdi oldu. Ad Filters bölümündeki Google Store id yerini boş bırakıyorum. Yardımlarınız için çok çok teşekkür ederim.
Google Store id yerine package name’i yazdım. “Bu Google Play Store Kimlikleri engellensin mi?
Geliriniz düşebilir…” şeklinde bir yazı çıktı. Biz buradaki engelleme işini niye yapıyoruz tam anlayamadım.
Benim kafam dersin “Store ID’lerini Güncellemek” kısmındaki ID’lere gitmiş. Ad Filters’a id eklerseniz, o id’e sahip oyunun reklamları sizin oyununuzda gözükmez. Oraya bir id eklemeniz gerekmiyor yani (engellemek istediğiniz oyun olmadığı sürece).
Hocam 2 tane sorum olacak sizlere.
1-) Monetization Ads –>> ad filters bölümünde Google Store id yerine ne yazmalıyım.
2-) Test modunu unityinin ara yüzünden false yaptım. Scripte bu iki satırı nasıl değiştirmem gerekiyor
public bool TestMode = true;
Advertisement.Initialize(AndroidID, TestMode);
– Google Play’deki id’niz, Bundle Identifier’ınız ile aynıdır
– Script’te de TestMode değişkenini false yapabilirsiniz
https://assetstore.unity.com/packages/add-ons/services/unity-monetization-legacy-please-get-from-package-manager-66123 normalde Monetization paketi vardı oradan yüklerdim. Package Manager denedim orada da bulamadım nereden bulacağım ben Unity Ads paketini? Import etmek için.
Hallettim, Unity ekranının üzerinde bulut işareti vardı oradan projemi eşledim ads ı ON yaptım.
Oradan reklamları açınca gelen SDK eski bir sürüm diye biliyorum. Çok eski bir Unity sürümü kullanmadığınız sürece, SDK’i Package Manager’dan indirmenizi öneririm. Yukarıdaki Packages sekmesinden “Unity Registry”i seçtikten sonra Advertisement‘ı görebilirsiniz. Göremezseniz “Enable Preview Packages” seçeneğini açmayı deneyin.
Hocam merhaba, ben ilk defa unity ads’ı test mode olmadan kullanmak istiyorum. Test mode yi kapadığım zaman untiy editor de görünmüyor + apk çıktısı aldığım zaman ise test mode olarak görünüyor. Mecburen play store de yayınlamam mı gerekli?
Bildiğim kadarıyla test modunun Play Store ile bir alakası yok. Belki biraz vakit geçmesi gerekiyordur değişikliğin oyuna yansıması için. Editörde test mod kapalıyken test ettim mi açıkçası hatırlamıyorum ama editörde reklamların gözükmemesi sorununu hiç yaşamadım, en azından öyle hatırlıyorum.
Merhaba Yasir Bey,
Unity Ads ile reklam verebilmek için ürünü play store üzerinden yayınlamak şart mı ? Yani örneğin kendi çevre grubum için bir uygulama yapmayı düşünüyorum ve bu süreçte reklam olayını öğrenmek istiyorum ancak play store üzerinden uygulama yayımlamayı düşünmüyorum. Reklamların gözükmesi için bir sorun teşkil ediyor mu ?
İyi çalışmalar.
Reklamlarınız gözükür ama reklam tıklamaları şüpheli gözükürse (kasıtlı çok sayıda reklam tıklaması) nolur bilmiyorum.
Merhaba hocam sayenizde birçok hatamı çözebildim. Bunun için çok teşekkür ederim. Ancak şuan bir sorunum var ve yazılımda yeni olduğum için biraz anlamakta zorlanıyorum. Oyunumda birden fazla harcama birimi var ve bunları ayrı ayrı ödül olarak reklamla dağıtıcam ancak bunu kodlara nasıl dökeceğim bilmiyorum. Admobun sitesinde birşeyler anlatsada pek anlamadım, buna benzer bazı youtube videolarında da değinilmeden geçmiş. Yardımcı olursanız çok mutlu olurum.
Bir
public static int odulTuru;
değişkeni oluşturup altın için değerini 0, elmas için ise değerini 1 yapabilirsiniz. Ödül fonksiyonunda da bunun değerine göre ödül verirsiniz.Hocam merhaba windows oyunlar içinde bu kodları kullanabilir miyim?
Unity Ads şu anda sadece Android ve iOS destekliyor.
Merhabalar, Admob ile ilgili olan sayfanızı yorumlara kapatmışsınız o yüzden buraya yazıyorum. Admobda 2-3 ay önce app ads.txt dosyası eklememi istedi ve denedim fakat ekleyememiştim o zaman. O zamanlar admob her gün kontrol edip bulunamadı diyordu. Şimdi ise 2 gün önce sorunu hallettim fakat admob kontrol etmiyor. Nasıl tekrardan kontrol etmesini sağlayabilirim? Herhangi bir fikriniz varsa yazarsanız çok sevinirim.
Şuradaki her şey tamamsa, AdMob’un tekrar kontrol etmesi 7 güne kadar sürebilir diye yorum atmış birisi.
Evet hepsi tamam, 2 oldu bugün. Bekliyeyim o zaman biraz daha. Bir sorum daha olacak, unityde kullanıcılara para kazandıran bir uygulama geliştiriyorum. Sizce admob reklamı mı daha iyi olur yoksa unity reklamı mı?
İki firmadan da bolca para kazanıp bu ikisini sağlıklı bir şekilde kıyaslayabilecek birilerine sormanız lazım. Maalesef ben bunlardan biri değilim. Facebook’taki oyun geliştirici gruplarında sorunuzu sorabilir veya google’da halihazırda var olan tartışmaları arayabilirsiniz.
Hocam merhaba, google admob’a reklam kısıtlaması geldiği için bugün unity ads bağladım, uygulamamı güncelledim fakat 2 saat olmasına rağmen reklam gösterimi olmuyor, bu normal mi? 24 saat bekleyelim mi yoksa bir işlem yapmamız gerekir mi?
Logcat’te hata var mı diye bakmanızı öneririm: https://yasirkula.com/2015/10/13/unity-android-oyunlarinizi-debug-etmek/
Merhaba, AdMob üzerinden Unity Ads eklemeye çalıştık. Bütün adımları doğru bir şekilde uyguladığımızı düşünüyoruz ancak Unity panelinin Placements sayfasındaki reklam biçimleri hep pasif gözüküyor. Bunların aktif olması için ne yapmamız gerekiyor, tam anlayamadık.
Reklam birimleri niye pasif gözükür bilmiyorum. Daha önce başıma geldiğini sanmıyorum.
Hocam merhabalar. Ben banner reklam ekledim test ederken reklam yerini vs gösteriyor ama play store’da yayınladığım da oyunum açılmıyor başlat tuşuna basınca kapanıyor. Sebebi ne olabilir bilginiz var mıdır?
Logcat ile, oyun çöktüğünde aldığınız hata mesajını kontrol etmeniz lazım: https://yasirkula.com/2015/10/13/unity-android-oyunlarinizi-debug-etmek/
Benim oyunumda 2 sahne var dolayısıyla 2 kamera var. 2 kamerayada mı koymam gerekiyor banner reklamı? Unity remote ile deniyorum ve bir sorun yok gayet çalışıyor ama play store a güncelleme attığımda çalıştırmadı ben menüdeki kameraya koymamıştım reklam kodunu ondan mıdır acaba? logcatte de bir şey çıkmadı
Oyun çöküyorsa logcat’te mutlaka çökmenin sebebi yazar. İlgili crash mesajını bulup onu aratmanız lazım. Eğer logcat’te filter kullanıyorsanız, bir de filter kullanmamayı deneyin. Hatanın sebebi, script’in 2 sahnede olup olmaması ile bağlantılı mıdır bilmiyorum.
Warn veriyor çöktüğünde ve uygulamaya giriş yaptığımda. Fakat hatamın çözümünü veya açıklamasını hiçbir yerde bulamadım nasıl kullanacağımı gösteren bir kaynak var mı acaba sizde? Biraz fazla rahatsız ettim kusura bakmayın çok yeniyim bu piyasada
Linkini attığım dersteki Android Logcat paketini kullanınca, oyun çöktüğü zaman hata mesajını Logcat penceresinde görürsünüz.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Advertisements;
public class Reklam : MonoBehaviour
{
public string GameID = “GAME ID”;
public string BannerPlacementID = “BannerReklam”;
public bool testModu = true;
private bool goster = true;
void Start()
{
Advertisement.Initialize(GameID, testModu);
Advertisement.Banner.SetPosition(BannerPosition.TOP_CENTER);
}
void Update()
{
if (goster)
{
if (Advertisement.IsReady(BannerPlacementID))
{
Advertisement.Banner.Show(BannerPlacementID);
goster = false;
}
}
}
}
Reklam kodu bu şekilde, editörde görünüyor ama play store’a gönderdiğim sürümde hiçbir şey görünmüyor. ID’lerin doğrulandığını nasıl anlayabilirim?
ID’leri doğrulamanın bir yolu yok. Logcat’teki hata mesajlarına bakmanı öneririm. Ayrıca if(goster)’in içine girip girmediğini öğrenmek için, oraya bir Debug.Log koyup o log logcat’te gözüküyor mu ona da bakmanı öneririm.
Merhaba. Unity reklamlarını ayrı bir yerde yükleyip sonra gösterme şansım var mı? Mesela sahne başında yükleyip kullanıcı öldüğünde göstermek. Reklamların yüklenmesi uzun sürebiliyor o yüzden böyle bir şey yapmayı düşünüyorum ama bulamadım.
Benim bildiğim kadarıyla Unity Ads reklamları zaten oyunun başında otomatik olarak yüklüyor. Bir reklam izlendikten sonra da otomatik olarak yeni bir reklam yüklüyor. Yani bir şey yapmanıza gerek yok.
Hocam Tekrar Merhabalar.Öncelikle Admob desteğini, Sorunun sizden mi yoksa kullanıcılardan mı oldugunu bilmediğinizi belirttiğiniz icin kapatmışsınız ama Sizin Kodlar Mükemmel Çalışıyor onu belirmek istedim. Konuyla Alakalı değil ama. Ironsource ile ilgili bilginiz var mı ? Ironsource icin Yazdığınız Singleton Scriptiniz Mevcut mu acaba? Veya Yazılması zaman alır mı ?Veya Admob için yazdığınız Singleton Scriptinizi ona uyarlayabilir miyiz? Çok Teşekkürler şimdiden.
Maalesef ironSource konusunda bilgim yok.
Teşekkür ederim. Kolay gelsin.
ö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
İlişkilendirmeden kastınız, AdMob’a Unity Ads mediation eklemek mi? Onunla ilgili tüm bilgileri yine AdMob’un kendi dokümantasyonundan aldım ancak dersi yazdıktan sonra bir değişiklik olmuş mu bilmiyorum: https://developers.google.com/admob/unity/mediation/unity
hayır gerçekten güzel ve doğru yazmışsınız . demek istediğiim şey youtube da falan sadece dediğiniz dokümantasyonu kullanarak yapıyolar . unity kısmına girmiyorlar . unity içinde sadece admob kodunu aktif edip bırakıyorlar .bu şekilde çalışması zormu dediğiniz gibimi yapmalıyız . sadece admob üzerinden yapmamız yanlışmı olacaktır
https://www.youtube.com/watch?v=fGMFHN3gXpY&t=1048s&ab_channel=AwesomeTuts
bu videodaki gibi yaptım genelde kodda test kodu var onu kaldırırsak sistemin tamamlanacağını söylüyorlar .bende birebir yaptım console de show kodunu bile görüyorum fakat apk çıktısı alınca telefonumda test reklamları görünmüyo
Unity Ads mediation’ının bir faydasından aslında AdMob dersimde bahsettim: “Admob’un özellikle rewarded video reklamlarda reklam havuzu zaman zaman yetersiz kalmakta ve fillrate hatası döndürmektedir. Bu tarz bir durumla daha az karşılaşmak için…”: https://yasirkula.com/2014/05/26/unity-3d-android-oyunlariniza-admob-reklamlari-eklemek-resimli-anlatim/. Aynı dersteki “Reklam Gözükmemesi Sorunları” işe yaramıyorsa maalesef sorunu ben de bilmiyorum. AdMob dersimin başında yazdığım gibi, artık AdMob desteğimi tamamen kestim.
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.
Ben sıkıntı görmüyorum. İsterseniz SetPosition’ı Start’ta çağırmayı deneyin. Yoksa kodunuzdaki her satıra bir Debug.Log koyup logcat ile hangi log’ların gözüktüğünü ve reklam kodunuzun hangi hatayı verdiğini kontrol edin: https://yasirkula.com/2015/10/13/unity-android-oyunlarinizi-debug-etmek/
public bool testModu = true;
Advertisement.Initialize( GameID, testModu );
şu test işini hiç yapmadan direk sadece
Advertisement.Initialize( GameID);
yapsam olur mu?
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.
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?
Ödeme bilgilerini girerken vergi formu da dolduruyoruz. Onun dışında açıkçası benim de bilgim yok.
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?
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.
Hocam kusura bakmayın çok soruyorum yani unity ads deki tax kısmında unity bizim vergi işimizi kendisi mi yapıyor?
Kesin bir bilgim yok. Siz bu konuda kesin bilgi bulursanız, burada da paylaşırsanız çok sevinirim.
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?
Elektronik yaptım. Ardından formu Adobe Reader ile doldurup imzalayabiliyoruz.
merhabalar, admob geçiş reklamını nasıl 5 saniye yapabileceğim? (:
Google’a baktım ama sanki AdMob’da bekleme süresini değiştirmek için bir yol yok gibi gözüküyor.
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
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.
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
In-app purchase konusunda benim hiç tecrübem yok ancak benim IAP’e işim düşseydi, ben Unity’nin IAP servisini kullanırdım. Bunun için dokümantasyon linkleri:
– https://docs.unity3d.com/Manual/UnityIAP.html (soldaki menüden sayfalar arası geçiş yapabilirsiniz)
– https://learn.unity.com/tutorial/unity-iap
Hocam selamlar.
Sizin paylaşımlarınız ve https://www.youtube.com/watch?v=OElh7wda4Qc&t=2s
bu videonun eşliğinde her şeyi yaptım. Video reklamını bir butona atadım. butona tıkladığımda sadece sağ üstte close sol üstte de skip ekranı görüyorum ortası bomboş beyaz bir ekran kalıyor. bunun sebebi ne olabilir ? Teşekkür ederim.
Benim daha önce duymadığım bir sıkıntı. Logcat’e bakmanızı ve hatayı google’da aramanızı öneririm.
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
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.
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?
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.
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.
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?
birisi gönderdi tesekur ederim
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.
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?
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.
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
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);
vePlayerPrefs.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ınHer 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.
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.
Unity Ads arayüzündeki Placements sayfasında reklamın ismi sizde de rewardedVideo ise öyle bırakabilirsiniz.
Hocam oyunumda UnityAds seçeneği açıkken build edemiyorum. Kapalaıyken de reklam göstermiyor. Nedeni nedir?
Unity Ads açıkken aldığınız hatayı araştırıp çözmeniz lazım. Daha önce attığınız hatayı alıyorsanız, yeni bir Unity projesinde, başka herhangi bir kaynaktan faydalanmadan sadece şu dersten faydalanarak Unity Ads entegrasyonu yapabilirsiniz: https://yasirkula.com/2020/04/04/unity-3d-oyunlariniza-unity-ads-reklamlari-eklemek-resimli-anlatim/. Ben bu dersteki gibi entegrasyon yaptığımda herhangi bir hata almıyorum.
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ı 🙂
Ben Unity Ads’in sitesinde yazanı kopyaladım ama illa 500 izlenme gerekmeyebilir, belki izlenmelerin gözükmesi biraz vakit alıyor olabilir.
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ı.
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.
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.
Elinize sağlık. İhtiyaç halinde ilerleyen zamanlarda kodunuzu düzenleyip derse ekleyebilirim.
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.
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)];
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
logcat kullanarak bir hata mesajı alıp almadığınızı kontrol etmenizi öneririm: https://yasirkula.com/2015/10/13/unity-android-oyunlarinizi-debug-etmek/
bu arada bu işlemi geröek admob reklamı ile de denedim gösterim olmadı ama istek adlı iki reklam da
kısaca admob reklamlarında test reklamları ; banner görünüyor , geçiş reklamı çıkmıyor bir türlü
Hocam Firebase dersi istiyoruz lütfen
İlginiz için teşekkür ederim. Yakın zamanda bu konuda bir ders planlamıyorum o yüzden boş yere ümit vermek istemem.
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
Kodda comment olarak yazdığım gibi:
OnGUI fonksiyonunu silmediğiniz sürece buton yok olmaz.
banner ve intertitial reklam ekledim. fakat çıkmıyor
ReklamInterstitial’ın InterstitialGoster() fonksiyonunu çağırdığınızdan emin olun. Örneğin level bitiminde bu fonksiyonu çağırabilirsiniz. Bir hata alıp almadığınızı kontrol etmek için şu dersime bakabilirsiniz: https://yasirkula.com/2015/10/13/unity-android-oyunlarinizi-debug-etmek/
İ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?
Tecrübemin olmadığı bir konu maalesef.
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
Derste bahsettiğim IsReady fonksiyonlarını kullanarak reklamın hazır olup olmadığını kontrol edebilirsiniz.
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
Evet geç gelebilir. En kötü durumda, Ads Revenue’de bahsettiğim durum geçerli olabilir. Hesabınızın ban riski yaşamaması için kendi reklamlarınıza test modunda değilken tıklamayın.
Tamam hocam anladım. https://hizliresim.com/KKBJTw şöyle bir ekran çıktı ortaya, sanırım yavaş yavaş veriler geliyor değil mi?
Evet öyle gözüküyor.
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.
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?
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?
private static int olmeSayisi;
değişkeniniz olur ve her öldüğünüzdeif( (++olmeSayisi) % 3 == 0 )
ise reklam gösterirsiniz.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
Reklamları Android cihazda test ediyorsanız ve test reklamları kapalıysa, gerçek reklam görmeniz lazım.
Anroid tablette test ediyorum, test reklamlarını kapatmak için cameraya eklediğimiz booleanların tik işaretini kaldırmamız yeterli di mi?
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.
Hocam IUnityAdsListener’ı implement etmeme rağmen tanımıyor. Neden olabilir?
Advertisement.AddListener fonksiyonunu da çağırmanız lazım. Eğer hâlâ işe yaramıyorsa, logcat’ten bir hata alıp almadığınıza bakmanız lazım: https://docs.unity3d.com/Packages/com.unity.mobile.android-logcat@0.1/manual/index.html