본문 바로가기

개발

[v7.3.0] GoogleAdmob 보상형 광고 이것저것

구현

(유니티) developer 페이지에서 알려주는 보상형 광고 통합 단계는 아래와 같다.

 

1. 보상형 광고 로드

2. [선택사항] 서버 측 확인(SSV) 콜백 검사

3. 리워드 콜백으로 보상형 광고 표시

4. 보상형 광고 이벤트 수신

5. 보상형 광고 정리

6. 다음 보상형 광고 미리 로드

 

구현 전에, 테스트로 광고를 내보내기 위해서는 테스트 광고 요청에 사용할 수 있는 광고 단위 ID로 설정해야 한다. 이 ID는 모든 요청에 대해 실제 광고가 아닌 테스트 광고를 반환 할 수 있도록 한다.

보상형 광고 단위 ID 같은 경우, 아래와 같다.

Android : "ca-app-pub-3940256099942544/5224354917"
iOS : "ca-app-pub-3940256099942544/1712485313"

 

다음, 모바일 광고 SDK 초기화를 해준다.

광고를 로드하기 전에 앱에서 MobileAds.Initialize()를 호출하면 된다.  

public static void Initialize(Action<InitializationStatus> initCompleteAction)

 

Void Start()
{
	MobileAds.Initialize((InitializationStatus initStatus) => 
	{
    		// MobileAds SDK가 초기화 될 때 callback
	});
}

 

앱 실행 시 한 번만 호출하면 된다.

 

 

1. 보상형 광고 로드

보상형 광고는 RewardedAd 클래스의 Load() 메서드를 이용해 로드된다.

AdRequest를 통해 광고 로드를 위한 요청을 생성한 후, Load 메서드를 이용하면 된다.

public static void Load(string adUnitId, AdRequest request, Action<RewardedAd, LoadAdError> adLoadCallback)

 

// 광고를 테스트할 때만 사용.
#if UNITY_ANDROID
 private string _adUnitId = "ca-app-pub-3940256099942544/5224354917";
#elif UNITY_IPHONE
 private string _adUnitId = "ca-app-pub-3940256099942544/1712485313";
#else
 private string _adUnitId = "unused";
#endif
//

private RewardedAd rewardedAd;

public void LoadRewardedAd()
{
     // 사용된 광고를 없애고 새 광고를 로드하기 위함.
     if(rewardedAd != null)
     {
          rewardedAd.Destroy();
          rewardedAd = null;
     }
     
     // 광고를 로드하는 요청을 생성.
     var adRequest = new AdRequest.Builder().Build();
     
     // 광고를 로드할 것을 요청.
     RewardedAd.Load(_adUnitId, adRequest, 
          (RewardedAd ad, LoadAdError error) => 
          {
               // 에러가 있거나, 광고 로드 요청에 실패했을 경우.
               if(error != null || ad == null)
                    return;
               
               rewardedAd = ad;
          });
}

 

※ 광고를 로드하지 못했을 때, 광고 요청이 완료됐을 프로세스에서 새 광고 로드를 시도하지 않을 것. 그렇게 해야할 경우 광고 요청이 계속 실패하지 않도록 광고 로드 재시도를 제한할 것. (제한된 네트워크 연결과 같은 상황에서)

 

 

2. [선택사항] 서버 측 확인(SSV) 콜백 검사

3. 리워드 콜백으로 보상형 광고 표시

광고 후 사용자의 보상을 처리할 콜백이 필요하다. 또한 광고는 로드당 한 번만 게재될 수 있으므로 확인이 필요하다. 확인은 RewardedAd클래스의 CanShowAd() 메서드를 사용하고, 보상처리는 Show() 메서드를 사용한다.

public bool CanShowAd()

   // 광고가 로드되고 이미 사용된 것(사용자에게 노출된 것)이 아니라면 true를 반환한다.

public void Show(Action<Reward> userRewardEarnedCallback)

 

public void ShowRewardedAd()
{
     if(rewardedAd != null && rewardedAd.CanShowAd())
     {
          rewardedAd.Show((Reward reward) =>
          {
               // 사용자에게 광고 보상 지급
          });
     }
}

 

 

4. 보상형 광고 이벤트 수신

구글애드몹은 광고의 작동 방식을 맞춤설정할 수 있도록 여러 이벤트를 제공하고있다.

Action OnAdClicked
Action OnAdFullScreenContentClosed
Action<AdError> OnAdFullScreenContentFailed

Action OnAdFullScreenContentOpened
Action OnAdImpressionRecorded
Action<AdValue> OnAdPaid

 

  • OnAdClicked : 광고가 클릭됐을 때 작동.
  • OnAdFullScreenContentClosed : full-screen 광고가 닫혔을 때 작동.
  • OnAdFullScreenContentFailed : 광고 로드에 실패했을 때 작동.
  • OnAdFullScreenContentOpened : full-screen 광고가 열렸을(시작될) 때 작동.
  • OnAdImpressionRecorded : 광고가 보여졌을 때 작동.
  • OnAdPaid : 광고 수익이 발생한 것으로 추정될 때 작동.
