광고 게재위치

이 가이드에서는 Google 모바일 광고 Unity 플러그인의 광고 게재위치 기능을 사용하여 앱용 광고를 만들고 표시하는 방법을 설명합니다.

기본 요건

Google 모바일 광고 SDK 초기화

광고를 로드하기 전에 Action<InitializationStatus> 콜백과 함께 MobileAds.Initialize()를 호출하여 모바일 광고 SDK를 초기화합니다. 이 작업은 앱 실행 시 한 번만 처리하면 됩니다.

using GoogleMobileAds.Api;
using System.Collections.Generic;
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
    ...
    public void Start()
    {
        // Initialize the Mobile Ads SDK.
        MobileAds.Initialize((initStatus) =>
        {
            // SDK initialization is complete
        });
        ...
    }
}

광고 게재위치 만들기

Google 모바일 광고로 배너를 표시하려면 먼저 광고 게재위치를 만들고 구성해야 합니다. Unity 편집기의 Assets(애셋) > Google Mobile Ads(Google 모바일 광고) > Ad Placement(광고 게재위치)에서 배너 광고, 전면 광고 또는 보상형 광고 형식의 광고 게재위치를 선택할 수 있습니다. 그러면 세 개의 데모 광고 게재위치가 설정되어 사용할 수 있습니다.

새 광고 게재위치를 추가하려면 목록 끝에 있는 새 게재위치 추가 버튼을 클릭합니다. 검사기 보기에서 광고 게재위치를 구성할 수 있습니다.

광고 게재위치 구성

각 게재위치에는 다음과 같은 속성이 있습니다.

게재위치 이름
게재위치의 이름입니다. 장면에서 광고를 설정할 때 게재위치를 식별하는 데 사용됩니다.
광고 형식
배너 광고, 보상형 광고, 전면 광고 광고 유형입니다.
광고 단위 ID
Android 및 iOS용 배너 광고 단위 ID를 제공합니다. 광고 단위 ID를 하나 이상 제공해야 합니다.
장면 전반에 걸쳐 유지
이 옵션을 선택하면 장면이 변경되더라도 배너가 화면에 유지됩니다 (DontDestroyOnLoad와 같은 동작).
자동 로드 사용 설정됨
이 속성을 선택하면 광고 게재위치와 연결된 장면이 로드될 때 광고가 자동으로 로드됩니다.

다음 스크린샷은 My Awesome Banner라는 이름의 광고 게재위치의 예를 보여줍니다.

장면에 AdGameObject 추가

Unity 편집기에서 GameObject > Google 모바일 광고를 사용하여 배너 광고, 전면 광고 또는 보상형 광고 형식의 AdGameObject를 장면에 추가할 수 있습니다. 형식을 선택하여 활성 장면에 게재위치를 추가합니다.

장면에 AdGameObject를 추가하면 Unity 편집기의 계층 구조 보기에 광고를 나타내는 GameObject가 표시됩니다.

GameObject 자체의 이름을 변경하여 게재위치의 이름을 변경할 수 있습니다. 다음 스크린샷은 Banner Ad라는 AdGameObject의 예를 보여줍니다.

AdGameObject 설정

광고 게임 객체 (스크립트) 구성요소 설정의 검사기 뷰에서 장면의 AdGameObject를 구성할 수 있습니다.

광고 게재위치

구성된 게재위치의 드롭다운 목록에서 광고 게재위치를 선택합니다. 목록에는 올바른 형식의 광고 단위만 포함됩니다. 예를 들어 배너 광고 게임 객체의 경우 드롭다운에는 구성된 배너 광고 게재위치만 표시됩니다.

BannerAdGameObject 구성 (배너만 해당)

  • 크기 - 사용할 배너의 크기를 선택합니다.
    • 앵커 적응형 배너는 다음과 같은 옵션을 추가로 제공합니다.
      • 방향: 광고 높이를 계산하는 데 사용되는 기기 방향을 선택합니다.
      • 전체 화면 너비 사용: 이 옵션을 선택하면 배너가 전체 화면 너비를 차지합니다. 전체 화면 너비 사용 옵션을 선택 해제하면 화면의 너비 비율 (50~99%)을 조정할 수 있습니다.
    • 맞춤을 사용하면 배너 너비와 높이를 지정할 수 있습니다.
  • 광고 게재순위 - 배너를 게재할 위치를 선택합니다.

콜백

광고 콜백에 해당하는 함수를 구현할 수 있습니다. 예를 들어 배너 광고가 로드되지 않는 경우를 처리하려면 다음 단계를 따르세요.

  1. 광고 콜백과 호환되는 함수를 만듭니다.

    public void OnBannerAdFailedToLoad(string reason) {
        Debug.Log("Banner ad failed to load: " + reason);
    }
    
  2. 위의 함수가 포함된 스크립트를 장면의 GameObject에 연결합니다.

  3. + 버튼을 클릭한 다음 스크립트를 연결한 GameObject를 드래그 앤 드롭합니다.

  4. 광고 콜백에 연결할 함수를 선택합니다. 매개변수화된 광고 콜백의 경우 SDK에서 매개변수 값을 가져올 수 있도록 동적 변수를 허용하는 함수를 선택합니다.

