Ruya Games

유니티에 광고 넣기 2 - Admob 패키지 추가 & 스크립트 구현 본문

Unity/에셋 | 패키지

유니티에 광고 넣기 2 - Admob 패키지 추가 & 스크립트 구현

SadEvil 2023. 12. 10. 21:59

이전 글에서 애드몹에 앱과 광고 단위를 추가했습니다.

유니티에 광고 넣기 1 - 구글 애드몹 앱 추가 & 전면 광고 단위 만들기

 

 

유니티에 광고 넣기 1 - 구글 애드몹 앱 추가 & 전면 광고 단위 만들기

앱에 광고를 넣으려면 광고 플랫폼을 사용해야 합니다. 그중에서 구글 애드몹에서 광고를 추가하는 방법을 설명드릴게요. 일단은 구글 애드몹 가입을 해야합니다. 구글 아이디가 있다면 어렵지

ruyagames.tistory.com

 

이번엔 유니티에서 애드몹 패키지를 추가하고, 스크립트를 통해 앱에서 실제 광고를 표시해보겠습니다.


1. 애드몹 패키지 추가

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

이 github 페이지에서 Admob 유니티 플러그인을 다운로드할 수 있습니다.

스크롤해서 원하시는 버전을 다운받아줍니다. 저는 8.6.0버전을 다운받았습니다.

.unitypackage 파일을 다운받으시면 됩니다.

 

다운이 완료되면 unity가 켜져있는 상태에서 해당 파일을 열면, 자동으로 Import Asset이 진행됩니다.

Import 버튼을 클릭해서 에셋 설치를 완료해주세요.

 

설치가 완료됬다면, 애드몹에서 부여받은 앱id를 유니티 에디터상에서 기입해주어야합니다.

Assets > Google Mobile Ads > Settings... 로 들어가줍니다.

에셋을 설치했는데 해당 메뉴가 보이지 않는다면 유니티를 한번 껐다 켜주세요.

 

설정을 클릭하시면 인스펙터 창에서 세팅 화면이 표시되는데요. 여기서 앱 ID를 입력해줍니다.

앱 ID는 애드몹의 앱 설정에서 확인 가능합니다.

 

에디터에서 테스트하실땐 테스트 광고 ID를 사용해주세요.
AdMob 정책위반으로 이용제한에 걸릴수 있습니다.
전면 광고 테스트 앱 ID
* 안드로이드 : ca-app-pub-3940256099942544/1033173712
* iOS : ca-app-pub-3940256099942544/4411468910

 


2. 스크립트 구현

스크립트는 구글에서 제공해주는대로 사용하시면 됩니다.

https://developers.google.com/admob/unity/interstitial?hl=ko

 

전면 광고  |  Unity  |  Google for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. Switch to English 전면 광고 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. Interstitial ads are full-screen ads tha

developers.google.com

이 문서에 유니티에서 전면 광고를 표시하는 방법을 차근차근 설명해줍니다.

문서를 끝까지 따라하면 아래와 같은 코드가 완성됩니다.

using System;
using UnityEngine;
using GoogleMobileAds.Api;

public class FullScreenAdsManager : MonoBehaviour {
  
	public string adUnitID = "ca-app-pub-숫자/숫자";

  private InterstitialAd interstitialAd;
	
	void Awake() {
    MobileAds.Initialize((InitializationStatus status) => 
		    Debug.Log("AdMobInitialized"));
  }

	private void Start() {
		ShowInterstitialAd();
	}

	public void LoadInterstitialAd() {
		if (interstitialAd != null) {
			interstitialAd.Destroy();
			interstitialAd = null;
		}

		Debug.Log("Loading the interstitial ad.");

		var adRequest = new AdRequest();
		adRequest.Keywords.Add("unity-admob-sample");
		
		InterstitialAd.Load(adUnitID, adRequest, (InterstitialAd ad, LoadAdError error) => {
			if (error != null || ad == null) {
				Debug.LogError($"interstitial ad failed to load an ad with error : {error}");
				return;
			}

			Debug.Log($"Interstitial ad loaded with response : {ad.GetResponseInfo()}");

			interstitialAd = ad;
			RegisterEventHandlers(interstitialAd);
		});
	}

  public void ShowInterstitialAd() {
    if (interstitialAd != null && interstitialAd.CanShowAd()) {
      Debug.Log("Showing interstitial ad.");
      interstitialAd.Show();
    } else {
      Debug.LogError("Interstitial ad is not ready yet.");
    }
  }

	
	private void RegisterEventHandlers(InterstitialAd ad)
	{
		// Raised when the ad is estimated to have earned money.
		ad.OnAdPaid += (AdValue adValue) =>
		{
			Debug.Log(String.Format("Interstitial ad paid {0} {1}.",
				adValue.Value,
				adValue.CurrencyCode));
		};
		// Raised when an impression is recorded for an ad.
		ad.OnAdImpressionRecorded += () =>
		{
			Debug.Log("Interstitial ad recorded an impression.");
		};
		// Raised when a click is recorded for an ad.
		ad.OnAdClicked += () =>
		{
			Debug.Log("Interstitial ad was clicked.");
		};
		// Raised when an ad opened full screen content.
		ad.OnAdFullScreenContentOpened += () =>
		{
			Debug.Log("Interstitial ad full screen content opened.");
		};
		// Raised when the ad closed full screen content.
		ad.OnAdFullScreenContentClosed += () =>
		{
			Debug.Log("Interstitial ad full screen content closed.");
			LoadInterstitialAd();
    };
		// Raised when the ad failed to open full screen content.
		ad.OnAdFullScreenContentFailed += (AdError error) =>
		{
			Debug.LogError("Interstitial ad failed to open full screen content " +
			               "with error : " + error);
		};
	}

}

광고의 표시, 종료, 실패등 액션에 따라 앱에서 처리해야할 기능들이 있을텐데요. 그런 내용들은 RegisterEventHandlers() 함수에서 작성해주시면 됩니다. 이벤트에 따라 이미 다 구분이 되어있고, 주석으로 설명되있기 때문에, 쭉 보시고 각 상황에 맞는 기능들을 작성해주시면 됩니다.

 

위 코드에서 결국에 광고를 표시하는 함수는 ShowAd()입니다. 광고 표시를 원하는 씬에 저 클래스를 컴포넌트로 원하시는 게임 오브젝트에 추가하시고 원하는 타이밍에 맞게 ShowAd()를 호출해주시면 됩니다.

 

적용 결과인데요.

테스트 광고가 잘 표시되는걸 확인하실 수 있습니다.