본문 바로가기
게임/Unity

[Unity 이론] Admob 연동

by 신인용 2020. 2. 29.
반응형

Admob 연동

 

 

광고에는 여러가지 종류가 있는데, 이 글에서 알아볼 것은 두가지입니다.

1. 배너 광고

2. 리워드 광고

 

 

 

 

 

 

 

 

0. Admob 기본 세팅

 

 일단 유니티에 Admob 플러그인을 Import 하겠습니다.

Github에서 최신버전의 Admob 플러그인을 다운받아줍니다.

https://github.com/googleads/googleads-mobile-plugins/releases/latest

 

 

 

 

그리고 이 패키지를 유니티로 Import 해줍니다.

(2020.02.27 기준 최신 버전 4.2.1)

 

(참고!)

Google Play Services 플러그인과 같이 사용하신다면,

Admob 플러그인을 마지막에 Import 하시는 걸 추천합니다.

오류 가능성 때문...

 

 

 

 

 

 

 

 

 

 

 

그리고, Admob 계정이 있어야 하기에, 홈페이지에서 회원가입을 합니다.

https://admob.google.com/intl/ko_ALL/home/?gclid=EAIaIQobChMIjYGdmt7x5wIV17WWCh1ddQq6EAAYASAAEgIW3PD_BwE

 

회원가입 절차는 쉬우니 생략하겠습니다.

 

 

 

 

 

그리고 Admob과 앱을 연결시켜주겠습니다.

 

Admob 홈페이지에서 앱 추가를 합니다.

 

 

 

 

 아직 앱을 게시하지 않았다면 아니요를 선택하고,

앱 출시 이후에 Admob에 게시된 앱을 연결시켜 주어야 합니다.

(저는 게임 출시 6일 만에, Admob에서 검색이 되어 연결할 수 있었습니다.)

 

 

 

 

 

이름은 앱이름과 동일해야 합니다.

 

 

 

 

 

이렇게 간단하게 Admob에 앱을 추가할 수 있습니다.

그리고 앱 ID를 가져와서...

 

 

 

 

 

 

Unity에 Assets - Google Mobile Ads - Settings로 들어가서

Google AdMob에 Enabled 체크해주고,

App ID에 방금 가져온 ID를 추가해줘야 하지만.....

 

하지만! 정책위반이 무섭기 때문에, 여기에 sample ID를 넣어두고

출시하기 전에 저의 App ID를 넣어주도록 합니다.

 

sample ID: ca-app-pub-3940256099942544~3347511713

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 이제부터 배너광고와 리워드광고를 넣을 것인데, 하나 짚고 넘어가겠습니다.

 

 각각의 광고들은 고유한 광고ID를 가지고 있습니다.

제가 A라는 광고 하나를 만들게 되면, A에 대한 광고ID를 부여받습니다.

그런데 만약 부여된 실제 광고ID를 입력하고 테스트를 하다가 정책위반으로 계정이 정지될 수도 있습니다.

이를 예방하기 위해 Admob에서는 테스트 광고ID를 부여하는데 다음과 같습니다.

 

 ▷ 배너 광고 ID: ca-app-pub-3940256099942544/6300978111

 ▷ 리워드 광고 ID: ca-app-pub-3940256099942544/5224354917

 

 

 

1. 배너 광고

Admob 배너 공식문서

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

 

 

 

 

 

광고 단위에서 시작하기를 선택합니다.

 

 

 

광고 형식 중에선 배너를 선택합니다.

 

 

 

광고 단위 이름은 단순히 광고이름이기 때문에, 제가 구별할 수 있는 이름으로 정합니다.

그 외 설정은 개개인에 맞춰서 설정하시면 됩니다.

 

 

 

이렇게 배너광고가 생성되었고, 광고ID를 받을 수 있습니다.

 

 

 

 

 

1-1. 소스코드

 

Banner에도 종류가 여러가지가 있습니다.

위의 스크립트로 제어할 수 있는데,

AdSize는 아래 사진과 같고,

AdPosition은 Bottom, BottomLeft, BottomRight, Top, TopLeft, TopRight, Center. 총 7가지 위치가 있습니다.

 

 

배너 사이즈

 

 

 

 

 

 

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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
 
