Unity에서 Google AdMob (ex. AdMob)에서 Yandex Mediation으로 마이그레이션

Unity에서 Google AdMob (ex. AdMob) 광고를 Yandex Ads Mediation으로 교체하려면 코드에 다음 변경 사항을 적용하세요.

SDK 통합

라이브러리는 Unity Play Services Resolver 라이브러리를 통해 배포됩니다. 다음 플러그인 리소스를 프로젝트에 추가하세요.

Assets → Import Package → Custom Package를 선택하고 가져온 GoogleMobileAdsPlugin.unitypackage 파일을 찾습니다.

Assets → Import Package → Custom Package를 선택하고 가져온 yandex-mobileads-lite-2.9.0.unitypackage 파일을 찾습니다. mobileads-mediation 디렉터리에서 mobileads-admob-mediation-2.9.0.unitypackage를 가져옵니다.

광고를 로드하기 전에 라이브러리를 초기화하세요.

...
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    public void Start()
    {
        // Google Mobile Ads SDK를 초기화합니다.
        MobileAds.Initialize(initStatus => { });
    }
}
// 필요하지 않음

광고 형식

전면 광고

광고 객체 생성

using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
...

private InterstitialAd interstitial;

private void RequestInterstitial()
{
    #if UNITY_ANDROID
        string adUnitId = "ca-app-pub-3940256099942544/1033173712";
    #elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-3940256099942544/4411468910";
    #else
        string adUnitId = "unexpected_platform";
    #endif

    this.interstitial = new InterstitialAd(adUnitId);
}
using YandexMobileAds;
using YandexMobileAds.Base;
...

private Interstitial interstitial;

private void RequestInterstitial()
{
    #if UNITY_ANDROID
        string adUnitId = "demo-interstitial-yandex";
    #elif UNITY_IPHONE
        string adUnitId = "demo-interstitial-yandex";
    #else
        string adUnitId = "unexpected_platform";
    #endif

    this.interstitial = new Interstitial(adUnitId);
}

광고 로드

// 빈 광고 요청을 생성합니다.
AdRequest request = new AdRequest.Builder().Build();
// 요청으로 전면 광고를 로드합니다.
this.interstitial.LoadAd(request);
// 빈 광고 요청을 생성합니다.
AdRequest request = new AdRequest.Builder().Build();
// 요청으로 전면 광고를 로드합니다.
this.interstitial.LoadAd(request);

광고 표시

private void ShowInterstitial()
{
  if (this.interstitial.IsLoaded()) {
    this.interstitial.Show();
  } else
    {
        Debug.Log("Interstitial is not ready yet");
    }
}
private void ShowInterstitial()
{
    if (this.interstitial.IsLoaded()) {
        interstitial.Show();
    } else
    {
        Debug.Log("Interstitial is not ready yet");
    }
}

광고 삭제

interstitial.Destroy();
interstitial.Destroy();

광고 콜백 설정

...
private void RequestInterstitial()
{
    ...
    // 광고 요청이 성공적으로 로드되었을 때 호출됩니다.
    this.interstitial.OnAdLoaded += HandleOnAdLoaded;
    // 광고 요청을 로드하는 데 실패했을 때 호출됩니다.
    this.interstitial.OnAdFailedToLoad += HandleOnAdFailedToLoad;
    // 광고가 표시될 때 호출됩니다.
    this.interstitial.OnAdOpening += HandleOnAdOpening;
    // 광고가 종료되었을 때 호출됩니다.
    this.interstitial.OnAdClosed += HandleOnAdClosed;
    ...
}

public void HandleOnAdLoaded(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleAdLoaded event received");
}

public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
    MonoBehaviour.print("HandleFailedToReceiveAd event received with message: "
                        + args.Message);
}

public void HandleOnAdOpening(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleAdOpening event received");
}

public void HandleOnAdClosed(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleAdClosed event received");
}
...
private void RequestInterstitial()
{
    ...
    // 광고 요청이 성공적으로 로드되었을 때 호출됩니다.
    this.interstitial.OnInterstitialLoaded += this.HandleInterstitialLoaded;
    // 광고 요청을 로드하는 데 실패했을 때 호출됩니다.
    this.interstitial.OnInterstitialFailedToLoad += this.HandleInterstitialFailedToLoad;
    // 클릭 후 사용자가 애플리케이션으로 돌아왔을 때 호출됩니다.
    this.interstitial.OnReturnedToApplication += this.HandleReturnedToApplication;
    // 사용자가 광고를 탭한 후 애플리케이션을 종료하려고 할 때 호출됩니다.
    this.interstitial.OnLeftApplication += this.HandleLeftApplication;
    // 사용자가 광고를 클릭했을 때 호출됩니다.
    this.interstitial.OnAdClicked += this.HandleAdClicked;
    // 광고가 표시될 때 호출됩니다.
    this.interstitial.OnInterstitialShown += this.HandleInterstitialShown;
    // 광고가 종료되었을 때 호출됩니다.
    this.interstitial.OnInterstitialDismissed += this.HandleInterstitialDismissed;
    // 노출이 추적되었을 때 호출됩니다
    this.interstitial.OnImpression += this.HandleImpression;
    // 광고 요청이 표시하는 데 실패했을 때 호출됩니다.
    this.interstitial.OnInterstitialFailedToShow += this.HandleInterstitialFailedToShow;
    ...
}

