본문 바로가기
App && Game

[유니티] 애드몹 전면 광고 달기 / 추가하기

by 배애앰이 좋아 2023. 4. 5.
반응형

본 글은 애드몹 광고 다는 방법을 소개해주는 아래 두 블로그들

1. https://starlightbox.tistory.com/55

2. https://geukggom.tistory.com/147

을 바탕으로 따라한다가 막힌 부분에 대해서 추가적으로 작성하는 글입니다.

 

위에서 제시해준 또는 아래 적힌 코드를 그대로 사용하고 싶다면 무조건 Google Mobile Ads Unity Plugin v7.3.0 을 받아서 사용해줘야합니다. 최신 버전에서는 아래 코드를 사용할 수 없습니다. 이것 때문에 저는 몇시간을 버렸습니다...

 

기존 버전 받을 수 있는 링크 : 

 

https://github.com/googleads/googleads-mobile-unity/releases

 

Releases · googleads/googleads-mobile-unity

Official Unity Plugin for the Google Mobile Ads SDK - googleads/googleads-mobile-unity

github.com

 

< 광고 추가하고 띄우는 방법 >

 

- 광고 관련된 스크립트 하나 만들어주기

 

using GoogleMobileAds.Api;
using System;
using System.Collections;
using UnityEngine;
using UnityEngine.SceneManagement;

public class AdMobManager : MonoBehaviour
{
    private string adUnitId;
    private RewardedAd rewardedAd;

    public static AdMobManager instance;

    public System.Action<Reward> onHandleUserEarnedReward;
    public System.Action<AdFailedToLoadEventArgs> onHandleRewardedAdFailedToLoad;

    public System.Action onHandleRewardedAdFailedToShow;
    public System.Action onHandleRewardedAdClosed;

    private void Awake()
    {
        instance = this;
    }


    public void Init()
    {
        //adUnitId 설정
#if UNITY_EDITOR
        string adUnitId = "unused";
#elif UNITY_ANDROID
        adUnitId = "ca-app-pub-4727835752295775/5917816098";
        //adUnitId = "ca-app-pub-4727835752295775/5917816098";
#elif UNITY_IPHONE
        string adUnitId = "ca-app-pub-4727835752295775/5917816098";
#else
        string adUnitId = "unexpected_platform";
#endif

        // 모바일 광고 SDK를 초기화함.
        MobileAds.Initialize(initStatus => { });

        //광고 로드 : RewardedAd 객체의 loadAd메서드에 AdRequest 인스턴스를 넣음
        AdRequest request = new AdRequest.Builder().Build();
        this.rewardedAd = new RewardedAd(adUnitId);
        this.rewardedAd.LoadAd(request);


        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)
    {
        Debug.Log("HandleRewardedAdLoaded");
    }

    public void HandleRewardedAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
    {
        Debug.Log("HandleRewardedAdFailedToLoad");
        this.onHandleRewardedAdFailedToLoad(args);

    }

    public void HandleRewardedAdOpening(object sender, EventArgs args)
    {
        Debug.Log("HandleRewardedAdOpening");
    }

    public void HandleRewardedAdFailedToShow(object sender, EventArgs args)
    {
        Debug.Log("HandleRewardedAdFailedToShow");
        this.onHandleRewardedAdFailedToShow();
    }

    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {
        Debug.Log("HandleRewardedAdClosed");
        SceneManager.LoadScene(0);
        //SceneManager.LoadScene("Main", LoadSceneMode.Single);
        //this.onHandleRewardedAdClosed();
    }

    public void HandleUserEarnedReward(object sender, Reward args)
    {
        Debug.Log("HandleUserEarnedReward");
        //this.onHandleUserEarnedReward(args);

    }

    public bool IsLoaded()
    {
        return this.rewardedAd.IsLoaded();
    }

    public void ShowAds()
    {
        StartCoroutine(this.ShowAdsRoutine());
    }

    private IEnumerator ShowAdsRoutine()
    {
        while (true)
        {
            bool check = IsLoaded();
            if (check == true)
            {
                this.rewardedAd.Show();
                break;
            }
            else
            {
                Debug.Log("reward ad not loaded.");
            }

            yield return null;
        }
    }
}

 

위 부분에서 //adUnitId 설정 하는 부분은 자신의 앱 광고 아이디로 바꿔줘야하며 사용자가 광고를 보고 닫았을 때 어떤 장면으로 넘어가거나 무언가 이벤트를 주고 싶다면 public void HandleRewardedAdClosed(object sender, EventArgs args) 함수에서 설정해줍니다. 현재 코드 경우, 사용자가 광고를 닫으면 SceneManager.LoadScene(0); 를 통해서 처음 화면으로 돌아가게 설정해주었습니다.

 

참고로 위 스크립트는 아래 광고 띄우고 위해 코드 추가한 스크립트가 작동하는 Scene의 Hierachy 에 추가 되어있어야 합니다. ((아마 위치는 딱히 상관없는 듯 합니다))

 

참고 이미지

 

- 광고 띄우고 싶은 부분에 아래 코드 추가하기

 

AdMobManager.instance.Init();
AdMobManager.instance.ShowAds();

 

일단 이 정도로 코드를 통해 광고를 추가했습니다.

 

반응형

댓글