본문 바로가기

Game/Unity

[iOS / Android] Unity에서 admob을 구현하는 방법

실은 매우 간단한 것이지만, 의외로 정보가 없을 수도있어서, 정리해 보겠습니다.

어딘가 잘못하고 있으면 미안합니다.

 

참고로 아래 공식 매뉴얼 방식이 일본어로 번역 된 때문에 이쪽에서도 확인 해보세요!

https://developers.google.com/mobile-ads-sdk/docs/games

 

1. SDK를 DL하자

먼저 위의 URL에서 admob SDK를 DL합시다!

페이지 중간 쯤에있는 "Download the plugin"에서 unitypackage을 DL 해주십시오.

sdk

github

 

GoogleMobileAds.unitypackage "라는 파일이 DL 있으면 OK입니다!

 

2. Unity에 가져 오려고!

Unity의 Assets> Import Package> Custom Package ...에서 방금 DL 한 unitypackage을 가져!

custom

 

Importing_package_과 _Untitled _-_ admob _-_ PC__Mac___Linux_Standalone

 

Unity 프로젝트에 아래의 폴더가 추가됩니다!

(버전이나 환경에 따라 약간 다를 가능성이 있습니다)

project

 

그러면 각 OS마다 대응합시다.

 

3. Android 대응

Android 대응하려면 아래에 조심할 필요가 있습니다.

· 「Google Play services」되는 것을 Android 폴더에 넣는다

(· AndroidManifest 편집) ← admob 이외 Manifest를 사용하는 경우

 

 

3-1. Google Play Services를 가져 오기

먼저 AndroidSDK에있는 "Google Play services"을 가져 봅시다.

AndroidSDK의 DL 방법 이라든지는 구글 선생님에게 각자 들어요 ... (미안)

※ Admob의 Unity 플러그인 버전 3.0.0에서 Google Play Services를 가져올 필요가 없어진 것 같습니다. 3.0.0 이후의 SDK를 사용하는 경우는 건너 뜁니다.

 

Google Play services 설치 방법이지만, Android SDK manager를 시작하여 설치합니다.

다음은 mac 버전의 Android SDK manager 위치. (android라는 녀석을 시작)

androidsdk_android

 

manager를? 시작되면 Extras 폴더에있는 "Google Play services"를 설치하십시오.

(Google Play services for Froyo라는 것도 있습니다 만, 이번은 필요 없습니다)

androidsdk

 

설치가 끝나면,

<android_sdk> / extras / google / google_play_services / libproject / google-play-services_lib /

에 설치되어 있다고 생각하기 때문에,

Unity의 Plugin 폴더> Android 폴더에 ぶち込み합니다.

project2

이것으로 OK!

 

3-2. AndroidManifest에 대해

기본적으로 admob 이외의 광고에서 Manifest를 사용하거나 직접 편집하는 것이 아니라면이 항목을 건너 뛰고 괜찮습니다.

Manifest를 변경하고있는 분은

1
2
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik"
        android:value="true" />

위와 같이,

unityplayer.ForwardNativeEventsToDalvik의 value를 true로합니다.

이것만으로 android 버전은 OK입니다.

4. iOS 버전 지원

iOS 버전은 admobSDK7.0.0에서 xcode 프레임 워크로 변경되어 있기 때문에,

xcode에서 작업을 수행해야합니다.

 

이 단계에서는 광고 표시 처리를 추가하지 않지만 とりえあず xcode 프로젝트를 빌드하라.

 

먼저 프레임 워크를 DL합시다.

https://developers.google.com/mobile-ads-sdk/download

iossdk

 

다음 프로젝트에 프레임 워크를 추가합니다.

방법으로 xcode에서 설정하는 방법과 Unity 측에서 설정하는 방법이 있습니다.

Unity5 이상을 사용하고있는 분은 Unity로 설정하는 것이 편하다고 생각합니다.

 

4-1. xcode에서 framework을 설정하는 경우

 

xcode

xcode의 "linkd Framework and Libraries"에서 admob에 필요한 프레임 워크를 추가합시다.

아래쪽에있는 + 버튼을 누르면 추가 할 수 있습니다.