public void HandleInterstitialLoaded(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleInterstitialLoaded event received");
}

public void HandleInterstitialFailedToLoad(object sender, AdFailureEventArgs args)
{
    MonoBehaviour.print(
        "HandleInterstitialFailedToLoad event received with message: " + args.Message);
}

public void HandleReturnedToApplication(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleReturnedToApplication event received");
}

public void HandleLeftApplication(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleLeftApplication event received");
}

public void HandleAdClicked(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleAdClicked event received");
}

public void HandleInterstitialShown(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleInterstitialShown event received");
}

public void HandleInterstitialDismissed(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleInterstitialDismissed event received");
}

public void HandleImpression(object sender, ImpressionData impressionData)
{
    var data = impressionData == null ? "null" : impressionData.rawData;
    MonoBehaviour.print("HandleImpression event received with data: " + data);
}

public void HandleInterstitialFailedToShow(object sender, AdFailureEventArgs args)
    {
        MonoBehaviour.print(
            "HandleInterstitialFailedToShow event received with message: " + args.Message);
    }

보상형

광고 객체 생성

using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
...

private RewardedAd rewardedAd;

private void RequestRewarded()
{
    #if UNITY_ANDROID
        string adUnitId = "ca-app-pub-3940256099942544/5224354917";
    #elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-3940256099942544/1712485313";
    #else
        string adUnitId = "unexpected_platform";
    #endif

    this.rewardedAd = new RewardedAd(adUnitId);
}
using YandexMobileAds;
using YandexMobileAds.Base;
...

private RewardedAd rewardedAd;

private void RequestRewarded()
{
    #if UNITY_ANDROID
        string adUnitId = "demo-rewarded-yandex";
    #elif UNITY_IPHONE
        string adUnitId = "demo-rewarded-yandex";
    #else
        string adUnitId = "unexpected_platform";
    #endif

    this.rewardedAd = new RewardedAd(adUnitId);
}

광고 로드

// 빈 광고 요청을 생성합니다.
AdRequest request = new AdRequest.Builder().Build();
// 요청으로 보상형 광고를 로드합니다.
this.rewardedAd.LoadAd(request);
// 빈 광고 요청을 생성합니다.
AdRequest request = new AdRequest.Builder().Build();
// 요청으로 보상형을 로드합니다.
this.rewardedAd.LoadAd(request);

광고 표시

private void ShowRewardedAd()
{
	  if (this.rewardedAd.IsLoaded()) {
		    this.rewardedAd.Show();
	  } else
    {
        Debug.Log("Rewarded ad is not ready yet");
    }
}
private void ShowRewardedAd()
{
    if (this.rewardedAd.IsLoaded())
    {
        rewardedAd.Show();
    }
    else
    {
        Debug.Log("Rewarded Ad is not ready yet");
    }
}

광고 삭제

rewardedAd.Destroy();
rewardedAd.Destroy();

광고 콜백 설정

...
private void RequestRewarded()
{
    ...
// 광고 요청이 성공적으로 로드되었을 때 호출됩니다.
    this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
    // 광고 요청을 로드하는 데 실패했을 때 호출됩니다.
    this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
    // 광고가 표시될 때 호출됩니다.
    this.rewardedAd.OnAdOpening += HandleRewardedAdOpening;
    // 광고 요청이 표시하는 데 실패했을 때 호출됩니다.
    this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
    // 사용자가 광고와 상호 작용한 것에 대해 보상을 받아야 할 때 호출됩니다.
    this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
    // 광고가 종료되었을 때 호출됩니다.
    this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;
    ...
}

public void HandleRewardedAdLoaded(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleRewardedAdLoaded event received");
}

public void HandleRewardedAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
    MonoBehaviour.print(
        "HandleRewardedAdFailedToLoad event received with message: "
                         + args.Message);
}

public void HandleRewardedAdOpening(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleRewardedAdOpening event received");
}

public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args)
{
    MonoBehaviour.print(
        "HandleRewardedAdFailedToShow event received with message: "
                         + args.Message);
}

public void HandleRewardedAdClosed(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleRewardedAdClosed event received");
}