private void RegisterEventHandler(RewardedAd ad)
{
     ad.OnAdPaid += (AdValue adValue) =>
     {
          // Rewarded ad paid [adValue]
     };
     
     ad.OnAdImpressionRecorded += () =>
     {
          // Rewarded ad recorded an impression
     };
     
     ad.OnAdClicked += () =>
     {
          // Rewarded ad was clicked
     };
     
     ad.OnAdFullScreenContentOpened += () =>
     {
          // Rewarded ad content opened
     };
     
     ad.OnAdFullScreenContentClosed += () =>
     {
          // Rewarded ad content closed
     };
     
     ad.OnAdFullScreenContentFailed += (AdError error) =>
     {
          // Rewarded ad failed to open with [error]
     };
}

 

 

 

5. 보상형 광고 정리

RewardedAd 지정이 끝나면 참조를 삭제하기 전에 RewardedAd 클래스의 Destroy() 메서드를 호출해야한다.

public void Destroy()

 

rewardedAd.Destroy(); 를 사용하면 플러그인이 객체를 더 이상 사용되지 않는 것으로 인식하므로 객체가 점유한 메모리를 회복할 수 있다. 이 메서드를 호출하지 않으면 메모리 누수가 발생한다.

 

 

6. 다음 보상형 광고 미리 로드

RewardedAd는 일회용 객체이다. 따라서 보상형 광고가 표시된 후에는 이 객체를 다시 사용할 수 없고, 다른 보상형 광고를 요청하려면 새 RewardedAd 객체를 만들어야 한다.

요청한 광고가 노출 후 종료되거나 광고 로드에 실패했을 때 같은 경우 등에 보상형 광고를 미리 로드하면 된다.

 

private void RegisterReloadHandler(RewardedAd ad)
{
     ad.OnAdFullScreenContentClosed += () =>
     {
          // 광고 다시 로드
          LoadRewardAd();
     };
     ad.OnAdFullScreenContentFailed += (AdError error) =>
     {
          // 광고 다시 로드
          LoadRewardedAd();
     };
}

 

 

 

예시코드 작성 (Android 용)

더보기

GoogleAdMobAndroidSample.cs

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
using GoogleMobileAds.Common;
using TMPro;

public class AdmobFunc : MonoBehaviour
{
    public TMP_Text testText;

    private RewardedAd rewardedAd;
    string _adUnitId = "ca-app-pub-3940256099942544/5224354917";

    void Start()
    {
          MobileAds.Initialize((InitializationStatus initStatus) =>
          {
               // This callback is called once the MobileAds SDK is initalized.
          });

          LoadRewardedAd();
    }

    public void LoadRewardedAd()
    {
          if (rewardedAd != null)
          {
               rewardedAd.Destroy();
               rewardedAd = null;
          }

          var adRequest = new AdRequest.Builder().Build();

          RewardedAd.Load(_adUnitId, adRequest, (RewardedAd ad, LoadAdError error) =>
          {
               if (error != null || ad == null)
               {
                    // load request failed
                    return;
               }

               rewardedAd = ad;

               RegisterEventHandlers(ad);
          });
    }

    public void ShowRewardedAd()
    {
          if (rewardedAd != null && rewardedAd.CanShowAd())
          {
               rewardedAd.Show((Reward reward) =>
               {
                    // Reward the user;
                    testText.text = "rewarded!";
               });
          }
    }

    private void RegisterEventHandlers(RewardedAd ad)
    {
          ad.OnAdFullScreenContentClosed += () => 
          {
               LoadRewardedAd();
          };

          ad.OnAdFullScreenContentFailed += (AdError error) =>
          {
               LoadRewardedAd();
          };
    }
}

 

 

참조

유니티 보상형 광고 : https://developers.google.com/admob/unity/rewarded?hl=ko#android 

 

보상형 광고  |  Unity  |  Google Developers

보상형 광고 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 보상형 광고는 사용자에게 상호작용에 대한 대가로 인앱 보상을 제공하는 광고입니다. 이 가이

developers.google.com

유니티 보상형 광고 API : https://developers.google.com/admob/unity/reference/class/google-mobile-ads/api/rewarded-ad

유니티 구글 애드몹 Sample : https://github.com/googleads/googleads-mobile-unity/tree/main/samples/HelloWorld

 

'개발' 카테고리의 다른 글

유니티 C# ? ?? ?. ?[]에 관하여 이것저것  (0) 2023.04.04
[v10.14] Gpgs 이것저것 메모  (0) 2023.03.14