public class AdsManager : MonoBehaviour
{
    private string bannerID = "실제 광고ID";
    // 실제 광고 ID
    private string bannerTestID = "ca-app-pub-3940256099942544/6300978111";
    // 테스트 광고 ID, 지금은 테스트를 사용
 
    private BannerView bannerView;
 
    void Start()
    {
        InitBannerAd();
    }
 
 
    private void InitBannerAd()
    {
        string id = bannerTestID;
        bannerView = new BannerView(id, AdSize.MediumRectangle, AdPosition.Center);
        AdRequest request = new AdRequest.Builder().Build();
        bannerView.LoadAd(request);
        bannerView.Hide();
    }
 
 
    public void ToggleAd(bool active)
    {
        if (active) bannerView.Show(); // 배너 띄우기
        else bannerView.Hide(); // 배너 숨기기
    }
}
 
cs

 

 

 

Show
Hide

 

 

 

 

 

 

 

 

 

 

 

 

 

2. 리워드 광고

Admob 리워드 광고 공식 문서

https://developers.google.com/admob/unity/rewarded-ads?hl=ko

 

 

 

 

 광고 단위를 추가해줍니다.

 

 

 

광고 형식은 리워드를 선택합니다.

 

 

 

 

광고 단위 이름을 입력하고,

리워드 수량은 1을 입력하면 10을 받게 됩니다.

고급 설정은 개인에 맞추어서 설정합니다.

 

 

 

리워드 광고가 생성되고 광고ID를 확인할 수 있습니다.

 

 

 

 

 

2-1.소스코드

 

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
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
using UnityEngine.UI;
using System;
 
public class AdsManager : MonoBehaviour
{
    private string rewardID = "실제 광고ID";
    // 실제 광고 ID
    private string rewardTestID = "ca-app-pub-3940256099942544/5224354917";
    // 테스트 광고 ID, 지금은 테스트를 사용
 
    private RewardedAd rewardedAd;
 
    private bool rewarded = false;
    public Text tmp;
 
    void Start()
    {
        rewardedAd = new RewardedAd(rewardTestID);
        AdRequest request = new AdRequest.Builder().Build();
        rewardedAd.LoadAd(request); // 광고 로드
 
        rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        // 사용자가 광고를 끝까지 시청했을 때
        rewardedAd.OnAdClosed += HandleRewardedAdClosed;
        // 사용자가 광고를 중간에 닫았을 때
    }
 
    void Update()
    {
        if (rewarded)
        {
            tmp.text = "리워드 획득!!!";
            rewarded = false;
        }
    }
 
    public void UserChoseToWatchAd()
    {
        if (rewardedAd.IsLoaded()) // 광고가 로드 되었을 때
        {
            rewardedAd.Show(); // 광고 보여주기
        }
    }
 
    public void CreateAndLoadRewardedAd() // 광고 다시 로드하는 함수
    {
        rewardedAd = new RewardedAd(rewardTestID);
 
        rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
        rewardedAd.OnAdClosed += HandleRewardedAdClosed;
 
        AdRequest request = new AdRequest.Builder().Build();
        rewardedAd.LoadAd(request);
    }
 
    public void HandleRewardedAdClosed(object sender, EventArgs args)
    {  // 사용자가 광고를 닫았을 때
        CreateAndLoadRewardedAd();  // 광고 다시 로드
    }
 
    private void HandleUserEarnedReward(object sender, Reward e)
    {  // 광고를 다 봤을 때
        rewarded = true// 변수 true
    }
}
 
cs

 

여기서 제가 Update문에 rewarded가 true일 때 작동하는 방법으로 구현한 이유는,

저 HandleUserEarnedReward 이벤트의 매개변수들이 가끔 삑사리가 나서 (정확한 이유는 모르겠습니다..)

변수 하나만 true로 바꾸어주는 형태로 구현하니 잘 작동하였습니다.

 

 

 

기존 화면
Test 광고 실행
리워드 획득!!

 

 

 

중간에 동영상 닫고 다시 실행해도,

 

문제 없이 잘 로드되고, 실행되는 것을 확인했습니다.

 

 

 

 

 

 

반드시 출시 전에는 테스트 광고로 실행하고,

출시 할 때 실제 광고로 실행해야 합니다.

 

 

 

 

 

 

 

 

 

 

(참고) Admob 공식문서

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

 

반응형

댓글