이 가이드는 Unity로 제작한 게임에서 Unity 애즈를 구현하는 통합 방법을 설명합니다.
Unity의 수익화 플랫폼은 개발자에게 매출 향상을 위한 강력한 툴을 제공합니다. 게임이 광고뿐만 아니라 인앱 구매도 사용하는 경우 Unity의 머신러닝 데이터 모델이 콘텐츠 타입을 원활하게 결합하여 최적의 수익화 전략을 구현합니다. Unity가 매출을 최적화하는 방법은 맞춤형 플레이스먼트에서 자세히 알아볼 수 있습니다.
이 가이드는 다음과 같은 내용을 다룹니다.
Build Settings 창에서 지원되는 플랫폼에 대한 프로젝트를 설정해야 합니다. 플랫폼을 iOS 또는 Android로 설정한 후 Switch Platform을 클릭하십시오.
에셋 스토어에서 최신 버전의 Unity 애즈를 다운로드합니다. 수익화 API를 사용하려면 SDK 3.0 이상이 필요합니다. 에셋 패키지를 다운로드하고 설치하는 방법은 에셋 패키지 문서를 참조하십시오.
플레이스먼트는 게임 내에서 트리거되는 이벤트로, 수익화 콘텐츠를 표시합니다. 개발자 대시보드의 Operate 탭에서 프로젝트를 선택한 후 왼쪽 탐색 표시줄에서 Monetization > Placements를 선택하여 플레이스먼트를 관리하십시오.
ADD PLACEMENT 버튼을 클릭하면 플레이스먼트 생성 프롬프트가 나타납니다. 여기서 플레이스먼트의 이름을 지정하고 타입을 선택하십시오.
Unity 애즈를 지원하는 모든 프로젝트에는 기본적으로 (비보상형) ‘video
’ 및 (보상형) ‘rewardedVideo
’ 플레이스먼트가 포함됩니다. 이 중에서 적합한 플레이스먼트를 골라서 사용하거나, 자체 플레이스먼트를 생성할 수 있습니다.
SDK를 초기화하려면 적합한 플랫폼에 대한 프로젝트의 게임 ID를 참조해야 합니다. 게임 ID는 개발자 대시보드의 Operate 탭에서 왼쪽 탐색 표시줄에서 Monetization > Platforms를 선택하여 찾을 수 있습니다.
게임 스크립트 헤더에 UnityEngine.Monetization
네임스페이스를 포함하십시오. 게임의 런타임 라이프사이클 초기, 특히 실행 시점에 Initialize
함수를 사용하여 SDK를 초기화해야 합니다. 다음 예를 참조하십시오.
using UnityEngine.Monetization;
public class UnityAdsScript : MonoBehaviour {
string gameId = "1234567";
bool testMode = true;
void Start () {
Monetization.Initialize (gameId, testMode);
}
}
PlacementContent
는 플레이스먼트가 표시할 수 있는 수익화 콘텐츠를 나타내는 오브젝트입니다. 자세한 내용은 콘텐츠 타입 및 맞춤형 플레이스먼트 문서를 참조하십시오. 표시할 준비가 되면 GetPlacementContent
함수를 사용하여 콘텐츠를 검색해서 가져오고 Show
함수를 사용하여 표시합니다. 다음 예를 참조하십시오.
using UnityEngine.Monetization;
public class UnityAdsPlacement : MonoBehaviour {
public string placementId = "video";
public void ShowAd () {
StartCoroutine (ShowAdWhenReady ());
}
private IEnumerator ShowAdWhenReady () {
while (!Monetization.IsReady (placementId)) {
yield return new WaitForSeconds(0.25f);
}
ShowAdPlacementContent ad = null;
ad = Monetization.GetPlacementContent (placementId) as ShowAdPlacementContent;
if(ad != null) {
ad.Show ();
}
}
}
이 예에서 코루틴은 IsReady
함수를 사용하여 이용 가능한 PlacementContent
에 대해 전달된 플레이스먼트 ID를 확인합니다. 콘텐츠가 사용 가능하면 변수로 저장된 후 Show 함수로 실행됩니다.
광고를 시청하는 플레이어에게 보상을 제공하면 사용자 참여도를 높이고 매출을 늘릴 수 있습니다. 예를 들어, 플레이어에게 게임 내 재화, 소모품, 추가 생명, 경험치 멀티플라이어 등과 같은 보상을 제공할 수 있습니다. 보상형 광고를 효과적으로 디자인하는 방법은 광고 베스트 프랙티스를 참조하십시오.
광고를 시청한 플레이어에게 보상을 제공하려면 기본 구현 섹션에 설명된 것과 동일한 단계를 따르십시오. 단, 광고를 끝까지 시청한 플레이어에 대한 커스텀 로직이 포함된 보상 콜백 메서드를 사용하여 광고를 표시해야 합니다.
보상형 플레이스먼트를 통해 보상형 광고를 표시해야 합니다. 또한 Unity 애즈가 지원하는 모든 프로젝트에는 기본적으로 ‘rewardedVideo
’ 플레이스먼트가 포함됩니다. 이 플레이스먼트를 이용하여 광고를 구현하거나, 자체적으로 제작(플레이스먼트는 보상형으로 설정해야 함)할 수 있습니다.
using UnityEngine.Monetization;
public class RewardedAdsPlacement : MonoBehaviour {
public string placementId = "rewardedVideo";
public void ShowAd () {
StartCoroutine (WaitForAd ());
}
IEnumerator WaitForAd () {
while (!Monetization.IsReady (placementId)) {
yield return null;
}
ShowAdPlacementContent ad = null;
ad = Monetization.GetPlacementContent (placementId) as ShowAdPlacementContent;
if (ad != null) {
ad.Show (AdFinished);
}
}
void AdFinished (ShowResult result) {
if (result == ShowResult.Finished) {
// Reward the player
}
}
} ```
보상형 광고는 대개 버튼을 사용하여 플레이어에게 광고를 보고 보상을 받도록 표시합니다. 다음은 버튼을 눌렀을 때 광고를 표시하는 보상형 광고 버튼의 생성 방법을 설명합니다. 단, 콘텐츠가 이용 가능해야 합니다.
using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Monetization;
[RequireComponent (typeof (Button))]
public class UnityAdsButton : MonoBehaviour {
public string placementId = "rewardedVideo";
private Button adButton;
# if UNITY_IOS
private string gameId = "1234567";
# elif UNITY_ANDROID
private string gameId = "7654321";
# endif
void Start () {
adButton = GetComponent<Button> ();
if (adButton) {
adButton.onClick.AddListener (ShowAd);
}
if (Monetization.isSupported) {
Monetization.Initialize (gameId, true);
}
}
void Update () {
if (adButton) {
adButton.interactable = Monetization.IsReady (placementId);
}
}
void ShowAd () {
ShowAdCallbacks options = new ShowAdCallbacks ();
options.finishCallback = HandleShowResult;
ShowAdPlacementContent ad = Monetization.GetPlacementContent (placementId) as ShowAdPlacementContent;
ad.Show (options);
}
void HandleShowResult (ShowResult result) {
if (result == ShowResult.Finished) {
// Reward the player
} else if (result == ShowResult.Skipped) {
Debug.LogWarning ("The player skipped the video - DO NOT REWARD!");
} else if (result == ShowResult.Failed) {
Debug.LogError ("Video failed to show");
}
}
}
참고: 이 예제는 게임 내 특정 지점에서 PlacementContent가 표시될 준비가 되었는지 확인합니다. 다른 방법으로는 리스너를 구현하여 콘텐츠가 이용 가능할 때 알릴 수도 있습니다.
배너 광고를 사용하려면 특정 타입의 전용 배너 플레이스먼트가 필요합니다. 배너는 현재 화면 중앙 하단에 고정된 상태로 표시됩니다.
플레이스먼트 스크립트 헤더에서 Banner
클래스가 포함된 UnityEngine.Advertisement
네임스페이스를 선언하십시오. 그런 다음 SDK를 초기화하고 Advertisement.Banner.Show ()
를 사용하여 배너 광고를 표시하십시오. 예를 들어 다음과 같습니다.
using System.Collections;
using UnityEngine;
using UnityEngine.Advertisements;
public class BannerAds : MonoBehaviour {
public string bannerPlacement = "banner";
public bool testMode = false;
# if UNITY_IOS
public const string gameID = "1234567";
# elif UNITY_ANDROID
public const string gameID = "1234568";
# elif UNITY_EDITOR
public const string gameID = "1111111";
# endif
void Start () {
Advertisement.Initialize (gameID, testMode);
StartCoroutine (ShowBannerWhenReady ());
}
IEnumerator ShowBannerWhenReady () {
while (!Advertisement.IsReady ("banner")) {
yield return new WaitForSeconds (0.5f);
}
Advertisement.Banner.Show (bannerPlacement);
}
}
게임을 퍼블리시하기 전에 다음 단계에 따라 테스트 모드를 활성화하십시오.
Unity 에디터에서 플레이 버튼을 클릭하여 프로젝트를 실행하고 광고 구현을 테스트합니다.
참고: 광고 통합을 테스트하기 전에 테스트 모드를 활성화해야 거짓 콘텐츠로 표시되지 않습니다.
Unity 애즈를 성공적으로 구현하셨습니다! 저희는 개발자들이 매출을 효과적으로 극대화할 수 있도록 돕고자 합니다. 이를 염두에 두고 다음 단계를 따르십시오.
Monetization
Initialize
프로젝트에 대한 SDK를 초기화합니다.
public static void Initialize (string gameID, bool testMode)
gameId
파라미터는 프로젝트의 게임 ID입니다. 게임 ID는 개발자 대시보드에서 조회할 수 있습니다. testMode
파라미터는 게임이 테스트 모드인지를 표시합니다. testMode
가 true
이면 테스트 광고만 표시됩니다. testMode
가 false
이면 라이브 광고만 표시됩니다. 게임을 실행하기 전에 테스트 모드를 사용해야 거짓 콘텐츠로 표시되지 않습니다.
IsReady
public static boolean IsReady (string placementId); ```
<a name="getplacementcontent"></a>
#### ```GetPlacementContent```
특정 플레이스먼트에 대한 ```PlacementContent``` 오브젝트를 반환합니다.
public static PlacementContent GetPlacementContent (string placementId); ```
**참고**: ```PlacementContent```를 변수로 설정할 때는 정확한 타입([```ShowAdPlacementContent```](#showadplacementcontent) 또는 [```PromoAdPlacementContent```](#promoadplacementcontent))으로 캐스트해야 합니다. 자세한 내용은 [콘텐츠 타입](https://unityads.unity3d.com/help/monetization/content-types) 문서를 참조하십시오.
<a name="imonetizationlistener"></a>
### ```IMonetizationListener```
사용자가 구현하여 SDK로 전달하는 인터페이스입니다.
public interface IMonetizationListener {
void OnPlacementContentReady (string placementId, PlacementContent placementContent);
void OnPlacementContentStateChange (string placementId, PlacementContent placementContent, Monetization.PlacementContentState previousState, Monetization.PlacementContentState newState);
}
```
OnPlacementContentReady
플레이스먼트 ID와 PlacementContent
오브젝트를 가져오고, SDK가 표시 준비를 마친 콘텐츠를 처리하는 방식을 지정합니다.
OnPlacementContentStateChange
SDK가 전달된 PlacementContent
의 상태 변경을 처리하는 방식을 지정합니다.
SetListener
public static void SetListener (IMonetizationListener listener); ```
GetListener
현재 수익화 리스너를 반환합니다. 리스너 오브젝트는 이벤트 콜백에 대한 리스너입니다.
public static IMonetizationListener GetListener ();
PlacementContent
플레이스먼트가 표시할 수익화 콘텐츠를 나타내는 오브젝트입니다.
RewardablePlacementContent
PlacementContent
클래스를 확장하여 보상형 콘텐츠에 대한 확장을 제공합니다.
ShowAdPlacementContent
``RewardablePlacementContent``` 클래스를 확장하여 동영상 광고 콘텐츠에 기능을 제공합니다.
Show
public void Show (ShowAdCallbacks showAdCallbacks)
public void Show (ShowAdFinishCallback finishCallback) ```
보상형 PlacementContent
의 경우에는 리스너를 사용하여 콘텐츠가 완료되었는지 확인하고 원하는 동작을 처리하십시오.
ShowAdCallbacks
광고가 실행된 후에 ShowResult
열거형이 [[ShowOptions.resultCallback]]
에 전달됩니다.
값 | 설명 |
---|---|
Finished |
플레이어가 광고를 끝까지 시청했음을 의미합니다. |
Skipped |
플레이어가 광고를 중간에 건너뛰었음을 의미합니다. |
Failed |
광고가 표시되지 않았음을 의미합니다. |
public delegate void ShowAdFinishCallback (ShowResult finishState);
public delegate void ShowAdStartCallback ();
public struct ShowAdCallbacks {
public ShowAdFinishCallback finishCallback;
public ShowAdStartCallback startCallback;
}
PromoAdPlacementContent
<a name="banner"></a>
### ```Banner```
<a name="load"></a>
#### ```Load```
배너 광고 콘텐츠를 로드하기 위한 기본 메서드입니다. 필요에 따라 몇 가지 파라미터로 이 함수를 조정할 수 있습니다.
| 메서드 | 설명 |
| ------ | ----------- |
| ```public static void Load ()``` | 기본 플레이스먼트 ID를 사용하고 콜백 없이 배너 광고를 로드합니다. |
| ```public static void Load (BannerLoadOptions options)``` | 기본 플레이스먼트 ID를 사용하여 배너 광고를 로드합니다. 로드에 성공하면 [```loadCallback```](#bannerloadoptions) 콜백을 호출하고, 로드에 실패하면 [```errorCallback```](#bannerloadoptions) 콜백을 호출합니다. |
| ```public static void Load (string placementID)``` | 특정 플레이스먼트 ID를 사용하고 콜백 없이 배너 광고를 로드합니다. |
| ```public static void Load (string placementID, BannerLoadOptions options)``` | 특정 플레이스먼트 ID를 사용하여 배너 광고를 로드합니다. 로드에 성공하면 [```loadCallback```](#bannerloadoptions) 콜백을 호출하고, 로드에 실패하면 [```errorCallback```](#bannerloadoptions) 콜백을 호출합니다. |
| ```public static bool isLoaded ()``` | 콘텐츠가 성공적으로 로드되고 표시할 준비를 마쳤는지 확인합니다. |
<a name="bannerloadoptions"></a>
##### ```BannerLoadOptions```
이 옵션을 SDK에 다시 전달하여 배너를 로드할 때 이벤트를 알립니다.
| 콜백 | 설명 |
| -------- | ----------- |
| ```public LoadCallback loadCallback { get; set; }``` | 배너 광고가 로드되고 표시할 준비가 될 때 호출합니다. |
| ```public ErrorCallback errorCallback { get; set; }``` | 배너 광고를 로드하는 중에 오류가 발생하면 이 콜백을 호출합니다. 이 콜백이 호출되면 배너가 로드되지 않았다고 간주됩니다. 나중에 로드를 다시 호출할 수도 있습니다. |
#### ```Show```
배너 광고 콘텐츠를 표시하기 위한 기본 메서드입니다. 필요에 따라 몇 가지 파라미터로 이 함수를 조정할 수 있습니다.
| 메서드 | 설명 |
| ------ | ----------- |
| ```public static void Show ()``` | 기본 플레이스먼트 ID를 사용하고 콜백 없이 배너 광고를 표시합니다. |
| ```public static void Show (BannerOptions options)``` | 기본 플레이스먼트 ID를 사용하여 배너 광고를 표시합니다. 콘텐츠가 보이면 [```showCallback```](#banneroptions) 콜백을 호출하고 콘텐츠가 보이지 않으면 [```hideCallback```](#banneroptions) 콜백을 호출합니다. |
| ```public static void Show (string placementID)``` | 특정 플레이스먼트 ID를 사용하고 콜백 없이 배너 광고를 표시합니다. |
| ```public static void Show (string placementID, BannerLoadOptions options)``` | 특정 플레이스먼트 ID를 사용하여 배너 광고를 표시합니다. 콘텐츠가 보이면 [```showCallback```](#banneroptions) 콜백을 호출하고 콘텐츠가 보이지 않으면 [```hideCallback```](#banneroptions) 콜백을 호출합니다. |
<a name="banneroptions"></a>
##### ```BannerOptions```
이 옵션을 SDK에 다시 전달하여 배너 내에서 이벤트를 알립니다.
| 콜백 | 설명 |
| -------- | ----------- |
| ```public BannerCallback showCallback { get; set; }``` | 배너 광고가 플레이어에게 표시되면 이 콜백을 호출합니다. |
| ```public BannerCallback hideCallback { get; set; }``` | 배너 광고가 플레이어에게 표시되지 않으면 이 콜백을 호출합니다. |
<a name="hide"></a>
#### ```Hide```
이 함수를 이용하면 배너 광고를 완전히 삭제하지 않고 숨길 수 있습니다.
public static void Hide (bool destroy = false); ```