이제 Admob 홈페이지에 들어가서 어플리케이션을 추가하고, 광고단위를 생성하면된다.
https://admob.google.com/intl/ko/home/
애드몹 홈페이지에서 어플리케이션과 광고단위를 추가했다면, 이제 유니티 프로젝트 내에 AdMob SDK를 추가해야한다.
아래의 홈페이지에 들어가서 최신버전을 다운받은 뒤, Asset>Import Package>Custom Package... 에서 선택하여 임포트 하면된다.
https://github.com/googleads/googleads-mobile-unity/releases
다음으로, 유니티 프로젝트 내에서 설정해주어야 하는 부분이 있다.
Asset>Google Mobile Ads > Settings 에 들어가면 public값으로 Android용과 IOS용 appID를 입력할 수 있는 부분이 나온다. 이부분을 작성해주지 않으면 나중에 에러가 날 수도 있다고 하니 작성해주자!
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using GoogleMobileAds.Api;
using System;
public class AdMobMgr : GameFramework
{
private InterstitialAd interstitial_ad;
private RewardedAd rewarded_ad;
public bool isTestMode = true;
// Start is called before the first frame update
void Start()
{
Debug.Log("start");
#if UNITY_ANDROID
string appID = "ca-app-pub-6724985341208967~5561639679";
#elif UNITY_IPHONE
string appID = "not defined";
#else
string appID = "unexpected_platform";
#endif
MobileAds.Initialize(appID);
this.RequestInterstitial(); //전면광고 초기화
this.RequestRewardedAd(); //보상형 광고 초기화
}
private void RequestInterstitial()
{
string adUnitId;
//TODO
/*
#if UNITY_ANDROID
adUnitId = "ca-app-pub-3940256099942544/1033173712";
#elif UNITY_IPHONE
adUnitId = "";
#else
adUnitId = "unexpected platform";
#endif
*/
adUnitId = isTestMode ? ##이부분에 test광고id : ##이부분에 실제 광고단위id;
this.interstitial_ad = new InterstitialAd(adUnitId);
this.interstitial_ad.OnAdFailedToLoad += HandleOnAdFailedToLoad;
this.interstitial_ad.OnAdClosed += HandleOnAdClosed;
AdRequest request = new AdRequest.Builder().Build();
this.interstitial_ad.LoadAd(request);
}
/// <summary>
/// 전면광고
/// </summary>
//광고가 닫혔을때, 메모리관리를 위해 destroy 후 다시 요청
public void HandleOnAdClosed(object sender, EventArgs e)
{
interstitial_ad.Destroy();
RequestInterstitial();
}
public void HandleOnAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
Debug.Log("failed to load ad");
//todo : 광고 로드에 실패했을 때 다른광고로드
}
//광고를 띄울때 사용하는 함수
public void ShowInterstitial()
{
if (this.interstitial_ad.IsLoaded())
{
this.interstitial_ad.Show();
}
else
{
RequestInterstitial();
}
}
/// <summary>
/// 보상형 광고
/// </summary>
///
private void RequestRewardedAd()
{
string adUnitId;
//TODO
/*
#if UNITY_ANDROID
adUnitId = #광고단위 아이디";
#elif UNITY_IPHONE
adUnitId = "";
#else
adUnitId = "unexpected platform";
#endif
*/
adUnitId = isTestMode ? ##이부분에 test광고id : ##이부분에 실제 광고단위id;
this.rewarded_ad = new RewardedAd(adUnitId);
this.rewarded_ad.OnAdFailedToLoad += HandleRewardedAdFailedToShow;
this.rewarded_ad.OnAdClosed += HandleRewardedAdClosed;
this.rewarded_ad.OnUserEarnedReward += HandleUserEarnedReward;
AdRequest request = new AdRequest.Builder().Build();
this.rewarded_ad.LoadAd(request);
}
public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args)
{
//todo : 에러났을때 다른광고 띄우는 것 구현
}
public void HandleRewardedAdClosed(object sender, EventArgs args)
{
RequestRewardedAd();
}
public void HandleUserEarnedReward(object sender, Reward args)
{
string type = args.Type;
double amount = args.Amount;
//todo : 보상설정
}
public void ShowRewardedAd()
{
if (this.rewarded_ad.IsLoaded())
{
this.rewarded_ad.Show();
}
else
{
RequestRewardedAd();
}
}
}
나의 경우에 필요한 광고는 전면광고와 리워드광고이다. 전면광고를 위한 Interstitial_ad 와, 리워드광고를 위한 rewarded_ad를 선언하였다.
RequestAd 함수의 경우 광고를 불러와 초기화하고 준비하는 함수이다.
UnitID는 admob에서 제공하는 광고단위 id를 적어야하는데, 안드로이드,ios에 따라 다르기떄문에 나누어서 설정해주었다. 광고가 닫히고나면 메모리를 절약하기 위해서 destroy를 해준뒤, 다시 초기화시켜준다.
'Unity' 카테고리의 다른 글
[Unity]룰렛 돌리기 (0) | 2020.02.01 |
---|---|
[error] 'Firebase.Editor.dll' will not not be loaded due to errors (0) | 2019.09.04 |
[error] Unable to install APK to device (0) | 2019.09.03 |
Unity에 Firebase 연동하고 Admob 설정하기 (1) (0) | 2019.09.02 |
[error] (Unity Organization) Failed to update Android SDK package list (0) | 2019.09.02 |