스크립트의 AdGameObject 사용

스크립트에서 AdGameObject 인스턴스 가져오기

모든 AdGameObject 객체에는 편의 메서드 LoadAd()가 있습니다. 이렇게 하면 타겟팅되지 않은 일반 AdRequest가 포함된 광고가 로드됩니다. 타겟팅을 적용하려면 직접 구성한 광고 요청을 사용하여 LoadAd(AdRequest adRequest)를 사용해야 합니다.

AdGameObject의 인스턴스를 가져오려면 각 형식에 다음 메서드를 사용합니다.

MobileAds.Instance.GetAd<BannerAdGameObject>("AD_GAMEOBJECT_NAME");

반환된 BannerAdGameObject 객체에는 편의 메서드 Hide()Show()도 있습니다.

전면 광고

MobileAds.Instance.GetAd<InterstitialAdGameObject>("AD_GAMEOBJECT_NAME");

반환된 InterstitialAdGameObject 객체에는 편의 메서드 ShowIfLoaded()가 있습니다.

리워드 제공됨

MobileAds.Instance.GetAd<RewardedAdGameObject>("AD_GAMEOBJECT_NAME");

반환된 RewardedAdGameObject 객체에는 편의 메서드 ShowIfLoaded()가 있습니다.

예를 들어 BannerAdGameObject의 인스턴스를 가져와서 다음과 같이 로드할 수 있습니다.

using UnityEngine;

using GoogleMobileAds.Api;
using GoogleMobileAds.Placement;

public class BannerTestScript : MonoBehaviour
{
    BannerAdGameObject bannerAd;

    void Start()
    {
        bannerAd = MobileAds.Instance
            .GetAd<BannerAdGameObject>("AD_GAMEOBJECT_NAME");

        bannerAd.LoadAd();
        ...
    }
    ...
}

BannerAd라는 BannerAdGameObject가 있는 경우 다음과 같이 인스턴스를 가져올 수 있습니다.

MobileAds.Instance.GetAd<BannerAdGameObject>("BannerAd");

AdGameObject의 기본 광고 객체에 액세스

이러한 스니펫은 AdGameObject와 연결된 기본 광고 객체에 액세스하는 방법을 보여줍니다.

BannerAdGameObject bannerAd = MobileAds.Instance
    .GetAd<BannerAdGameObject>("AD_GAMEOBJECT_NAME");

// Access BannerView object
BannerView bannerView = bannerAd.BannerView;

전면 광고

InterstitialAdGameObject interstitialAdGameObject = MobileAds.Instance
    .GetAd<InterstitialAdGameObject>("AD_GAMEOBJECT_NAME");

// Access InterstitialAd object
InterstitialAd interstitialAd = interstitialAdGameObject.InterstitialAd;

리워드 제공됨

RewardedAdGameObject rewardedAdGameObject = MobileAds.Instance
    .Get<RewardedAdGameObject>("AD_GAMEOBJECT_NAME");

// Access RewardedAd object
RewardedAd rewardedAd = rewardedAdGameObject.RewardedAd;

전면 광고 표시

다음은 AdGameObject를 사용하여 전면 광고를 로드하고 게재하도록 게임을 구성하는 방법의 예입니다.

장면에 InterstitialAdGameObject를 추가하고 장면이 로드될 때 광고가 자동으로 로드되도록 자동 로드 사용 설정됨 기능을 사용 설정합니다.

다음으로, 다음과 같이 을 사용하여 SDK를 초기화했는지 확인합니다. SDK를 초기화하지 않은 경우 AdGameObject의 Auto Load(자동 로드) 기능이 작동하지 않습니다.

그런 다음 InterstitialAdGameObject.ShowIfLoaded() 함수를 호출하여 화면 전환 사이에 전면 광고를 표시합니다. 다음 코드는 장면 전환 사이에 전면 광고를 표시하는 예를 보여줍니다.

using UnityEngine;
using UnityEngine.SceneManagement;

using GoogleMobileAds.Api;
using GoogleMobileAds.Placement;

public class MainScene : MonoBehaviour
{
    InterstitialAdGameObject interstitialAd;

    void Start()
    {
        interstitialAd = MobileAds.Instance
            .GetAd<InterstitialAdGameObject>("interstitial");

        MobileAds.Initialize((initStatus) => {
            Debug.Log("Initialized MobileAds");
        });
    }

    public void OnClickShowGameSceneButton()
    {
        // Display an interstitial ad
        interstitialAd.ShowIfLoaded();

        // Load a scene named "GameScene"
        SceneManager.LoadScene("GameScene");
    }
}

광고 게재위치에서 자동 로드 기능을 사용 설정했으므로 광고를 명시적으로 요청하지 않아도 됩니다. 장면이 변경될 때 전면 광고가 준비된 경우 표시됩니다.

