본문 바로가기
유니티/중급

Unity Advertisement Legacy

by 노튜 2025. 1. 29.
728x90

 

 Advertisement Legacy 구현

 

 

본 글에서는 연동하는 방법에 대해서는 다루지 않는다.

특별히 요구되는 부분은 많지 않다. 유니티에서 제공하는 간단한 예제를 사용하면 쉽게 유니티 광고를 프로젝트에 연결할 수 있다. 문제가 발생할 수 있는 부분만 설명한다. 

아래의 링크를 참조한다.

 

2024.07.01 - [유니티/중급] - Unity Ads - Monetization 연동

 

Unity Ads - Monetization 연동

1. Unity Dashboard. 유니티 대시보드의 Unity Ads - Monetization을 설정한다. https://cloud.unity.com/home/login Unity Cloud cloud.unity.com  2. Advertisement legacy 패키지 설치 유니티 Advertisement legacy를 설치한다. 위치

notyu.tistory.com

 

 

728x90

 

 

1 Unity.Advertisements namespace

Advertisement Legacy와 관련된 클래스는 Unity.Advertisements 네임스페이스에 있다.

네임스페이스는 관련된 요소들을 포함하는 범위를 선언하는 데 사용하며, 관련된 클래스, 인터페이스 등을 사용하기 위해서는 선언을 해주어야 한다 [1].  

  • #using Unity.Adevertisements.

 

2 gameId

우선 프로젝트를 유니티 광고와 연결한다.

광고와 연결하기 위해서는 Unity Ads Monetization의 식별자가 필요하다. 식별자는 Game ID이다.

Unity Ads Monetization에서 자신이 연결하려고 하는 타겟 플랫폼의 gameId를 가져온다.

Unity Ads는 App store와 Andriod Store 두 개의 Game ID가 있다.

 

위치는 아래와 같다.

  • Unity Ads Monetization → Settings → Game IDs 

 

3. 초기화 및 연결

3.1 Advertisement.Initialize(string, bool, Interface)

 

유니티 광고 서버에 접속은 Advertisement의 Initialize를 사용하면 된다.

Insitialize를 통해 유니티 광고 서버에 성공적으로 접속을 하면, Scene을 변경할 때마다, Initialize를 할 필요는 없다. 앱이 종료할 때까지 계속 반복적으로 호출하지 않아도 접속은 유지된다.    

 

  • Advertisement.Initialize(string _gameId, bool testMode, IUnityAdsIntaliationLister interface)

 

전처리 지시문을 사용하여 안드로이드 스토어, 애플 스토어에 맞는 GameID를 설정한다. 

 

    #if UNITY_IOS
            _gameId = _iOSGameId;
    #elif UNITY_ANDROID
            _gameId = _androidGameId;

 

3.2 IUnityAdsInitializationListener

 

유니티 광고 서버에 접속이 정상적으로 되었는지 확인하는 인터페이스를 구현한다.

유니티 광고 서버에 접속이 완료 후에 필요한 행동이 있다면, void OnInitializationComplete()에서 처리하는 로직을 구현한다.

 

using UnityEngine.Advertisements;
 
public class AdsInitializer : MonoBehaviour, IUnityAdsInitializationListener
{ 
    public void OnInitializationComplete()
    {
        Debug.Log("Unity Ads initialization complete.");
    }
 
    public void OnInitializationFailed(UnityAdsInitializationError error, string message)
    {
        Debug.Log($"Unity Ads Initialization Failed: {error.ToString()} - {message}");
    }
}

 

 

3.3 AdsInitialier Full Script

using UnityEngine;
using UnityEngine.Advertisements;
 
public class AdsInitializer : MonoBehaviour, IUnityAdsInitializationListener
{
    [SerializeField] string _androidGameId;
    [SerializeField] string _iOSGameId;
    [SerializeField] bool _testMode = true;
    private string _gameId;
 
    void Awake()
    {
        InitializeAds();
    }
 
    public void InitializeAds()
    {
    #if UNITY_IOS
            _gameId = _iOSGameId;
    #elif UNITY_ANDROID
            _gameId = _androidGameId;
    #elif UNITY_EDITOR
            _gameId = _androidGameId; //Only for testing the functionality in the Editor
    #endif
        if (!Advertisement.isInitialized && Advertisement.isSupported)
        {
            Advertisement.Initialize(_gameId, _testMode, this);
        }
    }

 
    public void OnInitializationComplete()
    {
        Debug.Log("Unity Ads initialization complete.");
    }
 
