광고 넣기
1. 기본 셋팅
Google AdMob 접속
광고 생성
앱 - 앱 추가 클릭
앱 추가를 하면 앱의 검토가 필요하다. 광고 단위는 미리 생성가능하기 때문에 광고 단위를 추가한다.
원하는 광고단위를 선택한다.
앱 ID와 단위 ID를 확인 후, 완료 클릭
Unity plugin을 다운받은 후, 프로젝트에 Import
https://github.com/googleads/googleads-mobile-unity/releases
※ 구글 애드몹과 GPGS를 함께 사용하는 경우
플러그인을 둘 다 모두 Import하면, 빌드 시, 반드시 빌드 에러를 일으킨다.
두 플러그인 중, 이미 하나가 Import 되어 있는 경우, ExternalDependencyManager 체크 해제 후, Import 한다.
(GPGS -> Admob 순으로 설치 했음)
* GPGS와 Admob을 함께 사용하면, 위 방법을 사용해도 빌드 에러가 날 확률이 매우 높다. 함께 사용하지 말 것!
Platform을 Android로 변경해 주고 유니티 에디터를 껐다가 다시 킨다.
위의 항목이 활성화 된다면 Enable 해준다.
만약 위 항목이 활성화 되지 않는다면, 수동으로 실행한다.
위와 같이 에러가 뜨기 때문에, Google.IOS Resolver - General - Validate References 체크 해제를 하고 Apply 해준다.
위와 같은 에러가 뜬다면, Project Settings - Player - Other Settings - Configuration - Allow downloads over HTTP 에서 Always allowed로 변경한다.
Google Mobile Ads App ID 입력
* Android
애드몹 - 앱 - 앱 설정 - 앱 정보 - 앱 ID 를 복사해서 Android에 넣어준다.
* iOS
iOS 통합 ID 입력 : ca-app-pub-3940256099942544~1458002511
2. 스크립트 작성
AdsManager
using UnityEngine;
using System;
using GoogleMobileAds.Api;
public class AdsManager : MonoBehaviour
{
public bool IsTestMode; // TestMode 시, 인스펙터에서 클릭
private RewardedAd _rewardedAd;
private BannerView _bannerView;
private string _adRewardUnitId;
private string _adBannerUnitId;
public void Init()
{
if(IsTestMode)
{
// 테스트용 ID
_adRewardUnitId = "ca-app-pub-3940256099942544/5224354917";
_adBannerUnitId = "ca-app-pub-3940256099942544/6300978111";
}
else
{
#if UNITY_ANDROID
// 광고 ID
_adRewardUnitId = "";
_adBannerUnitId = "";
#elif UNITY_IPHONE
// 테스트용 ID
_adRewardUnitId = "ca-app-pub-3940256099942544/1712485313";
_adBannerUnitId = "ca-app-pub-3940256099942544/2934735716";
#else
_adRewardUnitId = "unused";
_adBannerUnitId = "unused";
#endif
}
MobileAds.Initialize((InitializationStatus initStatus) => { });
}
public void Release()
{
}
#region Banner
//광고 로드, 사용 시 호출
public void LoadBannerAd()
{
if (_bannerView == null)
{
CreateBannerView();
}
var adRequest = new AdRequest();
Debug.Log("Loading banner ad.");
_bannerView.LoadAd(adRequest);
}
//광고 보여주기
private void CreateBannerView()
{
Debug.Log("Creating banner view");
if (_bannerView != null)
{
DestroyAd();
}
_bannerView = new BannerView(_adBannerUnitId, AdSize.Banner, AdPosition.Bottom);
//적응형 배너(꽉찬 사이즈)
//AdSize adaptiveSize = AdSize.GetCurrentOrientationAnchoredAdaptiveBannerAdSizeWithWidth(AdSize.FullWidth);
//_bannerView = new BannerView(_adBannerUnitId, adaptiveSize, AdPosition.Bottom);
}
//광고 표시
private void ShowAd()
{
if (_bannerView != null)
{
Debug.Log("Show banner ad.");
_bannerView.Show();
}
else
{
LoadBannerAd();
}
}
//광고 숨기기
private void HideAd()
{
if (_bannerView != null)
{
Debug.Log("Hide banner ad.");
_bannerView.Hide();
}
}
//광고 제거
private void DestroyAd()
{
if (_bannerView != null)
{
Debug.Log("Destroying banner ad.");
_bannerView.Destroy();
_bannerView = null;
}
}
private void ListenToAdEvents()
{
_bannerView.OnBannerAdLoaded += () =>
{
Debug.Log("Banner view loaded an ad with response : "
+ _bannerView.GetResponseInfo());
};
_bannerView.OnBannerAdLoadFailed += (LoadAdError error) =>
{
Debug.LogError("Banner view failed to load an ad with error : "
+ error);
};
_bannerView.OnAdPaid += (AdValue adValue) =>
{
Debug.Log(string.Format("Banner view paid {0} {1}.",
adValue.Value,
adValue.CurrencyCode));
};
_bannerView.OnAdImpressionRecorded += () =>
{
Debug.Log("Banner view recorded an impression.");
};
_bannerView.OnAdClicked += () =>
{
Debug.Log("Banner view was clicked.");
};
_bannerView.OnAdFullScreenContentOpened += (null);
{
Debug.Log("Banner view full screen content opened.");
};
_bannerView.OnAdFullScreenContentClosed += (null);
{
Debug.Log("Banner view full screen content closed.");
};
}
#endregion
#region Reward
//사용 시, 호출
public void LoadRewardedAd()
{
// Clean up the old ad before loading a new one.
if (_rewardedAd != null)
{
_rewardedAd.Destroy();
_rewardedAd = null;
}
// create our request used to load the ad.
var adRequest = new AdRequest();
// send the request to load the ad.
RewardedAd.Load(_adRewardUnitId, adRequest,
(RewardedAd ad, LoadAdError error) =>
{
// if error is not null, the load request failed.
if (error != null || ad == null)
{
Debug.LogError("Rewarded ad failed to load an ad " +
"with error : " + error);
return;
}
Debug.Log("Rewarded ad loaded with response : "
+ ad.GetResponseInfo());
_rewardedAd = ad;
RegisterEventHandlers(_rewardedAd);
ShowRewardedAd();
});
}
private void ShowRewardedAd()
{
if (_rewardedAd != null && _rewardedAd.CanShowAd())
{
_rewardedAd.Show((Reward reward) =>
{
// 광고 보상 입력
});
}
}
private void RegisterEventHandlers(RewardedAd ad)
{
// Raised when the ad is estimated to have earned money.
ad.OnAdPaid += (AdValue adValue) =>
{
Debug.Log(String.Format("Rewarded ad paid {0} {1}.",
adValue.Value,
adValue.CurrencyCode));
};
// Raised when an impression is recorded for an ad.
ad.OnAdImpressionRecorded += () =>
{
Debug.Log("Rewarded ad recorded an impression.");
};
// Raised when a click is recorded for an ad.
ad.OnAdClicked += () =>
{
Debug.Log("Rewarded ad was clicked.");
};
// Raised when an ad opened full screen content.
ad.OnAdFullScreenContentOpened += () =>
{
Debug.Log("Rewarded ad full screen content opened.");
};
// Raised when the ad closed full screen content.
ad.OnAdFullScreenContentClosed += () =>
{
Debug.Log("Rewarded ad full screen content closed.");
// 광고 창을 닫을 때, 실행할 내용
};
// Raised when the ad failed to open full screen content.
ad.OnAdFullScreenContentFailed += (AdError error) =>
{
Debug.LogError("Rewarded ad failed to open full screen content " +
"with error : " + error);
LoadRewardedAd();
};
}
#endregion
}
광고 ID를 복사해서 스크립트에 붙여넣어 준다.
※ 배너 사이즈
- AdSize.Banner : 320x50
- AdSize.MediumRectangle : 300x250
배너를 사용할 때, 다음 상수를 사용해서 사이즈를 변경할 수 있다.
※ 샘플 ID
어플을 출시하기 전에는 샘플 ID를 이용해야 한다. 그렇지 않으면 정책 위반에 걸릴 수 있다.
안드로이드 : https://developers.google.com/admob/android/test-ads?hl=ko
ios : https://developers.google.com/admob/ios/test-ads?hl=ko
추후, 샘플 ID는 수정해서 빌드하면 된다.
3. 테스트 기기 설정
* 테스트 기기를 설정하지 않고 기기 테스트를 진행하면 계정 정지가 될 수 있다!!
Google AdMob - 설정 - 기기 테스트
- 기기 이름 : 자유롭게 설정
- 플랫폼 : Android 체크
- 광고 ID/IDFA : 우측의 찾는 방법을 클릭해서 기기의 광고 ID 입력
- 광고 검사기 : 테스트 기기에서 테스트 할 방법, 흔들기 클릭
- 저장 클릭
4. 검토 필요
위와 같이 승인 상태가 검토 필요라면, 준비됨으로 바꿔야 한다.
스토어 추가 클릭
등록한 앱 이름 검색, 추가 클릭
저장 클릭
승인 상태가 준비 중으로 변경된다. 검토 후, 준비 됨으로 변경된다.