Skip to content
이 내용이 도움이 되었나요?

인앱 광고

앱인토스 유니티 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 이벤트로 보상을 지급하는 광고

호출 흐름

  1. LoadFullScreenAd로 광고를 미리 로드해요
  2. onEvent에서 loaded 이벤트를 받으면 광고가 준비된 상태예요
  3. ShowFullScreenAd로 광고를 표시해요
  4. onEvent에서 이벤트별로 처리해요 (노출, 클릭, 리워드, 닫힘 등)
  5. 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에서 반드시 구독을 해제해 주세요.