유니티/Admob

광고 넣기 (Google AdMob)

잼잼재미 2024. 4. 14. 11:24

 

 

광고 넣기


1. 기본 셋팅


Google AdMob 접속

https://apps.admob.com/v2/home?subid=kr-ko-ha-z-g-a-de!o3~17547741505~141599850121~%EC%95%A0%EB%93%9C%EB%AA%B9~e&_ga=2.82521494.1447179567.1713169856-971684977.1713169856

 

AdMob

이메일 또는 휴대전화

accounts.google.com

 

 

광고 생성

 

앱 - 앱 추가 클릭

 

 

 

앱 추가를 하면 앱의 검토가 필요하다. 광고 단위는 미리 생성가능하기 때문에 광고 단위를 추가한다.

 

 

 

원하는 광고단위를 선택한다.

 

 

 

앱 ID와 단위 ID를 확인 후, 완료 클릭

 

 

Unity plugin을 다운받은 후, 프로젝트에 Import

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

 

 

 

 

※ 구글 애드몹과 GPGS를 함께 사용하는 경우

플러그인을 둘 다 모두 Import하면, 빌드 시, 반드시 빌드 에러를 일으킨다.

 

 

 

두 플러그인 중, 이미 하나가 Import 되어 있는 경우, ExternalDependencyManager 체크 해제 후, Import 한다.

(GPGS -> Admob 순으로 설치 했음)

* GPGS와 Admob을 함께 사용하면, 위 방법을 사용해도 빌드 에러가 날 확률이 매우 높다. 함께 사용하지 말 것!

 

 

 

 

Platform을 Android로 변경해 주고 유니티 에디터를 껐다가 다시 킨다.

 

 

 

위의 항목이 활성화 된다면 Enable 해준다.

 

 

 

만약 위 항목이 활성화 되지 않는다면, 수동으로 실행한다.

 

 

위와 같이 에러가 뜨기 때문에, Google.IOS Resolver - General - Validate References 체크 해제를 하고 Apply 해준다.

 

 

 

 

위와 같은 에러가 뜬다면, Project Settings - Player - Other Settings - Configuration - Allow downloads over HTTP 에서 Always allowed로 변경한다.

 

 

 

Google Mobile Ads App ID 입력

 

* Android

 

애드몹 - 앱 - 앱 설정 - 앱 정보 - 앱 ID 를 복사해서 Android에 넣어준다.

 

 

* iOS 

iOS 통합 ID 입력 : ca-app-pub-3940256099942544~1458002511

 

 

2. 스크립트 작성


AdsManager

using UnityEngine;
using System;
using GoogleMobileAds.Api;

public class AdsManager : MonoBehaviour
{
    public bool IsTestMode; // TestMode 시, 인스펙터에서 클릭
    private RewardedAd _rewardedAd;
    private BannerView _bannerView;
    private string _adRewardUnitId;
    private string _adBannerUnitId;

    public void Init()
    {
        if(IsTestMode)
        {
            // 테스트용 ID
            _adRewardUnitId = "ca-app-pub-3940256099942544/5224354917";
            _adBannerUnitId = "ca-app-pub-3940256099942544/6300978111";
        }
        else
        {
            #if UNITY_ANDROID
            // 광고 ID
            _adRewardUnitId = "";
            _adBannerUnitId = "";
            #elif UNITY_IPHONE
            // 테스트용 ID
            _adRewardUnitId = "ca-app-pub-3940256099942544/1712485313";
            _adBannerUnitId = "ca-app-pub-3940256099942544/2934735716";
            #else
            _adRewardUnitId = "unused";
            _adBannerUnitId = "unused";
            #endif
        }

        MobileAds.Initialize((InitializationStatus initStatus) => { });
    }

    public void Release()
    {

    }

    #region Banner
    //광고 로드, 사용 시 호출
    public void LoadBannerAd()
    {
        if (_bannerView == null)
        {
            CreateBannerView();
        }

        var adRequest = new AdRequest();

        Debug.Log("Loading banner ad.");
        _bannerView.LoadAd(adRequest);
    }

    //광고 보여주기
    private void CreateBannerView()
    {
        Debug.Log("Creating banner view");

        if (_bannerView != null)
        {
            DestroyAd();
        }

        _bannerView = new BannerView(_adBannerUnitId, AdSize.Banner, AdPosition.Bottom);

        //적응형 배너(꽉찬 사이즈)
        //AdSize adaptiveSize = AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(AdSize.FullWidth);
        //_bannerView = new BannerView(_adBannerUnitId, adaptiveSize, AdPosition.Bottom);
    }

    //광고 표시
    private void ShowAd()
    {
        if (_bannerView != null)
        {
            Debug.Log("Show banner ad.");
            _bannerView.Show();
        }
        else
        {
            LoadBannerAd();
        }
    }

    //광고 숨기기
    private void HideAd()
    {
        if (_bannerView != null)
        {
            Debug.Log("Hide banner ad.");
            _bannerView.Hide();
        }
    }

