[Unity] 애드몹 배너 광고 적용하기 (AdMob Banner) v3.17

Posted by Dev Park
2019. 5. 30. 10:37 Unity

유니티로 게임 개발을 하면서 많이 사용하는 애드몹을 이용한 배너 광고를 적용하는 방법입니다. 

유니티를 2019버전으로 업그레이드한 후 애드몹도 최신 버전으로 변경했습니다. 

사용한 버전은 Google Mobile Ads Unity Plugin v3.17 입니다.

 

1. 애드몹 가입 및 광고 단위 생성

애드몹을 사용하려면 먼저 가입을 해야하죠.

https://www.google.co.kr/admob/

 

애드몹 사이트로 가서 가입을 합니다. 가입을 하는건 특별히 어려운게 없으므로 생략하고 

가입 후 애드몹에 왼쪽 메뉴를 보시면 이라는 메뉴가 있습니다. 거기에서 앱 추가를 해서 등록하려는 앱을 추가해 줍니다. 

앱 추가를 누르면 위 와 같은 화면이 나올겁니다. 

이미 앱의 개발이 거의 끝나서 구글 플레이나 앱스토어에 등록을 하셨다면 를 선택하시고 

등록을 않했다면 아니요를 선택하시면됩니다. 

 

다음으로 앱의 이름을 입력한 후 플랫폼을 선택하고 추가를 눌러줍니다. 

앱이 추가되었으니 이제 광고 단위를 만들면 됩니다.

광고단위 만들기를 선택 한 후 배너 광고를 적용할거니까 배너를 선택합니다. 

사용할 광고 단위의 이름을 입력하고 광고 단위 만들기를 선택합니다. 고급 설정은 특별히 따로 설정하지 않아도 됩니다. 

이제 광고 단위가 만들어졌습니다. 배너 광고를 붙이기 위한 애드몹에서의 준비 과정은 완료 된거죠. 

참고로 위에 내용에도 설명되어 있지만 광고 게재를 시작하는데 최대 1시간이 걸릴 수 있다고하지만....

보통 더 걸릴수도 있습니다. 하루 넘게 걸릴때도 있고.. 예전엔 바로바로 되기도 했었는데 요즘은 정말 오래 걸리더군요. 

 

그리고 애드몹 광고는 유니티 에디터 상에서 볼수 없고, 빌드를 한 상태에서만 보이니 이점 참고하세요. 

 

2. 애드몹 플러그인을 설치

애드몹 광고를 유니티에서 사용하려면 애드몹 플러그인이 필요합니다 

 

여기에서 플러그인을 다운 받아서 설치합니다. 

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

https://developers.google.com/admob/unity/start

다운 받은 패키지를 유니티에 임포트 해줍니다. Assets - Import Package - Custom Package 로 파일을 불러오거나 그냥 파일을 유니티에 넣어도 될겁니다. 

혹시 설치 후 위 스샷 처럼 플러그인이 정상 설치가 안되었다면 빌드 셋팅이 안드로이드가 되어 있는지 확인해 보시고 

Play Services Resolver - Android Resolver - Resolve 를 한번 실행 해 줍니다. 

완료 되면 위 그림처럼 애드몹 플러그인이 설치됩니다. 

 

3. 코드 작성 / AndroidManifest.xml 

애드몹 SDK 17 버전부터는 AndroidManifest.xml 파일에 AdMob 앱 ID 추가해야 합니다. 예전엔 이런게 없었는데 뭐 추가해야 한다고 하니 추가를 해야겠죠. 

 

설치한 애드몹 플러그인에 AndroidManifest.xml 파일을 열어보면 

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.google.unity.ads"
    android:versionName="1.0"
    android:versionCode="1">
  <uses-sdk android:minSdkVersion="14"
      android:targetSdkVersion="19" />
  <application>
    <uses-library android:required="false" android:name="org.apache.http.legacy"/>
    <!-- Your AdMob App ID will look similar to this sample ID: ca-app-pub-3940256099942544~3347511713 -->
    <meta-data
    android:name="com.google.android.gms.ads.APPLICATION_ID"
    android:value="[ADMOB APPLICATION ID]"/>
  </application>
</manifest>

 이런식으로 이미 작성되어 있으니 [ADMOB APPLICATION ID] 이 부분에 아까 애드몹 사이트에서 앱 추가 시 생성된 앱 ID를 입력합니다. 

앱 ID는 보통 ca-app-pub-3940256099942544~3347511713(이건 테스트용 ID입니다.) 이런 식으로 되어 있습니다. 

 

그리고 이제 애드몹 광고에 사용될 코드를 작성합니다. 

using System;
using UnityEngine;
using GoogleMobileAds.Api;

public class AdmobAdManager : MonoBehaviour
{
    private BannerView banner;

