Unity
Unity에 Firebase 연동하고 Admob 설정하기 (2)
촙촙쓰
2019. 9. 3. 12:49
이제 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를 해준뒤, 다시 초기화시켜준다.