보상형 동영상 광고(기존 API)

보상형 동영상 광고는 동영상 광고를 끝까지 시청한 사용자에게 인앱 보상을 제공하는 전체 화면 동영상 광고입니다.

이 가이드에는 AdMob 보상형 동영상 광고를 Unity 앱에 통합하는 방법이 나와 있습니다.

기본 요건

시작하기를 모두 읽어보세요. Unity 앱에 Google 모바일 광고 Unity 플러그인이 있어야 합니다.

싱글톤 인스턴스에 대한 참조 받기

보상형 동영상 광고를 표시하려면 먼저 싱글톤 RewardBasedVideoAd 인스턴스에 대한 참조를 얻어야 합니다. 이 참조는 RewardBasedVideoAd.Instance를 호출하여 가져올 수 있습니다.

using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardBasedVideoAd rewardBasedVideo;
    ...

    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);

        // Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

    }
}

광고 로드하기

RewardedBasedVideoAd는 싱글톤이므로 공유 인스턴스를 통해 광고를 로드해야 합니다.

동영상이 미리 로드될 수 있도록, 아래에 나온 것처럼 최대한 빨리 LoadAd()를 호출하는 것이 좋습니다(예: GameObject에 첨부된 스크립트의 Start() 메소드).

...
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardBasedVideoAd rewardBasedVideo;
    ...

    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);

        // Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

        this.RequestRewardBasedVideo();
    }

    private void RequestRewardBasedVideo()
    {
        #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

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

항상 테스트 광고로 테스트

위의 샘플 코드에는 광고 단위 ID가 포함되어 있으며, 이를 사용하여 광고를 요청할 수 있습니다. 이 ID는 모든 요청에 대해 실제 광고가 아닌 테스트 광고를 반환하도록 구성되어서 안전하게 사용할 수 있습니다.

그러나 AdMob UI에 앱을 등록하고 앱에서 사용할 광고 단위 ID를 직접 생성한 경우에는 개발 중에 기기를 테스트 기기로 명확하게 설정해야 합니다. 이는 매우 중요합니다. 실제 광고를 사용하여 테스트하면 (탭을 전혀 하지 않아도) AdMob 정책에 위배되므로 계정이 정지될 수 있습니다. 개발할 때 항상 테스트 광고를 받는 방법에 대한 정보는 테스트 광고를 참조하세요.

광고 이벤트

광고의 작동 방식을 추가로 맞춤설정하려는 경우 광고의 수명 주기(예: 로드, 열기, 닫기)에서 여러 이벤트에 연결할 수 있습니다. 적절한 EventHandler에 대한 대리자를 등록하여 이러한 이벤트를 수신합니다. 가장 중요한 이벤트는 OnAdRewarded로 사용자가 동영상 시청에 대한 보상을 받을 때 호출됩니다. 다음과 같이 다른 광고 이벤트를 구현할 수도 있습니다.

...
using GoogleMobileAds.Api;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    private RewardBasedVideoAd rewardBasedVideo;
    ...

    public void Start()
    {
        // Get singleton reward based video ad reference.
        this.rewardBasedVideo = RewardBasedVideoAd.Instance;

        // Called when an ad request has successfully loaded.
        rewardBasedVideo.OnAdLoaded += HandleRewardBasedVideoLoaded;
        // Called when an ad request failed to load.
        rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
        // Called when an ad is shown.
        rewardBasedVideo.OnAdOpening += HandleRewardBasedVideoOpened;
        // Called when the ad starts to play.
        rewardBasedVideo.OnAdStarted += HandleRewardBasedVideoStarted;
        // Called when the user should be rewarded for watching a video.
        rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
        // Called when the ad is closed.
        rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
        // Called when the ad click caused the user to leave the application.
        rewardBasedVideo.OnAdLeavingApplication += HandleRewardBasedVideoLeftApplication;

        this.RequestRewardBasedVideo();
    }

    private void RequestRewardBasedVideo()
    {
        #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

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

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

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

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

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

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

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

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

OnAdRewarded 이벤트는 특수 이벤트 인수를 제공합니다. 이 인수는 사용자에게 지급되는 보상을 설명하는 TypeAmount가 포함된 Reward 인스턴스를 전달합니다.

public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
    string type = args.Type;
    double amount = args.Amount;
    print("User rewarded with: " + amount.ToString() + " " + type);
}

OnAdFailedToLoad 이벤트는 특수 이벤트 인수도 포함합니다. 이 인수는 오류를 설명하는 Message가 포함된 HandleAdFailedToLoadEventArgs의 인스턴스를 전달합니다.

public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
  print("Rewarded video ad failed to load: " + args.Message);
  // Handle the ad failed to load event.
}
광고 이벤트설명
OnAdLoaded OnAdLoaded 이벤트는 광고 로드가 완료되면 실행됩니다.
OnAdFailedToLoad OnAdFailedToLoad 이벤트는 광고 로드에 실패할 때 실행됩니다. Message 매개변수는 발생한 실패의 유형을 설명합니다.
OnAdOpening 이 메소드는 광고가 표시될 때 실행되며 기기 화면을 덮습니다. 분석 패키지를 사용해 클릭률을 추적하는 경우 여기에서 기록하면 편리합니다.
OnAdStarted 이 메소드는 사용자가 광고를 탭하면 실행됩니다.
OnAdRewarded 이 메소드는 사용자가 광고 시청에 대한 보상을 받아야 할 때 실행됩니다. Reward 매개변수는 사용자에게 제공되는 보상을 설명합니다.
OnAdClosed 이 메소드는 사용자가 닫기 아이콘을 탭하거나 뒤로 버튼을 사용하여 보상형 동영상 광고가 닫을 때 실행됩니다. 앱에서 오디오 출력 또는 게임 루프를 일시중지했을 때 이 메소드로 재개하면 편리합니다.
OnAdLeavingApplication 이 메소드는 현재 앱이 백그라운드에 있는 상태에서 사용자 클릭으로 다른 앱(예: Google Play 스토어)이 열릴 때 OnAdOpened 후에 호출됩니다.

광고 게재

보상형 광고를 게재하기 전에 사용자에게 보상을 대가로 보상형 광고 콘텐츠를 시청할지 여부를 명확히 선택할 수 있는 옵션을 제공해야 합니다. 보상형 광고에는 항상 선택 옵션을 제공해야 합니다.

보상형 동영상 광고를 표시하려면 IsLoaded() 메소드를 사용하여 로드가 완료되었는지 확인한 다음 Show()를 호출하세요.

다음 코드 스니펫은 보상형 동영상 광고를 표시하는 방법을 보여줍니다.

private void UserOptToWatchAd()
{
  if (rewardBasedVideo.IsLoaded()) {
    rewardBasedVideo.Show();
  }
}

광고 다시 로드

OnAdClosed 이벤트를 이용하면 이전 보상형 동영상 광고를 표시한 후에 새 보상형 동영상 광고를 손쉽게 로드할 수 있습니다.

public void Start()
{
    this.rewardBasedVideo = RewardBasedVideoAd.Instance;

    rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
}

public void HandleRewardBasedVideoClosed(object sender, EventArgs args)
{
    this.RequestRewardBasedVideo();
}

추가 리소스

샘플

다음 단계

  • AdMob UI에서 자체 보상형 동영상 광고 단위를 만드세요.
  • 다음과 같은 다른 광고 형식을 사용해 보세요.