보상형 광고는 상호작용하는 사용자에게 인앱 보상을 제공하는 광고입니다. 이 가이드에서는 AdMob에서 Unity 앱에 보상형 광고를 통합하는 방법을 설명합니다. 고객 성공사례인 우수사례 1과 우수사례 2를 읽어보세요.
기본 요건
- Unity 플러그인 3.16.0 이상
- 시작하기를 모두 읽어보세요. Unity 앱에 Google 모바일 광고 Unity 플러그인이 있어야 합니다.
보상형 광고 객체 만들기
보상형 광고는 RewardedAd
객체에 의해 요청 및 표시됩니다. 보상형 광고를 게재하려면 먼저
광고 로드에 사용할 광고 단위 ID가 있는 생성자를 호출하여
RewardedAd
객체를 인스턴스화해야 합니다. 이 단계는
다음 코드 스니펫에 제시되어 있습니다.
Unity 편집기를 사용하여 보다 쉽게 광고를 통합하려면 새로운 광고 게재위치 베타를 사용해 보세요.
using UnityEngine.Events; using UnityEngine; using GoogleMobileAds.Api; using GoogleMobileAds.Common; using UnityEngine.UI; using System; using System.Collections.Generic; public class GoogleMobileAdsDemoScript : MonoBehaviour { private RewardedAd rewardedAd; ... public void Start() { ... this.rewardedAd = new RewardedAd(adUnitId); } }
항상 테스트 광고로 테스트
앱을 제작하고 테스트할 때는 운영 중인 실제 광고 대신 테스트 광고를 사용하세요. 이렇게 하지 않으면 계정이 정지될 수 있습니다.
테스트 광고를 로드하는 가장 쉬운 방법은 Android 및 iOS 보상형 광고 전용 테스트 광고 단위 ID를 사용하는 것입니다.
Android
ca-app-pub-3940256099942544/5224354917
iOS
ca-app-pub-3940256099942544/1712485313
이 ID는 모든 요청에 대해 테스트 광고를 반환하도록 특별히 구성되었으며, 코딩, 테스트 및 디버깅 중에 앱에서 자유롭게 사용할 수 있습니다. 앱을 게시하기 전에 이 ID를 자체 광고 단위 ID로 바꿔야 합니다.
모바일 광고 SDK의 테스트 광고가 작동하는 방식을 자세히 알아보려면 테스트 광고를 참조하세요.
광고 로드하기
보상형 광고를 로드하려면 RewardedAd
객체의 loadAd()
메소드를 호출해야 합니다. 이
메소드에는 AdRequest
인스턴스가 인수로 필요합니다.
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
private RewardedAd rewardedAd;
...
public void Start()
{
...
this.rewardedAd = new RewardedAd(adUnitId);
// Create an empty ad request.
AdRequest request = new AdRequest.Builder().Build();
// Load the rewarded ad with the request.
this.rewardedAd.LoadAd(request);
}
}
광고 이벤트
광고의 작동 방식을 추가로 맞춤설정하려는 경우 광고의 수명 주기(예: 로드, 열기, 닫기 등)에서 여러 이벤트에 연결할 수 있습니다. 적절한 이벤트 핸들러에 대한 대리자를 등록하여
이러한 이벤트를 수신합니다. 가장
중요한 이벤트는 OnUserEarnedReward
로
사용자가 동영상 시청에 대한 보상을 받을 때 호출됩니다. 다음과 같이 다른 광고 이벤트를 구현할 수도
있습니다.
using GoogleMobileAds.Api; ... public class GoogleMobileAdsDemoScript : MonoBehaviour { private RewardedAd rewardedAd; ... public void Start() { string adUnitId; #if UNITY_ANDROID adUnitId = "ca-app-pub-3940256099942544/5224354917"; #elif UNITY_IPHONE adUnitId = "ca-app-pub-3940256099942544/1712485313"; #else adUnitId = "unexpected_platform"; #endif this.rewardedAd = new RewardedAd(adUnitId); // Called when an ad request has successfully loaded. this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded; // Called when an ad request failed to load. this.rewardedAd.OnAdFailedToLoad += HandleRewardedAdFailedToLoad; // Called when an ad is shown. this.rewardedAd.OnAdOpening += HandleRewardedAdOpening; // Called when an ad request failed to show. this.rewardedAd.OnAdFailedToShow += HandleRewardedAdFailedToShow; // Called when the user should be rewarded for interacting with the ad. this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward; // Called when the ad is closed. this.rewardedAd.OnAdClosed += HandleRewardedAdClosed; // Create an empty ad request. AdRequest request = new AdRequest.Builder().Build(); // Load the rewarded ad with the request. this.rewardedAd.LoadAd(request); } public void HandleRewardedAdLoaded(object sender, EventArgs args) { MonoBehaviour.print("HandleRewardedAdLoaded event received"); } public void HandleRewardedAdFailedToLoad(object sender, AdFailedToLoadEventArgs args) { MonoBehaviour.print( "HandleRewardedAdFailedToLoad event received with message: " + args.Message); } public void HandleRewardedAdOpening(object sender, EventArgs args) { MonoBehaviour.print("HandleRewardedAdOpening event received"); } public void HandleRewardedAdFailedToShow(object sender, AdErrorEventArgs args) { MonoBehaviour.print( "HandleRewardedAdFailedToShow event received with message: " + args.Message); } public void HandleRewardedAdClosed(object sender, EventArgs args) { MonoBehaviour.print("HandleRewardedAdClosed event received"); } public void HandleUserEarnedReward(object sender, Reward args) { string type = args.Type; double amount = args.Amount; MonoBehaviour.print( "HandleRewardedAdRewarded event received for " + amount.ToString() + " " + type); } }
OnUserEarnedReward
이벤트는 특수 이벤트 인수를 제공합니다. 이 인수는
사용자에게 지급되는 보상을 설명하는
Type
및 Amount
가 포함된 Reward
인스턴스를 전달합니다.
public void HandleUserEarnedReward(object sender, Reward args)
{
string type = args.Type;
double amount = args.Amount;
MonoBehaviour.print(
"HandleRewardedAdRewarded event received for "
+ amount.ToString() + " " + type);
}
사용 가능한 광고 이벤트
OnAdLoaded
- 광고 로드가 완료될 때 실행됩니다.
OnAdFailedToLoad
- 광고 로드에 실패할 때 실행됩니다. 제공된
AdErrorEventArgs
의Message
속성은 발생한 실패의 유형을 설명합니다. OnAdOpening
- 광고가 표시될 때 실행되며 기기 화면을 덮습니다. 이때 필요한 경우 앱의 오디오 출력 또는 게임 루프를 일시중지하는 것이 좋습니다.
OnAdFailedToShow
- 광고 표시에 실패할 때 실행됩니다. 제공된
AdErrorEventArgs
의Message
속성은 발생한 실패의 유형을 설명합니다. OnUserEarnedReward
- 사용자가 동영상 시청에 대한 보상을 받아야 할 때 실행됩니다.
Reward
매개변수는 사용자에게 제공되는 보상을 설명합니다. OnAdClosed
- 사용자가 닫기 아이콘을 탭하거나 뒤로 버튼을 사용하여 보상형 동영상 광고를 닫을 때 실행됩니다. 앱에서 오디오 출력 또는 게임 루프를 일시중지했을 때 이 메소드로 재개하면 편리합니다.
광고 게재
보상형 광고를 게재하기 전에 사용자에게 보상을 대가로 보상형 광고 콘텐츠를 시청할지 여부를 명확히 선택할 수 있는 옵션을 제공해야 합니다. 보상형 광고에는 항상 선택 옵션을 제공해야 합니다.
보상형 동영상 광고를 표시하려면 IsLoaded()
메소드를 사용하여 로드가 완료되었는지 확인한 다음
show()
를 호출하세요. 다음은 이 작업의 실행 방법을 보여주는 예입니다.
private void UserChoseToWatchAd()
{
if (this.rewardedAd.IsLoaded()) {
this.rewardedAd.Show();
}
}
OnAdClosed
를 사용하여 다음 보상형 광고 미리 로드
RewardedAd
는 일회용 객체입니다. 즉, 보상형 광고가 표시된 후에는
이 객체를 사용해 다른 광고를 로드할 수 없습니다. 다른 보상형 광고를 요청하려면
새 RewardedAd
객체를 만들어야 합니다.
이전 광고가 닫힌 직후에
다음 보상형 광고가 로드되기 시작하도록 OnAdClosed
광고 이벤트에서 다른 보상형 광고를
로드하는 것이 좋습니다.
... public class GoogleMobileAdsDemoScript : MonoBehaviour { private RewardedAd rewardedAd; ... public void CreateAndLoadRewardedAd() { #if UNITY_ANDROID string adUnitId = "ca-app-pub-3940256099942544/5224354917"; #elif UNITY_IPHONE string adUnitId = "ca-app-pub-3940256099942544/1712485313"; #else string adUnitId = "unexpected_platform"; #endif this.rewardedAd = new RewardedAd(adUnitId); this.rewardedAd.OnAdLoaded += HandleRewardedAdLoaded; this.rewardedAd.OnUserEarnedReward += HandleUserEarnedReward; this.rewardedAd.OnAdClosed += HandleRewardedAdClosed; // Create an empty ad request. AdRequest request = new AdRequest.Builder().Build(); // Load the rewarded ad with the request. this.rewardedAd.LoadAd(request); } ... public void HandleRewardedAdClosed(object sender, EventArgs args) { this.CreateAndLoadRewardedAd(); } }
여러 보상형 광고 로드
다수의 보상형 광고를 로드하려면 보상형 광고 객체 만들기 및 광고 로드 섹션에 안내된 단계를 로드할 광고마다 적용하세요. 아래의 코드 스니펫에는 두 광고 게재위치에 2개의 보상형 광고를 로드하는 방법이 나와 있습니다.
...
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
private RewardedAd gameOverRewardedAd;
private RewardedAd extraCoinsRewardedAd;
...
public void Start()
{
...
this.gameOverRewardedAd = CreateAndLoadRewardedAd(adUnitId);
this.extraCoinsRewardedAd = CreateAndLoadRewardedAd(adUnitId);
}
public RewardedAd CreateAndLoadRewardedAd(string adUnitId)
{
RewardedAd rewardedAd = new RewardedAd(adUnitId);
rewardedAd.OnAdLoaded += HandleRewardedAdLoaded;
rewardedAd.OnUserEarnedReward += HandleUserEarnedReward;
rewardedAd.OnAdClosed += HandleRewardedAdClosed;
// Create an empty ad request.
AdRequest request = new AdRequest.Builder().Build();
// Load the rewarded ad with the request.
rewardedAd.LoadAd(request);
return rewardedAd;
}
}
샘플
- HelloWorld 예 모든 광고 형식을 최소한으로 구현