광고를 수동으로 요청하려면 광고 게재위치 검사기에서 자동 로드 기능을 사용 중지하고 대신 InterstitialAdGameObject.LoadAd() 함수를 호출합니다. 다음 코드 스니펫은 광고를 수동으로 요청하는 방법을 보여줍니다.

public class MainScene : MonoBehaviour
{
    InterstitialAdGameObject interstitialAd;

    void Start()
    {
        interstitialAd = MobileAds.Instance
            .GetAdGameObject<InterstitialAdGameObject>("interstitial");

        MobileAds.Initialize((initStatus) => {
            Debug.Log("MobileAds initialized");

            // Load an interstitial ad after the SDK initialization is complete
            interstitialAd.LoadAd();
        });
    }
    ...
}

'보상형 광고 보기' 버튼 상태 처리

다음은 광고 게재위치를 사용하여 '보상형 광고 보기' 버튼을 사용 설정하는 방법의 예입니다.

보상형 광고를 표시하는 데 사용할 Button GameObject (이 예에서는 이름이 Button)를 장면에 추가합니다. 이 버튼은 보상형 광고를 사용할 수 있는 경우에만 제공됩니다.

Start() 메서드에서 버튼의 활성 상태를 false로 변경합니다. 이렇게 하면 버튼이 장면에서 사라집니다.

public class MainScene : MonoBehaviour
{
    ...
    void Start()
    {
        GameObject.Find("Button").SetActive(false);
        ...
    }
}

장면에 RewardedAdGameObject를 추가하고 드롭다운에서 AdMob 데모 보상형 광고 광고 게재위치를 선택합니다.

RewardedAdGameObject 검사기의 Callbacks(콜백) 섹션에서 On Ad 로드()+ 버튼을 클릭하여 보상형 광고가 로드될 때 호출될 함수를 사용 설정합니다.

이전 단계에서 추가한 버튼 GameObject를 None (Object)(없음(객체)) 필드로 드래그 앤 드롭합니다. 드롭다운에서 호출할 함수를 선택합니다. No Function(함수 없음) > GameObject > SetActive(bool)를 클릭한 다음 true을 매개변수로 전송(SetActive(true) 호출)하도록 체크박스를 클릭합니다.

이 콜백 섹션에서는 RewardedAd.OnUserEarnedReward 이벤트가 실행될 때 호출되는 이벤트를 연결할 수도 있습니다. 자세한 내용은 이 섹션을 참고하세요.

다음으로, 클릭 시 보상형 광고가 표시되도록 버튼을 만듭니다. 버튼 검사기의 On Click() 콜백 섹션에서 + 버튼을 클릭하고 보상형 광고 게재위치 GameObject (이 예에서는 Rewarded Ad라는 이름)를 None (Object) 필드로 드래그 앤 드롭합니다.

그런 다음 RewardedAdGameObject.ShowIfLoaded() 함수를 버튼의 On Click() 콜백에 연결합니다.

마지막으로 SDK를 초기화해야 합니다. 다음 코드 스니펫은 이 예에서 사용되는 장면의 전체 코드입니다.

using UnityEngine;

using GoogleMobileAds.Api;

public class MainScene : MonoBehaviour
{
    void Start()
    {
        GameObject.Find("Button").SetActive(false);

        MobileAds.Initialize((initStatus) => {
            Debug.Log("Initialized MobileAds");
        });
    }
}

프로젝트를 실행하면 보상형 광고가 로드되어 게재할 준비가 되면 장면에 버튼이 표시됩니다.

RewardedAdGameObject의 리워드 콜백 구성

다음은 콜백 함수가 호출될 때 사용자에게 보상을 제공할 수 있도록 보상형 광고 게재위치에 보상형 콜백을 구성하는 방법의 예입니다.

새 스크립트를 만들고 다음과 같이 Reward를 매개변수로 허용하는 함수를 정의합니다.

using UnityEngine;
using GoogleMobileAds.Api;

class RewardedTestScript : MonoBehaviour {
    ...
    public void OnUserEarnedReward(Reward reward) {
        Debug.Log("OnUserEarnedReward: reward=" +
            reward.Type + ", amount=" + reward.Amount);
    }
    ...
}

RewardedTestScript 스크립트를 장면의 모든 GameObject (광고 게재위치 GameObject 제외)에 연결합니다. 이 예에서는 기본 카메라 GameObject에 연결되어 있습니다.

장면에 RewardedAdGameObject를 추가합니다. 그런 다음 RewardedAdGameObject 검사기의 콜백 섹션에서 + 사용자 획득 리워드 (리워드) 버튼을 클릭하여 사용자에게 보상이 부여될 때 함수를 호출할 수 있도록 합니다.

이전 단계에서 추가한 기본 카메라 GameObject를 None (Object)(없음(객체)) 필드로 드래그 앤 드롭합니다. 드롭다운에서 호출할 함수를 선택합니다. No Function(함수 없음) > RewardedTestScript > OnUserEarnedReward를 클릭합니다.

프로젝트를 실행하고 보상형 광고를 시청하면 광고 상호작용에 대한 보상을 받을 때 RewardedTestScript.OnUserEarnedReward()가 호출됩니다.