Özel etkinlikler, AdMob uyumlulaştırmasını kullanan yayıncıların desteklenen reklam ağlarından biri olmayan bir üçüncü taraf reklam ağı için şelale uyumlulaştırması eklemesine olanak tanır. Bu kılavuzda, Android ve iOS için oluşturulmuş mevcut bir özel etkinliğin Unity projesinde nasıl kullanılacağı açıklanmaktadır.
Ön koşullar
Başlayın bölümünü tamamlayın. Unity uygulamanıza Google Mobil Reklamlar Unity eklentisi daha önce aktarılmış olmalıdır.
Android ve iOS için önceden oluşturulmuş özel etkinlik bağdaştırıcıları. Özel etkinlik bağdaştırıcıları oluşturmak için Android ve iOS'teki özel etkinlik kılavuzlarımıza bakın.
Özel etkinlik tanımlama
Özel bir etkinliğin uyumlulaştırmaya katılabilmesi için AdMob web arayüzünde tanımlanması gerekir. Hem Android hem de iOS uyumlulaştırma gruplarınıza özel etkinlik ekleyin.
Bu ekran görüntüsünde bazı örnek özel etkinlik ayarları gösterilmektedir:
Parametreler nasıl doldurulur? | |
---|---|
Sınıf adı (iOS) |
iOS için özel etkinliği uygulayan sınıfın adını girin. Sınıfınız Swift'te uygulanıyorsa sınıf adının önüne uygulama / çerçeve modülünün adını yazmanız gerekir (örneğin, Projenizde birden fazla hedef varsa veya proje adı hedef adından farklıysa hedef adı zorunludur. Hedef adıyla birlikte şu şekilde görünür: |
Sınıf adı (Android) | Android için Class Name parametresine verdiğiniz değerin, Android için tam nitelikli sınıf adı (örneğin com.google.ads.mediation.sample.customevent.SampleCustomEvent ) olduğundan emin olun.
|
Şirket | Etkinlik için benzersiz bir ad girin. |
Parametre | Özel etkinliğinize bir dize bağımsız değişkeni (ör. reklam birimi kimliği) aktarmak istiyorsanız. |
Özel etkinlik kitaplıklarını içe aktarma
Özel etkinliklerin düzgün çalışması için ek kitaplıkların dahil edilmesi gerekebilir. Örneğin, aşağıdaki kitaplıkları eklemeniz gerekebilir:
- Android üçüncü taraf SDK'sı
- Android üçüncü taraf özel etkinliği
- iOS üçüncü taraf reklam SDK'sı
- iOS üçüncü taraf özel etkinliği
Kitaplık türleri
Android veya iOS kodunu Unity projesine aktarmanın birden fazla yolu vardır:
- Unity için Harici Bağımlılık Yöneticisi'ni kullanarak önceden oluşturulmuş Android veya iOS yapılarını içe aktarma
- AAR eklentilerini ve Android kitaplıklarını içe aktarma
- Java ve Kotlin kaynak dosyalarını içe aktarma
- iOS kaynak dosyalarını ve statik kitaplıkları içe aktarma
Kullandığınız kitaplıkların paketlenme şekline bağlı olarak, her kitaplık için farklı bir içe aktarma stratejisine ihtiyacınız olabilir. Her seçenek daha sonra ayrıntılı olarak ele alınacaktır.
(Önerilir) Önceden oluşturulmuş Android veya iOS yapılarını içe aktarma
External Dependency Manager for Unity'yi kullanarak Maven veya CocoaPods'dan önceden oluşturulmuş yapıtları içe aktarın. Bu eklenti, GoogleMobileAds eklentisine dahildir.
Mevcut yapıları içe aktarmak için içe aktarma işlemlerinizi tanımlayan bir yapılandırma dosyası oluşturun. Dosya adı ve yoluyla ilgili aşağıdaki şartlar geçerlidir:
- Dosya,
/Editor/
klasöründe bulunmalıdır. - Dosya adı
Dependencies.xml
ile bitmelidir.
Örneğin, AdPub
adlı varsayımsal bir reklam ağı için özel etkinlik bağdaştırıcılarını içe aktarmak üzere şu dosyayı oluşturun:
Assets/AdPub/Editor/AdPubDependencies.xml
Ardından, AdPubDependencies.xml
dosyasında bağımlılıklarınızı tanımlayın. İçe aktarmaları yapılandırma kurallarını External Dependency Manager for Unity Getting Started (External Dependency Manager for Unity'yi Kullanmaya Başlama) başlıklı makalede bulabilirsiniz. Aşağıdaki kod snippet'inde, varsayımsal bir "AdPub" reklam ağı için Android ve iOS SDK'sı ile özel etkinlik kitaplıkları yer almaktadır.
Assets/AdPub/Editor/AdPubDependencies.xml
<dependencies>
<androidPackages>
<androidPackage spec="com.adpub.android:adpub-sdk:1.0.0" />
<androidPackage spec="com.adpub.android:adpub-custom-event:1.0.0">
<repositories>
<repository>https://repo.maven.apache.org/maven2/</repository>
<repository>https://dl.google.com/dl/android/maven2/</repository>
</repositories>
</androidPackage>
</androidPackages>
<iosPods>
<iosPod name="AdPubSDK" version="1.0" />
<iosPod name="AdPubCustomEvent" version="1.0">
<sources>
<source>https://github.com/CocoaPods/Specs</source>
</sources>
</iosPod>
</iosPods>
</dependencies>
Özel etkinlik yapınızda gerekli reklam ağı SDK'sına zaten bağımlılık varsa SDK bağımlılığını açıkça tanımlamanız gerekmez: Örnek
Harici Bağımlılık Yöneticisi, yapılandırma değişikliklerini otomatik olarak izler ve bağımlılıkları giderir. Aşağıdaki menü komutuyla manuel çözünürlük de uygulayabilirsiniz:
Assets > External Dependency Manager > Android Resolver > Force Resolve
AAR eklentilerini ve Android kitaplıklarını içe aktarma
Unity, *.aar
dosyalarının ve Android kitaplık projelerinin içe aktarılmasını destekler. Android özel etkinliğiniz bu şekilde paketlenmişse bu dosyaları Unity projenize nasıl ekleyeceğinizle ilgili talimatlar için AAR eklentileri ve Android kitaplıkları başlıklı makaleyi inceleyin.
Java ve Kotlin kaynak dosyalarını içe aktarma
Unity 2018.2 veya sonraki sürümlerde, Android özel etkinlik kodunuz derlenmemiş *.java
veya *.kt
dosyalarından oluşuyorsa Java veya Kotlin kaynak dosyalarını eklenti olarak kullanabilirsiniz.
iOS kaynak dosyalarını ve statik kitaplıkları içe aktarma
Unity, *.framework
yapılarını, *.h
ve *.m
kaynak dosyalarını destekler. iOS yapılarının ve kaynak dosyalarının içe aktarılması Unity'nin yerel eklentilerle ilgili kılavuzunda açıklanmaktadır.
Reklam inceleyici ile özel etkinlikleri test etme
Reklam inceleyici, özel etkinliklerin uygulamanıza doğru şekilde aktarılıp aktarılmadığını test etmek için kullanılabilir. Reklam denetleyici yalnızca hareketlerle veya programatik olarak minimum düzeyde kodla açılabilir.
(İsteğe bağlı) Üçüncü taraf SDK'sının yerel yöntemlerini C# komut dosyalarından çağırma
Üçüncü taraf reklam ağı SDK'ları, Android veya iOS yöntemlerinin doğrudan çağrılmasını gerektiren özel koşullara sahip olabilir. Bu yöntemleri doğrudan çağırma süreci aşağıdaki gibidir:
- Platform istemcileri için ortak bir arayüz tanımlama
- Desteklenmeyen platformlar için varsayılan bir istemci uygulama
- Android yöntemlerini çağırmak için bir Android istemcisi uygulayın.
- iOS yöntemlerini çağırmak için bir iOS istemcisi uygulayın
- iOS ve Android istemcileri arasında koşullu olarak geçiş yapmak için istemci fabrikası uygulayın
- Tüm üçüncü taraf reklam ağı SDK işlevlerine erişmek için bir API tanımlayın.
Aşağıdaki bölümde, bu adımların Android ve iOS'teki yöntemleri çağırabilen bir C# API'sinde "AdPub" adlı varsayımsal bir reklam ağı için nasıl uygulandığı gösterilmektedir:
Android
package com.adpub.android;
public class AdPubSdk
{
public static void setHasUserConsent(boolean hasUserConsent);
}
iOS
@interface AdPubSdk : NSObject
+ (void)setHasUserConsent:(BOOL)hasUserConsent;
@end
Platform istemcileri için ortak bir arayüz tanımlama
Temel Android ve iOS API'sini temsil eden bir yöntemle IAdPubClient
arayüzü oluşturun.
Assets/AdPub/Common/IAdPubClient.cs
namespace AdPub.Common
{
public interface IAdPubClient
{
///<summary>
/// Sets a flag indicating if the app has user consent for advertisement.
///</summary>
void SetHasUserConsent(bool hasUserConsent);
}
}
Desteklenmeyen platformlar için varsayılan bir istemci tanımlama
Yalnızca yöntem adını kaydeden IAdPubClient
arayüzünü uygulayan bir DefaultClient
sınıfı oluşturun. Bu uygulamayı Unity düzenleyicide ve Android veya iOS dışındaki tüm platformlarda kullanın.
Assets/AdPub/Common/DefaultClient.cs
namespace AdPub.Common
{
public class DefaultClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
Debug.Log("SetHasUserConsent was called.");
}
}
}
iOS platformu istemcisi uygulama
iOS'te IAdPubClient
arayüzünü uygulayan bir iOSAdPubClient
sınıfı oluşturun. Bu uygulama, iOS AdPubSdk
sınıfındaki setHasUserConsent()
yöntemini çağırmak için InteropServices'i kullanır.
Assets/AdPub/Platforms/iOS/iOSAdPubClient.cs
// Wrap this class in a conditional operator to make sure it only runs on iOS.
#if UNITY_IOS
// Reference InteropServices to include the DLLImportAttribute type.
using System.Runtime.InteropServices;
using AdPub.Common;
namespace AdPub.Platforms.Android
{
public class iOSAdPubClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
GADUAdPubSetHasUserConsent(hasUserConsent);
}
[DllImport("__Internal")]
internal static extern void GADUAdPubSetHasUserConsent(bool hasUserConsent);
}
}
#endif
Ardından, yukarıda tanımlanan GADUAdPubSetHasUserConsent()
yöntemini uygulayın. Unity'den gelen yöntem çağrısını işlemek için C
yöntemiyle AdPubClientBridge.m
oluşturun ve AdPubSDK
'ı çağırın.GADUAdPubSetHasUserConsent()
AdPubClientBridge
, bir iOS kaynak dosyasıdır ve Unity'nin yerel eklentilerle ilgili kılavuzunda açıklandığı gibi Plugins/iOS
klasörüne yerleştirilmelidir.
Assets/AdPub/Plugins/iOS/AdPubClientBridge.m
#import <AdPubSDK/AdPubSDK.h>
void GADUAdPubSetHasUserConsent(BOOL hasUserConsent) {
[AdPubSDK setHasUserConsent:hasUserConsent];
}
Android platformu istemcisi uygulama
Android'de IAdPubClient
arayüzünü uygulayan bir AndroidAdPubCient
sınıfı oluşturun. Bu uygulamada, Android statik yöntemini setHasUserConsent()
çağırmak için Android Java yardımcı sınıfları kullanılır.
Android Java yardımcı sınıfları yalnızca Android çalışma zamanında kullanılabilir. Bu nedenle, kod snippet'inde gösterildiği gibi sınıfı sarmak için UNITY_ANDROID
derleyici yönergesini kullanarak derleme hatalarını önleyebilirsiniz. Alternatif olarak, bu sorunu çözmek için Unity 2017.4 ve sonraki sürümlerde Assembly definitions'ı kullanabilirsiniz.
Assets/AdPub/Platforms/Android/AndroidAdPubClient.cs
// Wrap this class in a conditional operator to make sure it only runs on Android.
#if UNITY_ANDROID
// Reference the UnityEngine namespace which contains the JNI Helper classes.
using UnityEngine;
using AdPub.Common;
namespace AdPub.Platforms.Android
{
public class AndroidAdPubClient : IAdPubClient
{
public void SetHasUserConsent(bool hasUserConsent)
{
// Make a reference to the com.adpub.AdPubSDK.
AndroidJavaClass adPubSdk = new AndroidJavaClass("com.adpub.AdPubSdk");
// Call the native setHasUserConsent method of com.adpub.AdPubSDK.
adPubSdk.CallStatic("setHasUserConsent", hasUserConsent);
}
}
}
#endif
Doğru istemci uygulamasını döndürmek için bir fabrika yöntemi oluşturun
Artık her platform için istemci uygulamalarınız olduğuna göre, çalışma zamanı platformuna bağlı olarak AdPubClientFactory
arayüzünün doğru uygulamasını döndürmek için bir AdPubClientFactory
sınıfı oluşturun.IAdPubClient
Bu sınıf, doğru IAdPubClient
istemciyi döndürmek için derleyici yönergelerini kullanır.
Assets/AdPub/Common/AdPubClientFactory.cs
namespace AdPub.Common
{
public class AdPubClientFactory
{
// Return the correct platform client.
public static IAdPubClient GetClient()
{
#if !UNITY_EDITOR && UNITY_ANDROID
return new AdPub.Platforms.Android.AndroidAdPubClient();
#elif !UNITY_EDITOR && UNITY_IOS
return new AdPub.Platforms.iOS.iOSAdPubClient();
#else
// Returned for the Unity Editor and unsupported platforms.
return new DefaultClient();
#endif
}
}
}
Her arayüz yöntemi için herkese açık bir API tanımlayın
AdPubApi
arayüzünüzdeki her istemci yöntemi için yöntem çağrıları içeren bir AdPubApi
sınıfı oluşturun.IAdPubClient
Bu sınıf, AdPubClientFactory
kullanarak IAdPubClient
örneğini alır ve temel SDK işlevleri için bu istemciyi çağırır.
Assets/AdPub/AdPubApi.cs
using AdPub.Common;
namespace AdPub
{
public class AdPubApi
{
private static readonly IAdPubClient client = GetAdPubClient();
// Returns the correct client for the current runtime platform.
private static IAdPubClient GetAdPubClient()
{
return AdPubClientFactory.GetClient();
}
// Sets the user consent using the underlying SDK functionality.
public static void SetHasUserConsent(bool hasUserConsent)
{
client.SetHasUserConsent(hasUserConsent);
}
}
}
Yeni tanımladığınız API'yi çağırma
Yukarıda tanımlanan API'yi şu şekilde çağırabilirsiniz:
Assets/Scripts/AdPubController.cs
using UnityEngine;
using AdPub;
public class AdPubController : MonoBehaviour
{
// TODO: Get consent from the user and update this userConsent field.
public bool userConsent;
// Called on startup of the GameObject it's assigned to.
public void Start()
{
// Pass the user consent to AdPub.
AdPubApi.SetHasUserConsent(userConsent);
}
}
Ek üçüncü taraf reklam ağı bağdaştırıcısı örnekleri
iOS ve Android yöntemlerine yapılan çağrıları sarmalamak için C# API'lerini uygulayan üçüncü taraf uyumlulaştırma bağdaştırıcılarına dair ek örnekler için Google Mobile Ads Unity eklentisi Github deposu'nu ziyaret edin.