이 가이드에서는 네이티브 광고 부가기능을 사용하여 Unity 앱에서 AdMob 네이티브 광고를 구현하는 방법과 구현 시 고려해야 하는 중요한 사항을 설명합니다.
네이티브 광고는 게재되는 사용자 환경의 형식 및 기능에 맞춰 자동으로 최적화됩니다. 또한 게재되는 앱의 디자인과 자연스럽게 조화를 이루도록 표시됩니다. AdMob의 네이티브 광고 형식을 사용하면 콘텐츠와 완벽하게 어우러지는 광고를 렌더링할 수 있습니다. 이 기술을 통해 Unity 앱에서 네이티브 코드를 최대한 활용하는 맞춤 렌더링을 구현할 수 있습니다.
네이티브 광고는 앱을 만들 때 사용한 것과 같은 유형의 GameObjects
를 통해 표시되며, 게재되는 사용자 환경의 시각적 디자인과 어울리는 형식으로 표시되도록 설정할 수 있습니다. 네이티브 광고가 로드되면 애셋이 포함된 네이티브 객체가 앱으로 전달되고 (SDK가 아닌) Unity 앱이 이를 표시합니다.
기본 요건
네이티브 광고 형식 로드
네이티브 광고는 AdLoader
클래스를 통해 로드되며 이 클래스에는 생성 중에 맞춤설정할 수 있는 자체 AdLoader.Builder
클래스가 포함되어 있습니다. ForNativeAd()
메서드는 네이티브 광고를 처리하도록 AdLoader를 구성합니다.
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
}
AdLoader 광고 이벤트 등록
네이티브 광고가 정상적으로 로드되거나 로드에 실패할 때 알림을 받으려면 아래 이벤트의 AdLoader
클래스에 대리자를 추가하세요.
OnNativeAdLoaded
네이티브 광고가 정상적으로 로드되었을 때 호출됩니다. 로드된 광고에 액세스하려면 이 이벤트에 대한 대리자가 있어야 합니다.
OnAdFailedToLoad
네이티브 광고가 로드에 실패할 때 호출됩니다.
광고 로드
AdLoader
빌드를 완료한 후 LoadAd()
메서드를 호출하여 광고를 요청합니다.
adLoader.LoadAd(new AdRequest.Builder().Build());
동시에 광고 요청
아래의 코드 스니펫은 네이티브 광고를 요청하도록 구성되고, 광고 로드 성공 및 실패에 대한 대리자를 설정하고, 광고 요청을 하는 AdLoader
를 빌드하는 방법을 보여줍니다.
private void RequestNativeAd() {
AdLoader adLoader = new AdLoader.Builder(INSERT_AD_UNIT_HERE)
.ForNativeAd()
.Build();
adLoader.OnNativeAdLoaded += this.HandleNativeAdLoaded;
adLoader.OnAdFailedToLoad += this.HandleAdFailedToLoad;
adLoader.LoadAd(new AdRequest.Builder().Build());
}
실패한 광고 로드 처리
OnAdFailedToLoad
이벤트는 EventHandle<AdFailedToLoadEventArgs>
유형입니다.
이 이벤트의 광고 로드가 실패한 이유를 파싱하는 방법은 다음과 같습니다.
private void RequestNativeAd() {
...
adLoader.OnAdFailedToLoad += this.HandleNativeAdFailedToLoad;
}
private void HandleNativeAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) {
Debug.Log("Native ad failed to load: " + args.Message);
}
네이티브 광고 표시
네이티브 광고가 로드되면 해당 광고 형식의 광고 이벤트가 호출됩니다. 그런 다음 앱이 광고를 표시해야 하는데, 즉시 표시할 필요는 없습니다.
광고 로드 처리
OnNativeAdLoaded
이벤트는 EventHandler<NativeAdEventArgs>
유형입니다. NativeAd
객체에 캡슐화된 광고는 아래와 같이 NativeAdEventArgs
에서 가져올 수 있습니다.
private NativeAd nativeAd;
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
}
네이티브 광고 애셋 가져오기
광고가 로드되면 아래에 표시된 것처럼 애셋에 액세스할 수 있습니다. 그래픽 애셋은 Texture2D
객체로 반환되며, 텍스트 애셋은 string
객체로 반환됩니다.
private bool nativeAdLoaded;
private NativeAd nativeAd;
void Update() {
...
if (this.nativeAdLoaded) {
this.nativeAdLoaded = false;
// Get Texture2D for the icon asset of native ad.
Texture2D iconTexture = this.nativeAd.GetIconTexture();
// Get string for headline asset of native ad.
string headline = this.nativeAd.GetHeadlineText();
}
}
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
this.nativeAdLoaded = true;
}
광고 애셋은 Unity 스크립트의 Update()
메서드 등 메인 스레드를 통해서만 액세스해야 합니다. 또한 다음 애셋은 없을 수 있으니 광고 게재 전에 반드시 확인하세요.
GetStarRating()
GetStore()
GetPrice()
GetAdvertiser()
GetIconTexture()
AdChoices 확장 소재
AdChoices 광고 애셋은 네이티브 광고에 필수로 표시해야 합니다. 또한 AdChoices 광고 애셋이 눈에 잘 띄도록 적절한 배경색과 이미지를 선택해야 합니다.
광고 확장 소재에 대한 GameObjects 등록
광고 애셋이 Unity 앱에 표시되도록 하려면 GameObject
를 등록해야 합니다. 등록에 성공하면 GameObject
를 등록하는 데 사용된 메서드가 bool
을 반환합니다. List<GameObject>
의 경우 메서드는 성공적으로 등록된 GameObject
수를 나타내는 int
을 반환합니다.
광고 애셋 등록이 정상적으로 이루어지지 않으면 해당 네이티브 광고의 노출 및 클릭이 인식되지 않습니다.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register the icon ad asset.
}
광고 애셋에 대해 등록된 GameObject
에 볼록 Collider 구성요소가 있어야 하며 이 요소는 GameObject
의 크기 및 모양을 나타냅니다. 광고 애셋에 등록된 GameObject
객체가 Collider
구성요소를 포함하지 않거나 잘못 구성된 경우 네이티브 광고가 올바르게 작동하지 않습니다.
아래의 코드 스니펫에서는 BoxCollider
가 GameObject
에 추가되었으며, 여기에서 TextMesh
를 이용해 네이티브 광고의 제목 광고 애셋을 표시합니다. BoxCollider
가 GameObject
에 연결되면 이 객체가 TextMesh
구성요소의 텍스트를 수용하도록 자동으로 확장됩니다.
// Create GameObject that will display the headline ad asset.
GameObject headline = new GameObject();
headline.AddComponent<TextMesh>();
headline.GetComponent<TextMesh>().characterSize = 0.5 f;
headline.GetComponent<TextMesh>().anchor = TextAnchor.MiddleCenter;
headline.GetComponent<TextMesh>().color = Color.black;
// Get string of the headline asset.
string headlineText = this.nativeAd.GetHeadlineText();
headline.GetComponent<TextMesh>().text = headlineText;
// Add box collider to the GameObject which will automatically scale.
headline.AddComponent<BoxCollider>();
데모
다음 코드에는 정상적으로 로드된 네이티브 광고의 아이콘 애셋을 가져오고, Quad
의 텍스처를 설정하여 아이콘 광고 애셋을 표시하며, 애셋을 표시할 GameObject
를 등록하는 방법이 나와 있습니다. 이와 같이 광고 애셋을 가져와서 네이티브 광고 클래스에 등록하는 과정을 앱이 표시하는 애셋마다 반복해서 진행해야 합니다.
private GameObject icon;
private bool nativeAdLoaded;
private NativeAd nativeAd;
...
void Update() {
...
if (this.nativeAdLoaded) {
this.nativeAdLoaded = false;
// Get Texture2D for icon asset of native ad.
Texture2D iconTexture = this.nativeAd.GetIconTexture();
icon = GameObject.CreatePrimitive(PrimitiveType.Quad);
icon.transform.position = new Vector3(1, 1, 1);
icon.transform.localScale = new Vector3(1, 1, 1);
icon.GetComponent<Renderer>().material.mainTexture = iconTexture;
// Register GameObject that will display icon asset of native ad.
if (!this.nativeAd.RegisterIconImageGameObject(icon))
{
// Handle failure to register ad asset.
}
}
}
...
private void HandleNativeAdLoaded(object sender, NativeAdEventArgs args) {
Debug.Log("Native ad loaded.");
this.nativeAd = args.nativeAd;
this.nativeAdLoaded = true;
}