    public void Start()
    {
#if UNITY_ANDROID
            string appId = "ca-app-pub-3940256099942544~3347511713";
#elif UNITY_IPHONE
            string appId = "ca-app-pub-3940256099942544~1458002511";
#else
            string appId = "unexpected_platform";
#endif
        // Initialize the Google Mobile Ads SDK.
        MobileAds.Initialize(appId);

        this.RequestBanner();
    }

    private void RequestBanner()
    {
#if UNITY_ANDROID
        string AdUnitID = "ca-app-pub-3940256099942544/6300978111"; //테스트 아이디
#else
        string AdUnitID = "unDefind";
#endif

        banner = new BannerView(AdUnitID, AdSize.SmartBanner, AdPosition.Bottom);

        // Called when an ad request has successfully loaded.
        banner.OnAdLoaded += HandleOnAdLoaded_banner;
        // Called when an ad request failed to load.
        banner.OnAdFailedToLoad += HandleOnAdFailedToLoad_banner;
        // Called when an ad is clicked.
        banner.OnAdOpening += HandleOnAdOpened_banner;
        // Called when the user returned from the app after an ad click.
        banner.OnAdClosed += HandleOnAdClosed_banner;
        // Called when the ad click caused the user to leave the application.
        banner.OnAdLeavingApplication += HandleOnAdLeavingApplication_banner;

        AdRequest request = new AdRequest.Builder().Build();

        banner.LoadAd(request);
    }

    public void ShowBanner()
    {
        banner.Show();
    }

    public void HideBanner()
    {
        banner.Hide();
    }

    public void HandleOnAdLoaded_banner(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleAdLoaded event received_banner");
    }

    public void HandleOnAdFailedToLoad_banner(object sender, AdFailedToLoadEventArgs args)
    {
        MonoBehaviour.print("HandleFailedToReceiveAd_banner event received with message: "
                            + args.Message);
    }

    public void HandleOnAdOpened_banner(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleAdOpened event received_banner");
    }

    public void HandleOnAdClosed_banner(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleAdClosed event received_banner");
    }

    public void HandleOnAdLeavingApplication_banner(object sender, EventArgs args)
    {
        MonoBehaviour.print("HandleAdLeavingApplication event received_banner");
    }

}

 

위 코드에 사용된 아이디는 애드몹에서 제공하는 테스트용 아이디 입니다. 

이전에는 광고 테스트를 하기 위해선 테스트용 기기를 등록해서 사용했어야 하지만 지금은 그냥 테스트 아이디만 사용하면 테스트 광고가 나오게 됩니다. 

 

코드 상에 

       // Called when an ad request has successfully loaded.
        banner.OnAdLoaded += HandleOnAdLoaded_banner;
        // Called when an ad request failed to load.
        banner.OnAdFailedToLoad += HandleOnAdFailedToLoad_banner;
        // Called when an ad is clicked.
        banner.OnAdOpening += HandleOnAdOpened_banner;
        // Called when the user returned from the app after an ad click.
        banner.OnAdClosed += HandleOnAdClosed_banner;
        // Called when the ad click caused the user to leave the application.
        banner.OnAdLeavingApplication += HandleOnAdLeavingApplication_banner;

 

이 부분과 아래 대응 함수들은 광고의 이벤트를 제어하는 부분입니다. 

그냥 광고가 보여지고 안보여지고 정도만 사용한다면 없어도 되는 부분입니다. 

 

    public void ShowBanner()
    {
        banner.Show();
    }

    public void HideBanner()
    {
        banner.Hide();
    }

 

배너 광고라고 하더라고 화면에서 보이지 않아야 하는 경우가 있으므로 

위 함수를 통해 원하는 타이밍에 광고를 보이거나 안보이게 합니다. 

작성한 코드를 애드몹을 관리할 새로운 오브젝트에 적용합니다. 

이제 유니티 에디터 상에서 플레이를 해봅니다. 

플레이 시 위 스샷 처럼 로그가 나오면 정상적으로 작동하는 겁니다. 

이제 빌드를 해서 정상적으로 배너가 나오는지 확인합니다. 

이렇게 배너가 나오면 성공입니다. 

예제는 하단 배너를 사용했지만 배너의 위치나 배너의 종류를 설정하고 싶으면 

코드의 

banner = new BannerView(AdUnitID, AdSize.SmartBanner, AdPosition.Bottom);

이부분을 수정하시면 됩니다. 예제는 SmartBanner와 Bottom(하단) 포지션을 사용했으니 화면 상단에 나오게 하려면 

 AdPosition.Top 으로 하면 됩니다. 

 

4. 광고 안보임 No Fill 오류 

광고가 테스트 ID를 사용할때는 잘 나오다가 실제 광고 단위 ID를 사용하면 안보이는 경우 

No fill 어쩌고 저쩌고 하는 오류가 나옵니다. 이 오류는 표시될 광고가 아직 준비되지 않아서 안보이는 경우로 기다리다 보면 광고가 보이게 됩니다. 

 

애드몹에서는 최대 1시간이라고 하고 있지만... 보통은 하루 정도 걸리는거 같고 

느릴경우 몇일이 걸릴 수 도 있습니다.