    public void OnInitializationFailed(UnityAdsInitializationError error, string message)
    {
        Debug.Log($"Unity Ads Initialization Failed: {error.ToString()} - {message}");
    }
}

 

코드 출처 [2]

4 Rewarded Ad

 

Rewarded Ad 광고를 사용하기 위해서는 앞선 1.2와 비슷하게 UnitID가 필요하다. 유니티 Dashboard의 Unity Ads Monetization의 Unit id를 등록한다.

  • Unity Ads Monetization →  Ad units

Unit ID

 

 

전처리 지시문을 사용하여 안드로이드 스토어, 애플 스토어에 맞는 UnitID를 설정한다. 

 

#if UNITY_IOS
        _adUnitId = _iOSAdUnitId;
#elif UNITY_ANDROID
        _adUnitId = _androidAdUnitId;
#endif

 

4.1 Advertisement.Load()

보상형 유니티 광고를 보여주기 전에, 광고를 로드한다.

Load가 정상적으로 완료가 되면, 광고가 재생가능한 상태가 된다. 광고가 재생 가능한지 상태인지 확인 및 이에 대한 처리는 IUnityAdsLoadListener 인터페이스를 등록하여 구현한다.

 

4.2 Advertisement.Show()

광고가 로드되었으면, 버튼을 활성화한다. 사용자 입력을 받아, 광고를 보여준다.  

 

4.3 Full Script

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Advertisements;
 
public class RewardedAdsButton : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener
{
    [SerializeField] Button _showAdButton;
    [SerializeField] string _androidAdUnitId = "Rewarded_Android";
    [SerializeField] string _iOSAdUnitId = "Rewarded_iOS";
    string _adUnitId = null; // This will remain null for unsupported platforms
 
    void Awake()
    {   
        // Get the Ad Unit ID for the current platform:
#if UNITY_IOS
        _adUnitId = _iOSAdUnitId;
#elif UNITY_ANDROID
        _adUnitId = _androidAdUnitId;
#endif

        // Disable the button until the ad is ready to show:
        _showAdButton.interactable = false;
    }
 
    // Call this public method when you want to get an ad ready to show.
    public void LoadAd()
    {
        // IMPORTANT! Only load content AFTER initialization (in this example, initialization is handled in a different script).
        Debug.Log("Loading Ad: " + _adUnitId);
        Advertisement.Load(_adUnitId, this);
    }
 
    // If the ad successfully loads, add a listener to the button and enable it:
    public void OnUnityAdsAdLoaded(string adUnitId)
    {
        Debug.Log("Ad Loaded: " + adUnitId);
 
        if (adUnitId.Equals(_adUnitId))
        {
            // Configure the button to call the ShowAd() method when clicked:
            _showAdButton.onClick.AddListener(ShowAd);
            // Enable the button for users to click:
            _showAdButton.interactable = true;
        }
    }
 
    // Implement a method to execute when the user clicks the button:
    public void ShowAd()
    {
        // Disable the button:
        _showAdButton.interactable = false;
        // Then show the ad:
        Advertisement.Show(_adUnitId, this);
    }
 
    // Implement the Show Listener's OnUnityAdsShowComplete callback method to determine if the user gets a reward:
    public void OnUnityAdsShowComplete(string adUnitId, UnityAdsShowCompletionState showCompletionState)
    {
        if (adUnitId.Equals(_adUnitId) && showCompletionState.Equals(UnityAdsShowCompletionState.COMPLETED))
        {
            Debug.Log("Unity Ads Rewarded Ad Completed");
            // Grant a reward.
        }
    }
 
    // Implement Load and Show Listener error callbacks:
    public void OnUnityAdsFailedToLoad(string adUnitId, UnityAdsLoadError error, string message)
    {
        Debug.Log($"Error loading Ad Unit {adUnitId}: {error.ToString()} - {message}");
        // Use the error details to determine whether to try to load another ad.
    }
 
    public void OnUnityAdsShowFailure(string adUnitId, UnityAdsShowError error, string message)
    {
        Debug.Log($"Error showing Ad Unit {adUnitId}: {error.ToString()} - {message}");
        // Use the error details to determine whether to try to load another ad.
    }
 
    public void OnUnityAdsShowStart(string adUnitId) { }
    public void OnUnityAdsShowClick(string adUnitId) { }
 
    void OnDestroy()
    {
        // Clean up the button listeners:
        _showAdButton.onClick.RemoveAllListeners();
    }
}

 

코드 출처 [2]

 

5. interstitial Ad