public void HandleUserEarnedReward(object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
    MonoBehaviour.print(
        "HandleRewardedAdRewarded event received for "
                    + amount.ToString() + " " + type);
}
...
private void RequestRewarded()
{
    ...
    // 광고 요청이 성공적으로 로드되었을 때 호출됩니다.
    this.rewardedAd.OnRewardedAdLoaded += this.HandleRewardedAdLoaded;
    // 광고 요청을 로드하는 데 실패했을 때 호출됩니다.
this.rewardedAd.OnRewardedAdFailedToLoad += this.HandleRewardedAdFailedToLoad;
    // 클릭 후 사용자가 애플리케이션으로 돌아왔을 때 호출됩니다.
this.rewardedAd.OnReturnedToApplication += this.HandleReturnedToApplication;
    // 사용자가 광고를 탭한 후 애플리케이션을 종료하려고 할 때 호출됩니다.
this.rewardedAd.OnLeftApplication += this.HandleLeftApplication;
    // 사용자가 광고를 클릭했을 때 호출됩니다.
this.rewardedAd.OnAdClicked += this.HandleAdClicked;
    // 광고가 표시될 때 호출됩니다.
this.rewardedAd.OnRewardedAdShown += this.HandleRewardedAdShown;
    // 광고가 종료되었을 때 호출됩니다.
this.rewardedAd.OnRewardedAdDismissed += this.HandleRewardedAdDismissed;
    // 노출이 추적되었을 때 호출됩니다
this.rewardedAd.OnImpression += this.HandleImpression;
    // 사용자가 광고와 상호 작용한 것에 대해 보상을 받아야 할 때 호출됩니다.
this.rewardedAd.OnRewarded += this.HandleRewarded;
    // 광고 요청이 표시하는 데 실패했을 때 호출됩니다.
this.rewardedAd.OnRewardedAdFailedToShow += this.HandleRewardedAdFailedToShow;
    ...
}

public void HandleRewardedAdLoaded(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleRewardedAdLoaded event received");
}

public void HandleRewardedAdFailedToLoad(object sender, AdFailureEventArgs args)
{
    MonoBehaviour.print(
        "HandleRewardedAdFailedToLoad event received with message: " + args.Message);
}

public void HandleReturnedToApplication(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleReturnedToApplication event received");
}

public void HandleLeftApplication(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleLeftApplication event received");
}

public void HandleAdClicked(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleAdClicked event received");
}

public void HandleRewardedAdShown(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleRewardedAdShown event received");
}

public void HandleRewardedAdDismissed(object sender, EventArgs args)
{
    MonoBehaviour.print("HandleRewardedAdDismissed event received");
}

public void HandleImpression(object sender, ImpressionData impressionData)
{
    var data = impressionData == null ? "null" : impressionData.rawData;
    MonoBehaviour.print("HandleImpression event received with data: " + data);
}

public void HandleRewarded(object sender, Reward args)
{
    MonoBehaviour.print("HandleRewarded event received: amout = " + args.amount + ", type = " + args.type);
}

public void HandleRewardedAdFailedToShow(object sender, AdFailureEventArgs args)
{
    MonoBehaviour.print(
        "HandleRewardedAdFailedToShow event received with message: " + args.Message);
}

광고 객체 생성

using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
...

private BannerView bannerView;

private void RequestBanner()
{
    #if UNITY_ANDROID
        string adUnitId = "ca-app-pub-3940256099942544/6300978111";
    #elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-3940256099942544/2934735716";
    #else
        string adUnitId = "unexpected_platform";
    #endif

    // 화면 상단에 320x50 배너를 만듭니다.
    this.bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Top);
}
using YandexMobileAds;
using YandexMobileAds.Base;
...

private Banner bannerView;

private void RequestBanner()
{
    #if UNITY_ANDROID
        string adUnitId = "demo-banner-yandex";
    #elif UNITY_IPHONE
        string adUnitId = "demo-banner-yandex";
    #else
        string adUnitId = "unexpected_platform";
    #endif

    // 화면 상단에 320x50 배너를 만듭니다.
    this.bannerView = new Banner(adUnitId, AdSize.BANNER_320x50, AdPosition.TopCenter);
}

플러그인은 상수 외에도 임의의 배너 크기를 설정할 수 있습니다.

AdSize adSize = new AdSize(250, 250);
BannerView bannerView = new BannerView(adUnitId, adSize, AdPosition.Bottom);
AdSize adSize = AdSize.FlexibleSize(250, 250)
BannerView bannerView = new BannerView(adUnitId, adSize, AdPosition.BottomCenter);

화면에서의 위치 설정

// 화면 하단 중앙
BannerView bannerView = new BannerView(adUnitId, adSize, AdPosition.Bottom);
// 사용자 지정 좌표
BannerView bannerView = new BannerView(adUnitId, AdSize.Banner, 0, 50);
// 화면 하단 중앙
BannerView bannerView = new BannerView(adUnitId, adSize, AdPosition.BottomCenter);
// Yandex Ads에서는 사용자 지정 좌표가 불가능합니다

광고 로드

// 빈 광고 요청을 생성합니다.
AdRequest request = new AdRequest.Builder().Build();
// 요청으로 배너를 로드합니다.
this.bannerView.LoadAd(request);
// 빈 광고 요청을 생성합니다.
AdRequest request = new AdRequest.Builder().Build();
// 요청으로 배너를 로드합니다.
this.bannerView.LoadAd(request);

광고 삭제

bannerView.Destroy();
bannerView.Destroy();

지원 문의

Previous