[Unity] 애드몹 보상형 광고 적용하기 (AdMob RewardedAd) v3.17

Posted by Dev Park
2019. 6. 5. 16:39 Unity

유니티에서 애드몹을 이용해서 보상형 광고를 넣는 방법입니다. 

애드몹 버전은 Google Mobile Ads Unity Plugin v3.17 입니다.

 

보상형 광고를 넣기 전에 

 

1. 광고 단위 만들기 

2. 플러그인 설치 

3. AndroidManifest.xml 설정

 

과정이 필요합니다. 위 3가지 사항이 준비되지 않았으면 이전 글을 먼저 읽고 준비를 마쳐주시기 바랍니다. 

[Unity] 애드몹 배너 광고 적용하기 (AdMob Banner) v3.17

[Unity] 유니티 애드몹 전면 광고 적용하기 (AdMob Interstitial Ads) v3.17

 

보상형 광고에 사용되는 코드는 아래와 같습니다. 

using System;
using UnityEngine;
using GoogleMobileAds.Api;

public class AdmobAdManager : MonoBehaviour
{
    private RewardedAd rewardedAd;

    public void Start()
    {
#if UNITY_ANDROID
        string appId = "ca-app-pub-3940256099942544~3347511713";
#elif UNITY_IPHONE
            string appId = "ca-app-pub-3940256099942544~1458002511";
#else
            string appId = "unexpected_platform";
#endif
        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(appId);

        this.RequestRewardedAd();
    }

    // 보상형 광고
    private void RequestRewardedAd()
    {
        string adUnitId;
#if UNITY_ANDROID
        adUnitId = "ca-app-pub-3940256099942544/5224354917";
#elif UNITY_IPHONE
            adUnitId = "ca-app-pub-3940256099942544/1712485313";
#else
            adUnitId = "unexpected_platform";
#endif

        this.rewardedAd = new RewardedAd(adUnitId);

        // Called when an ad request has successfully loaded.
        this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
        // Called when an ad request failed to load.
        this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad;
        // Called when an ad is shown.
        this.rewardedAd.OnAdOpening += HandleRewardedAdOpening;
        // Called when an ad request failed to show.
        this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow;
        // Called when the user should be rewarded for interacting with the ad.
        this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        // Called when the ad is closed.
        this.rewardedAd.OnAdClosed += HandleRewardedAdClosed;

        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the rewarded ad with the request.
        this.rewardedAd.LoadAd(request);
    }

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

    public void HandleRewardedAdFailedToLoad(object sender, AdErrorEventArgs 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");
        RequestRewardedAd();
    }

    public void HandleUserEarnedReward(object sender, Reward args)
    {
        string type = args.Type;
        double amount = args.Amount;
        MonoBehaviour.print(
            "HandleRewardedAdRewarded event received for "
                        + amount.ToString() + " " + type);
    }

    public void ShowRewardedAd()
    {
        if (this.rewardedAd.IsLoaded())
        {
            this.rewardedAd.Show();
        }
        else
        {
            Debug.Log("NOT Loaded Interstitial");
            RequestRewardedAd();
        }
    }
}

 

 보상형 광고의 코드도 이전에 한 전면 광고와 크게 차이는 없습니다. 

 

HandleRewardedAdClosed 에서 광고가 닫힐때 새로운 광고를 미리 로드하도록 합니다. 

보상형 광고이기 때문에 광고를 시청했으면 보상을 주어야 하는데요. 

보상의 설정은 HandleUserEarnedReward 를 통해 하시면 됩니다. 

 

광고가 보여져야 하는 타이밍에 ShowRewardedAd() 함수를 통해 광고를 호출합니다. 

 

유니티 에디터에서 실행시 위와 같은 로그가 나오면 정상적으로 작동하는 겁니다. 

 

이전 전면 광고 작업했던것과 합쳐서 실행을 해보면 

보상을 받겠냐고 묻는 버튼 누르면 보상형 광고가 호출되도록 했습니다.

테스트 버튼을 누르면 보상형 동영상 광고가 출력됩니다. 

 

위 코드에 사용된 앱 ID와 광고 단위 ID는 애드몹에서 제공하는 테스트용 ID입니다. 

실제 광고를 보고 싶으면 애드몹에서 만든 자신의 실제 앱ID와 광고 단위 ID를 코드에 적용하면됩니다.