4의 코드와 동일한 방식으로 구현된다.

단, interstitial에 맞는 UnitID가 사용된다. 

아래 코드 출처 [2] 를 참조한다. 

 

using UnityEngine;
using UnityEngine.Advertisements;
 
public class InterstitialAdExample : MonoBehaviour, IUnityAdsLoadListener, IUnityAdsShowListener
{
    [SerializeField] string _androidAdUnitId = "Interstitial_Android";
    [SerializeField] string _iOsAdUnitId = "Interstitial_iOS";
    string _adUnitId;
 
    void Awake()
    {
        // Get the Ad Unit ID for the current platform:
        _adUnitId = (Application.platform == RuntimePlatform.IPhonePlayer)
            ? _iOsAdUnitId
            : _androidAdUnitId;
    }
 
    // Load content to the Ad Unit:
    public void LoadAd()
    {
        // IMPORTANT! Only load content AFTER initialization (in this example, initialization is handled in a different script).
        Debug.Log("Loading Ad: " + _adUnitId);
        Advertisement.Load(_adUnitId, this);
    }
 
    // Show the loaded content in the Ad Unit:
    public void ShowAd()
    {
        // Note that if the ad content wasn't previously loaded, this method will fail
        Debug.Log("Showing Ad: " + _adUnitId);
        Advertisement.Show(_adUnitId, this);
    }
 
    // Implement Load Listener and Show Listener interface methods: 
    public void OnUnityAdsAdLoaded(string adUnitId)
    {
        // Optionally execute code if the Ad Unit successfully loads content.
    }
 
    public void OnUnityAdsFailedToLoad(string _adUnitId, UnityAdsLoadError error, string message)
    {
        Debug.Log($"Error loading Ad Unit: {_adUnitId} - {error.ToString()} - {message}");
        // Optionally execute code if the Ad Unit fails to load, such as attempting to try again.
    }
 
    public void OnUnityAdsShowFailure(string _adUnitId, UnityAdsShowError error, string message)
    {
        Debug.Log($"Error showing Ad Unit {_adUnitId}: {error.ToString()} - {message}");
        // Optionally execute code if the Ad Unit fails to show, such as loading another ad.
    }
 
    public void OnUnityAdsShowStart(string _adUnitId) { }
    public void OnUnityAdsShowClick(string _adUnitId) { }
    public void OnUnityAdsShowComplete(string _adUnitId, UnityAdsShowCompletionState showCompletionState) { }
}

 

코드 출처 [2]

6. Banner Ad

배너 광고는 UnitID가 필요하다.

위치는 아래와 같다.

  • Unity Ads Monetization →  Ad units

아래 코드 출처 [2] 를 참조한다.

6. 1 BannerPosition

6.1.1 Advertisement.Banner.SetPosition(BannerPosition)

SetPosition()  함수를 사용해 배너의 위치를 지정한다. 열거형을 사용하여, 배너의 위치를 설정한다.

  • Advertisement.Banner.SetPosition (BannerPosition.TOP_CENTER);

 

6.1.1 열거형 BannerPosition

 

  • BannerPosition.CENTER
  • BannerPosition.TOP_CENTER
  • BannerPosition.TOP_LEFT
  • BannerPosition.TOP_RIGHT
  • BannerPosition.BOTTOM_CENTER
  • BannerPosition.BOTTOM_LEFT
  • BannerPosition.BOTTOM_RIGHT

 

6.1 Advertisement.Banner.Load(string UnitId, BannerLoadOptions bannerLoadOptions)

배너를 로드한다. BannerLoadOptions class를 사용해 로드가 정상적으로 이루어졌는지 확인하는 콜백 함수를 등록한다. 등록한 콜백함수를 사용해 로드가 성공하였을 때의 로직, 실패하였을 때의 로직을 구현한다. 버튼을 클릭이 가능하도록 하는 코드를 작성한다.

 

6.2 Advertisement.Banner.Show(string UnitID, BannerOptions bannerOptions)  

배너를 보여준다. BannerOptions class는 배너 클릭과 같은 이벤트가 발생하였을 때 상태 변화에 따른 처리를 담당하는 콜백 함수를 등록할 수 있다.  

 

6.3 Advertisement.Banner.Hide()

배너를 보이지 않게 한다. 

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Advertisements;
 
public class BannerAdExample : MonoBehaviour
{
    // For the purpose of this example, these buttons are for functionality testing:
    [SerializeField] Button _loadBannerButton;
    [SerializeField] Button _showBannerButton;
    [SerializeField] Button _hideBannerButton;
 