필요한 것은 아래 (2015/2/25 현재)

  • AdSupport
  • AudioToolbox
  • AVFoundation
  • CoreGraphics
  • CoreTelephony
  • EventKit
  • EventKitUI
  • MessageUI
  • StoreKit
  • SystemConfiguration
  • GoogleMobileAds.framework (방금 DL 한 것)

입니다.

 

GoogleMobileAds.framework 이외는 xcode에 있으므로 검색 양식에서 찾아보세요.

 

GoogleMobileAds.framework는 "Add Other"를 선택합니다.

xcodeframework

frameworkopen

 

※ Unity5.3.1p2 현재 Unity에서 xcode 프로젝트를 덮어 (Append) 할 때 외부 Framework의 연결이 끊어지는 현상이 발생하고 있습니다. 
 해결 방법으로 Append 할 때마다 Add Other에서 .framework을 다시 추가해야합니다

 

4-2. Unity에서 framework을 설정하는 경우

 

Unity의 Plugins> iOS 아래에 넣고있는 .h 또는 .m 파일을 선택하면 
Inspector에서 사용하는 framework을 설정할 수 있습니다.

Untitled _-_ test _-​​_ Android__Personal___OpenGL_4_1_

여기에서 사용하는 framework에 체크를 넣어두면 
빌드 할 때 자동으로 xcode 측에서 설정되므로 매우 편리합니다.

admob에서 사용하는 framework은 아래와 같습니다 때문에, 체크합시다.

(2015/2/25 현재)

  • AdSupport
  • AudioToolbox
  • AVFoundation
  • CoreGraphics
  • CoreTelephony
  • EventKit
  • EventKitUI
  • MessageUI
  • StoreKit
  • SystemConfiguration

 

다음은 DL 한 GoogleMobileAds.framework를 Plugins> iOS 다음에 넣어보세요.

Untitled _-_ test _-​​_ Android__Personal___OpenGL_4_1_2

 

이제 Unity에서 빌드 한 것만으로 framework가 자동으로 설정됩니다.

※ windows에서 Unity를 사용하는 경우이 방법을 사용하면 xcode 측에서 잘 인식 해주지 않는 경우가 있습니다. Windows 분들은 솔직하게 xcode에서 .framework을 넣어 보자.

 

4-3. @improt에서 오류가 나오지 않게하기

 

framework를 추가하는 것만으로는 오류가 빌드 수 없기 때문에 xcode의 Build Settings> Apple LLVM 6.1 - Language - Modules 에있는 Enable Modules (C and Objective-C) 을 Yes 로 변경하십시오.



Unity-iPhone_xcodeproj

 

이상에서 Xcode 설정이 완료됩니다.

 

5. 광고를 보려고

광고를 표시하기위한 스크립트를 만듭시다.

"Scripts"폴더에 "admobManager"인 파일을 만듭니다.

아래 같은 느낌합니다.

비교적 적당한 때문에, 제대로 수정 사용 해주세요!

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
using UnityEngine;
using System.Collections;
using GoogleMobileAds.Api;
 
public class AdMobManager : MonoBehaviour {
    public string Android_Banner;
    public string Android_Interstitial;
    public string ios_Banner;
    public string ios_Interstitial;
 
    private InterstitialAd interstitial;
    private AdRequest request;
 
    bool is_close_interstitial = false;
 
    // Use this for initialization
    void Awake () {
        // 起動時にインタースティシャル広告をロードしておく
        RequestInterstitial ();
        // バナー広告を表示
        RequestBanner ();
    }
 
    // Update is called once per frame
    void Update () {
 
    }
 
    public void RequestBanner()
    {
        #if UNITY_ANDROID
        string adUnitId = Android_Banner;
        #elif UNITY_IPHONE
        string adUnitId = ios_Banner;
        #else
        string adUnitId = "unexpected_platform";
        #endif
 
        // Create a 320x50 banner at the top of the screen.
        BannerView bannerView = new BannerView(adUnitId, AdSize.Banner, AdPosition.Bottom);
        // Create an empty ad request.
        AdRequest request = new AdRequest.Builder().Build();
        // Load the banner with the request.
        bannerView.LoadAd(request);
    }
 