    //광고 제거
    private void DestroyAd()
    {
        if (_bannerView != null)
        {
            Debug.Log("Destroying banner ad.");
            _bannerView.Destroy();
            _bannerView = null;
        }
    }

    private void ListenToAdEvents()
    {
        _bannerView.OnBannerAdLoaded += () =>
        {
            Debug.Log("Banner view loaded an ad with response : "
                + _bannerView.GetResponseInfo());
        };
        _bannerView.OnBannerAdLoadFailed += (LoadAdError error) =>
        {
            Debug.LogError("Banner view failed to load an ad with error : "
                + error);
        };
        _bannerView.OnAdPaid += (AdValue adValue) =>
        {
            Debug.Log(string.Format("Banner view paid {0} {1}.",
                adValue.Value,
                adValue.CurrencyCode));
        };
        _bannerView.OnAdImpressionRecorded += () =>
        {
            Debug.Log("Banner view recorded an impression.");
        };
        _bannerView.OnAdClicked += () =>
        {
            Debug.Log("Banner view was clicked.");
        };
        _bannerView.OnAdFullScreenContentOpened += (null);
        {
            Debug.Log("Banner view full screen content opened.");
        };
        _bannerView.OnAdFullScreenContentClosed += (null);
        {
            Debug.Log("Banner view full screen content closed.");
        };
    }
    #endregion

 #region Reward
    //사용 시, 호출
    public void LoadRewardedAd()
    {
        // Clean up the old ad before loading a new one.
        if (_rewardedAd != null)
        {
            _rewardedAd.Destroy();
            _rewardedAd = null;
        }

        // create our request used to load the ad.
        var adRequest = new AdRequest();

        // send the request to load the ad.
        RewardedAd.Load(_adRewardUnitId, adRequest,
            (RewardedAd ad, LoadAdError error) =>
            {
                // if error is not null, the load request failed.
                if (error != null || ad == null)
                {
                    Debug.LogError("Rewarded ad failed to load an ad " +
                                   "with error : " + error);
                    return;
                }

                Debug.Log("Rewarded ad loaded with response : "
                          + ad.GetResponseInfo());

                _rewardedAd = ad;
                RegisterEventHandlers(_rewardedAd);
                ShowRewardedAd();
            });
    }

    private void ShowRewardedAd()
    {
        if (_rewardedAd != null && _rewardedAd.CanShowAd())
        {
            _rewardedAd.Show((Reward reward) =>
            {
                // 광고 보상 입력       
            });
        }
    }

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

            // 광고 창을 닫을 때, 실행할 내용
        };
        // Raised when the ad failed to open full screen content.
        ad.OnAdFullScreenContentFailed += (AdError error) =>
        {
            Debug.LogError("Rewarded ad failed to open full screen content " +
                           "with error : " + error);
            LoadRewardedAd();
        };
    }
    #endregion
}

 

 

 

광고 ID를 복사해서 스크립트에 붙여넣어 준다.

 

 

※ 배너 사이즈

  • AdSize.Banner : 320x50
  • AdSize.MediumRectangle : 300x250

 

배너를 사용할 때, 다음 상수를 사용해서 사이즈를 변경할 수 있다.

 

 

※ 샘플 ID

어플을 출시하기 전에는 샘플 ID를 이용해야 한다. 그렇지 않으면 정책 위반에 걸릴 수 있다.

 

 

안드로이드 : https://developers.google.com/admob/android/test-ads?hl=ko

 

테스트 광고 사용 설정  |  Android  |  Google for Developers

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 테스트 광고 사용 설정 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 이 가이드에서는 광고 통합에

developers.google.com

 

ios : https://developers.google.com/admob/ios/test-ads?hl=ko

 

테스트 광고 사용 설정  |  iOS  |  Google for Developers

테스트를 용이하게 하기 위해 iOS용 광고 통합에서 테스트 광고를 수신하는 방법을 알아보세요.

developers.google.com

 

추후, 샘플 ID는 수정해서 빌드하면 된다.

 

 

3. 테스트 기기 설정


* 테스트 기기를 설정하지 않고 기기 테스트를 진행하면 계정 정지가 될 수 있다!!

 

 

 

Google AdMob - 설정 - 기기 테스트

 

 

 

 

  1. 기기 이름 : 자유롭게 설정
  2. 플랫폼 : Android 체크
  3. 광고 ID/IDFA : 우측의 찾는 방법을 클릭해서 기기의 광고 ID 입력
  4. 광고 검사기 : 테스트 기기에서 테스트 할 방법, 흔들기 클릭
  5. 저장 클릭

 

 

4. 검토 필요


 

위와 같이 승인 상태가 검토 필요라면, 준비됨으로 바꿔야 한다.

 

 

 

스토어 추가 클릭

 

 

 

등록한 앱 이름 검색, 추가 클릭

 

 

 

저장 클릭

 

 

 

승인 상태가 준비 중으로 변경된다. 검토 후, 준비 됨으로 변경된다.