인앱 광고
앱인토스 유니티 SDK를 사용하면 C# 코드만으로 인앱 광고를 연동할 수 있어요.
광고 유형
앱인토스 Unity SDK는 두 가지 광고 시스템을 제공해요.
| 광고 시스템 | 설명 |
|---|---|
| Toss Ads | 토스 자체 광고 플랫폼 (배너, 전면 등) |
| Full Screen Ad | 전면/보상형 광고 (Load → Show 패턴) |
사전 준비
- 앱인토스 유니티 SDK 설치
- WebGL 빌드 환경 설정 완료
- 앱인토스 콘솔에서 광고 그룹 생성
TIP
- 인앱 광고는 샌드박스 앱에서 테스트할 수 없어요. 콘솔 내 QR 코드로 테스트를 진행해 주세요.
- iOS에서 앱 추적 모드가 켜져있으면 광고 로드가 정상적으로 동작하지 않을 수 있어요. 앱 추적 모드를 해제한 뒤 다시 시도해 주세요.
Toss Ads
토스 자체 광고 플랫폼이에요. 배너 광고를 포함한 다양한 광고 형태를 지원해요.
API
| API | 설명 |
|---|---|
AIT.TossAdsInitialize() | Toss Ads를 초기화해요 |
AIT.TossAdsAttach() | 광고를 지정된 타겟에 부착해요 |
AIT.TossAdsAttachBanner() | 배너 광고를 부착해요 |
AIT.TossAdsDestroy() | 특정 광고 슬롯을 제거해요 |
AIT.TossAdsDestroyAll() | 모든 광고 슬롯을 제거해요 |
샘플 코드
csharp
using UnityEngine;
using AppsInToss;
public class TossAdsExample : MonoBehaviour
{
async void Start()
{
try
{
// Toss Ads 초기화
await AIT.TossAdsInitialize(new InitializeOptions());
Debug.Log("Toss Ads 초기화 완료");
// 배너 광고 부착
var result = await AIT.TossAdsAttachBanner(
adGroupId: "your-ad-group-id",
target: "#banner-container"
);
Debug.Log("배너 광고 부착 완료");
}
catch (AITException ex)
{
Debug.LogError($"Toss Ads 오류: {ex.ErrorCode} - {ex.Message}");
}
}
async void OnDestroy()
{
try
{
// 모든 광고 슬롯 제거
await AIT.TossAdsDestroyAll();
}
catch (AITException ex)
{
Debug.LogError($"광고 제거 실패: {ex.Message}");
}
}
}Full Screen Ad
전면/보상형 광고를 Load → Show 패턴으로 사용할 수 있어요. 구독 기반으로 이벤트 콜백을 통해 광고 상태를 받아요.
API
| API | 설명 |
|---|---|
AIT.LoadFullScreenAd() | 광고를 로드해요 |
AIT.ShowFullScreenAd() | 로드된 광고를 표시해요 |
광고 타입
adGroupId에 따라 전면 광고인지 보상형 광고인지가 결정돼요. 앱인토스 콘솔에서 광고 그룹을 생성할 때 타입을 지정하며, 코드에서는 동일한 API로 호출해요.
| 광고 타입 | 설명 |
|---|---|
| 전면 광고 (Interstitial) | 화면 전환 시 표시되는 광고 |
| 보상형 광고 (Rewarded) | 광고 시청 완료 후 userEarnedReward 이벤트로 보상을 지급하는 광고 |
호출 흐름
LoadFullScreenAd로 광고를 미리 로드해요onEvent에서loaded이벤트를 받으면 광고가 준비된 상태예요ShowFullScreenAd로 광고를 표시해요onEvent에서 이벤트별로 처리해요 (노출, 클릭, 리워드, 닫힘 등)dismissed이벤트를 받으면 다음 광고를 다시 로드해요
광고 이벤트
| 이벤트 타입 | 설명 |
|---|---|
loaded | 광고 로드 완료 |
requested | 광고 표시 요청이 전달됨 |
show | 광고가 화면에 표시됨 |
impression | 광고가 실제로 노출됨 (수익 발생) |
clicked | 사용자가 광고를 클릭함 |
userEarnedReward | 보상형 광고 시청 완료 후 보상 지급 |
dismissed | 사용자가 광고를 닫음 |
failedToShow | 광고를 표시하지 못함 |
샘플 코드
csharp
using System;
using UnityEngine;
using AppsInToss;
public class FullScreenAdExample : MonoBehaviour
{
private const string AD_GROUP_ID = "your-ad-group-id";
private Action _loadUnsubscribe;
private Action _showUnsubscribe;
private bool _isAdLoaded = false;
void Start()
{
// 시작 시 광고 로드
LoadAd();
}
/// <summary>
/// 광고 로드
/// </summary>
public void LoadAd()
{
_loadUnsubscribe?.Invoke();
_loadUnsubscribe = AIT.LoadFullScreenAd(
adGroupId: AD_GROUP_ID,
onEvent: (result) =>
{
if (result.Type == "loaded")
{
_isAdLoaded = true;
Debug.Log("광고 로드 완료");
}
},
onError: (error) =>
{
_isAdLoaded = false;
Debug.LogError($"광고 로드 실패: {error.ErrorCode} - {error.Message}");
}
);
}
/// <summary>
/// 광고 표시 (버튼 클릭 등에서 호출)
/// </summary>
public void ShowAd()
{
if (!_isAdLoaded)
{
Debug.LogWarning("광고가 아직 로드되지 않았어요");
return;
}
_showUnsubscribe?.Invoke();
_showUnsubscribe = AIT.ShowFullScreenAd(
adGroupId: AD_GROUP_ID,
onEvent: (result) =>
{
switch (result.Type)
{
case "requested":
Debug.Log("광고 표시 요청됨");
break;
case "show":
Debug.Log("광고 화면 표시됨");
break;
case "impression":
Debug.Log("광고 노출 기록됨 (수익 발생)");
break;
case "clicked":
Debug.Log("광고 클릭됨");
break;
case "dismissed":
Debug.Log("광고가 닫힘");
_isAdLoaded = false;
LoadAd(); // 다음 광고 로드
break;
case "failedToShow":
Debug.LogError("광고 표시 실패");
break;
case "userEarnedReward":
// 보상형 광고: 리워드 지급
Debug.Log($"리워드 획득: {result.Data}");
GrantReward(result.Data);
break;
}
},
onError: (error) =>
{
Debug.LogError($"광고 표시 실패: {error.ErrorCode} - {error.Message}");
}
);
}
/// <summary>
/// 리워드 지급 처리
/// </summary>
private void GrantReward(object data)
{
// 게임 내 리워드 지급 로직을 구현해요
Debug.Log($"리워드 지급 완료: {data}");
}
private void OnDestroy()
{
_loadUnsubscribe?.Invoke();
_showUnsubscribe?.Invoke();
}
}TIP
userEarnedReward이벤트는 보상형 광고에서만 발생해요.- 리워드 지급 로직은 반드시
userEarnedReward이벤트 기준으로 처리해 주세요. dismissed이벤트 후 다음 광고를 바로 로드하면 연속으로 광고를 보여줄 수 있어요.failedToShow발생 시 광고를 다시 로드한 후 재시도해야 해요.
주의사항
TIP
- Full Screen Ad는 반드시 Load → Show 순서로 호출해야 해요.
- 광고를 한 번 표시하면 다시 로드해야 다음 광고를 표시할 수 있어요.
- 인앱 광고는 샌드박스 앱에서 테스트할 수 없어요. 토스 앱에서 QR 코드를 통해 테스트해 주세요.
- 구독 기반 API(
Load,Show)는OnDestroy에서 반드시 구독을 해제해 주세요.