Google Mobile Ads SDK (구글 애드몹) 를 사용하는 프로젝트를 XCode에서 빌드할 때


No visible @interface for 'GADUNativeCustomTemplateAd' declares the selector 'performClickOnAssetWithKey:customClickHandler:'


이런 에러가 발생한다면!?



GADUNativeCustomTemplateAd.h 파일로 이동합니다.


*nativeCustomTemplateAd 선언 부를 찾습니다.


@property(nonatomic, strong) GADUNativeCustomTemplateAd *nativeCustomTemplateAd;

위와 같이 되어있는 부분을


@property(nonatomic, strong) GADNativeCustomTemplateAd *nativeCustomTemplateAd;

이렇게 수정합니다. (GADU... -> GAD...)





다시 빌드하면 에러가 사라졌을 것입니다!



이번에는 유니티에 구글 애드몹 SDK를 연동하여 [Banner 광고][Interstitial 광고]를 달아보도록 하겠습니다.



우선 AdMob 홈페이지에 들어가서 회원가입 후 로그인 합니다.


Google AdMob 사이트 링크 : http://www.google.co.kr/admob





홈페이지에서 [수익 창출] -> [+새로운 앱에서 수익 창출] 합니다.





1. 앱 선택


이미 스토어에 올라간 앱이라면 [앱 검색]


개발 중인 앱이라면 [앱 직접 추가]


이미 추가된 앱의 광고를 생성하려면 [추가한 앱 중에서 선택]


본 포스팅에서는 개발 중인 앱이라 가정하고 [앱 직점 추가] 로 진행


앱 이름과 플랫폼을 선택 후 [앱 추가] 를 누릅니다.





이제 ca-app-pub 로 시작하는 앱 ID가 생성되었음을 볼 수 있습니다.


2. 광고 형식 선택 및 광고 단위 이름 지정


먼저 [배너] 를 선택해주고


[광고 유형] [자동 새로고침] [텍스트 광고 스타일] [광고 단위 이름] 모두 설정해주고 [저장] 을 누릅니다.





앱 ID와 마찬가지로 [광고 단위 ID] 도 생성되었습니다.


3. Firebase 애널리틱스 설정(선택사항)


Firebase 애널리틱스 관련 내용은 다음에 포스팅 할 예정이니 [건너 뛰기] 누릅니다.





4. 구현 안내 보기


Banner 광고 생성을 완료하였으니


Interstitial 광고(전면 광고)도 생성하기 위해 [다른 광고 단위 생성] 합니다.





[전면] 을 선택하고 


[광고 유형][게재빈도 설정][광고 단위 이름] 을 설정하고 [저장] 합니다.





배너 광고 단위와 전면 광고 단위가 잘 생성되었음을 볼 수 있습니다.


이제 본격적으로 유니티에 연동할 차례입니다.





우선 아래 링크에서 AdMob Unity Plugin(GoogleMobileAds.unitypackage)을 다운로드 받습니다.


Google AdMob Unity Plugin(v3.4.0) 다운로드 링크 : https://github.com/googleads/googleads-mobile-unity/releases/tag/v3.4.0


다운로드한 unitypackage를 유니티 프로젝트에 import 합니다.



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
using UnityEngine;
using System;
using GoogleMobileAds.Api;
 
public class AdMobManager : MonoBehaviour
{
    public string android_banner_id;
    public string ios_banner_id;
 
    public string android_interstitial_id;
    public string ios_interstitial_id;
 
    private BannerView bannerView;
    private InterstitialAd interstitialAd;
 
    public void Start()
    {
        RequestBannerAd();
        RequestInterstitialAd();
 
        ShowBannerAd();
    }
 
    public void RequestBannerAd()
    {
        string adUnitId = string.Empty;
 
#if UNITY_ANDROID
        adUnitId = android_banner_id;
#elif UNITY_IOS
        adUnitId = ios_bannerAdUnitId;
#endif
 
        bannerView = new BannerView(adUnitId, AdSize.SmartBanner, AdPosition.Top);
        AdRequest request = new AdRequest.Builder().Build();
 
        bannerView.LoadAd(request);
    }
 
    private void RequestInterstitialAd()
    {
        string adUnitId = string.Empty;
 
#if UNITY_ANDROID
        adUnitId = android_interstitial_id;
#elif UNITY_IOS
        adUnitId = ios_interstitialAdUnitId;
#endif
 
        interstitialAd = new InterstitialAd(adUnitId);
        AdRequest request = new AdRequest.Builder().Build();
 
        interstitialAd.LoadAd(request);
 
        interstitialAd.OnAdClosed += HandleOnInterstitialAdClosed;
    }
 
    public void HandleOnInterstitialAdClosed(object sender, EventArgs args)
    {
        print("HandleOnInterstitialAdClosed event received.");
 
        interstitialAd.Destroy();
 
        RequestInterstitialAd();
    }
 
    public void ShowBannerAd()
    {
        bannerView.Show();
    }
 
    public void ShowInterstitialAd()
    {
        if (!interstitialAd.IsLoaded())
        {
            RequestInterstitialAd();
            return;
        }
 
        interstitialAd.Show();
    }
 
}
 
cs



AdMobManager.cs를 생성하고 위 코드를 복사 붙여넣기 합니다.


빈 게임 오브젝트를 생성하고 AdMobManager.cs를 Add Componet 해줍니다.





플랫폼 별로, banner_id 와 interstitial_id 변수 값에 앞서 얻은 id를 각각 입력해줍니다.


AdMob은 RequestAd() 로 광고를 요청하고 요청에 성공하면 ShowAd()로 광고를 송출하는 형식입니다.


배너광고는 이니셜라이즈 시 Request 하고 바로 Show 합니다.


전면광고는 미리 Request 로 캐싱해 두다가 원하는 상황에 Show 한 후 광고가 닫히면 재요청하는 구조입니다.


메모리 누수를 방지하기 위해


HandleOnInterstitialAdClosed 콜백에서 interstitialAd.Destroy(); 를 해주도록 합니다.





BannerView를 생성할 때 파라미터로 사이즈와 위치를 조절할 수 있는데요


AdSize.SmartBanner 로 설정해주면 디바이스의 해상도에 맞춰서 자동으로 크기 조절이 되고


AdPosition 파라미터로 배너의 위치를 조절할 수 있습니다.





위 스크린샷은 배너가 AdPosition.Top 으로 설정된 모습입니다.


전면 광고는 게임 오버나 버프 지급 등 특정 상황에 송출하도록 합니다.


RequestInterstitialAd() 로 캐싱해 두었던 전면광고를


원하는 상황에 ShowAd() 해줌으로써 광고를 송출시킵니다.


광고 시청이 완료되면 HandleOnInterstitialAdClosed 콜백이 호출되는데


콜백 안에 광고 시청에 대한 보상을 지급하고 


RequestInterstitialAd() 로 소모된 광고를 미리 재 요청해놓습니다.





게임 내 애드몹 전면광고가 송출된 모습입니다.


이상으로 포스팅을 마치도록 하겠습니다.



+ Recent posts