    public void RequestInterstitial()
    {
        #if UNITY_ANDROID
        string adUnitId = Android_Interstitial;
        #elif UNITY_IPHONE
        string adUnitId = ios_Interstitial;
        #else
        string adUnitId = "unexpected_platform";
        #endif
 
        if (is_close_interstitial == true) {
            interstitial.Destroy ();
        }
 
        // Initialize an InterstitialAd.
        interstitial = new InterstitialAd (adUnitId);
        // Create an empty ad request.
        request = new AdRequest.Builder ().Build ();
        // Load the interstitial with the request.
        interstitial.LoadAd (request);
 
        interstitial.AdClosed += HandleAdClosed;
 
        is_close_interstitial = false;
    }
 
    // インタースティシャル広告を閉じた時に走る
    void HandleAdClosed (object sender, System.EventArgs e)
    {
        is_close_interstitial = true;
    }
}

이 스크립트를 카메라 나름대로 빈 객체 나름대로 연결합니다.

admob_id

위 admob에서 발급 된 ID를 입력하십시오.

※ ID는 "광고 단위 ID '를 입력하십시오 (게시자 ID가 없습니다)

 

각각에 더 맛있는 느낌에 정의 해 주셨으면 합니다만, 쉽게 해설.

RequestBanner에서 배너 설정 RequestInterstitial에서 삽입 광고의 설정을 실시하고 있습니다.

Awake 2 개를 부르는 것으로, 실행시에 광고를로드하도록하고 있습니다.

 

RequestInterstitial에서

1
2
3
if (is_close_interstitial == true) {
    interstitial.Destroy ();
}

하고 있습니다 만, admob의 삽입 광고는 한번 표시하면 다시 사용할 수없는 일회용 타입 을 위해 사용한 후에 Destroy하도록하고 있습니다.

Destroy하지 않고 다시로드하면 메모리 사용량이 점점 증가하고 가므로주의하십시오.

 

HandleAdClosed은 삽입 광고가 닫힐 때 호출됩니다.

 

덧붙여서, 삽입 광고를 볼 때,

1
2
3
if (interstitial.IsLoaded()) {
    interstitial.Show();
}

로 표시 할 수 있으므로 표시하고 싶은 곳에서 전화하십시오.

 

이상.

네, 간단 하죠?

 

※ admob 구현하고 즉시 광고가 게재되지 않습니다. 아래 테스트를 시도하거나 여러 번 응용 프로그램을 다시 시작하려고합니다.

※ 또한, 테스트 버전도 빨리 나타나지 않는 경우가 있습니다. 어째서 나 자지 않아.

 

덧붙여서, 시뮬레이터로 표시 싶기도 테스트에서 보려는 경우

1
2
3
4
AdRequest request = new AdRequest.Builder()
    .AddTestDevice(AdRequest.TestDeviceSimulator)       // Simulator.
    .AddTestDevice("テストデバイスID"// My test iPod Touch 5.
    .Build();

처럼, .Build () 앞에 AddTestDevice로 쓰고 있습니다.

장치 ID하지만 xcode 나름 Android Device Monitor 나름으로 로그를 보면 장치 ID가 포함 된 로그가 뱉어 있기 때문에 그것을 보면 좋다고 생각합니다.

 

그 정도 변은 다른 자세하게 써주고있는 사이트가 많이 있으므로, 그 쪽을 봐 주시면 다행입니다!

 

이상입니다!

 

여담

덧붙여서이지만, admob 관리 화면에서 중재 (admob 기능을 사용하여 여러? 광고 회사의 광고를 표시하는 기능)를 활성화하면 쉽게 중재 사용할 수 있습니다.

 

각 광고 회사마다 필요한 SDK와 프레임 워크는 다르기 때문에 거기는 각각 조사 할 필요가 있지만,

그 필요한 파일을 Plugins 폴더에 넣어두면, 다음은 admob 관리 화면에서? 사용자 정의 할 수 있으므로 편리합니다.

간단한 비해서 효과가 크다 때문에 꼭 도전 해보세요!


출처 : http://games.genieus.co.jp/unity/admob_unity/


'Game > Unity' 카테고리의 다른 글

[Unity] Gang Of Four (GOF)  (0) 2016.01.06
[Unity] Picking  (0) 2015.12.18
Unity가 직면한 기술적 문제들  (0) 2015.11.02
[unity3d]게임 최적화 기법  (0) 2015.10.21
Unity에서 화면 외의 위치를​​ 검색하는 방법  (0) 2015.09.09