    [SerializeField] BannerPosition _bannerPosition = BannerPosition.BOTTOM_CENTER;
 
    [SerializeField] string _androidAdUnitId = "Banner_Android";
    [SerializeField] string _iOSAdUnitId = "Banner_iOS";
    string _adUnitId = null; // This will remain null for unsupported platforms.
 
    void Start()
    {
        // Get the Ad Unit ID for the current platform:
#if UNITY_IOS
        _adUnitId = _iOSAdUnitId;
#elif UNITY_ANDROID
        _adUnitId = _androidAdUnitId;
#endif

        // Disable the button until an ad is ready to show:
        _showBannerButton.interactable = false;
        _hideBannerButton.interactable = false;
 
        // Set the banner position:
        Advertisement.Banner.SetPosition(_bannerPosition);
 
        // Configure the Load Banner button to call the LoadBanner() method when clicked:
        _loadBannerButton.onClick.AddListener(LoadBanner);
        _loadBannerButton.interactable = true;
    }
 
    // Implement a method to call when the Load Banner button is clicked:
    public void LoadBanner()
    {
        // Set up options to notify the SDK of load events:
        BannerLoadOptions options = new BannerLoadOptions
        {
            loadCallback = OnBannerLoaded,
            errorCallback = OnBannerError
        };
 
        // Load the Ad Unit with banner content:
        Advertisement.Banner.Load(_adUnitId, options);
    }
 
    // Implement code to execute when the loadCallback event triggers:
    void OnBannerLoaded()
    {
        Debug.Log("Banner loaded");
 
        // Configure the Show Banner button to call the ShowBannerAd() method when clicked:
        _showBannerButton.onClick.AddListener(ShowBannerAd);
        // Configure the Hide Banner button to call the HideBannerAd() method when clicked:
        _hideBannerButton.onClick.AddListener(HideBannerAd);
 
        // Enable both buttons:
        _showBannerButton.interactable = true;
        _hideBannerButton.interactable = true;     
    }
 
    // Implement code to execute when the load errorCallback event triggers:
    void OnBannerError(string message)
    {
        Debug.Log($"Banner Error: {message}");
        // Optionally execute additional code, such as attempting to load another ad.
    }
 
    // Implement a method to call when the Show Banner button is clicked:
    void ShowBannerAd()
    {
        // Set up options to notify the SDK of show events:
        BannerOptions options = new BannerOptions
        {
            clickCallback = OnBannerClicked,
            hideCallback = OnBannerHidden,
            showCallback = OnBannerShown
        };
 
        // Show the loaded Banner Ad Unit:
        Advertisement.Banner.Show(_adUnitId, options);
    }
 
    // Implement a method to call when the Hide Banner button is clicked:
    void HideBannerAd()
    {
        // Hide the banner:
        Advertisement.Banner.Hide();
    }
 
    void OnBannerClicked() { }
    void OnBannerShown() { }
    void OnBannerHidden() { }
 
    void OnDestroy()
    {
        // Clean up the listeners:
        _loadBannerButton.onClick.RemoveAllListeners();
        _showBannerButton.onClick.RemoveAllListeners();
        _hideBannerButton.onClick.RemoveAllListeners();
    }
}

 

코드 출처 [2]

5. Advertisement Legacy Error

 Advertisement legacy를 설치하는 과정에서 오류가 발생할 수 있다.

아래의 글을 참조한다.

 

2025.01.27 - [유니티/중급] - Unity Resolving Android Dependencies

 

Unity Resolving Android Dependencies

1. Resolving Android Dependecies infinite loading Error.  Editor version : Unity 2022.3.55f1 본 글의 오류는 유니티 패키지 중 하나인 Advertisement legacy를 설치한 후 발생한 문제이다.Advertisement legacy를 설치하고, 안드

notyu.tistory.com

 

 

 

reference

[1] https://learn.microsoft.com/ko-kr/dotnet/csharp/language-reference/keywords/namespace

 

네임스페이스 키워드 - C# reference

네임스페이스 키워드를 사용하여 관련 형식 및 기능 구성 - C# 참조

learn.microsoft.com

 

 

[2] 코드 출처. https://docs.unity.com/ads/en-us/manual/InitializingTheUnitySDK

 

Initializing the SDK in Unity

To initialize the SDK, you must reference your project’s Game ID for the appropriate platform. You can locate the Game ID from the Unity Ads Monetization dashboard by selecting the Monetization suite, navigating to your current project, then Settings in

docs.unity.com

 

 

728x90