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

API 사용 패턴

SDK의 모든 API는 C#의 async/await 패턴을 사용해요.
Unity의 메인 스레드를 차단하지 않고 비동기 작업을 수행할 수 있어요.


기본 패턴: async/await

기본 사용법

csharp
using AppsInToss;
using UnityEngine;

public class Example : MonoBehaviour
{
    async void Start()
    {
        // await 키워드로 비동기 결과를 대기
        string deviceId = await AIT.GetDeviceId();
        Debug.Log($"Device ID: {deviceId}");
    }
}

Task 반환 메서드

외부에서 호출해야 하는 경우 Task를 반환하세요:

csharp
using System.Threading.Tasks;

public class PaymentController : MonoBehaviour
{
    public async Task<bool> ProcessPayment(string orderId)
    {
        try
        {
            var options = new CheckoutPaymentOptions {
                // 옵션 설정
            };

            var result = await AIT.CheckoutPayment(options);
            return result != null;
        }
        catch (AITException)
        {
            return false;
        }
    }
}

여러 API 연속 호출

여러 API를 순차적으로 호출할 때도 async/await를 사용해요:

csharp
async void InitializeGame()
{
    // 순차 호출
    string deviceId = await AIT.GetDeviceId();
    string platform = await AIT.GetPlatformOS();
    string locale = await AIT.GetLocale();

    Debug.Log($"기기: {deviceId}, 플랫폼: {platform}, 언어: {locale}");
}

병렬 호출

독립적인 API들은 Task.WhenAll로 병렬 호출할 수 있어요:

csharp
async void InitializeGameParallel()
{
    var deviceIdTask = AIT.GetDeviceId();
    var platformTask = AIT.GetPlatformOS();
    var localeTask = AIT.GetLocale();

    await Task.WhenAll(deviceIdTask, platformTask, localeTask);

    Debug.Log($"기기: {deviceIdTask.Result}, 플랫폼: {platformTask.Result}, 언어: {localeTask.Result}");
}

에러 처리

AITException

SDK API 호출이 실패하면 AITException이 throw돼요:

csharp
using AppsInToss;
using UnityEngine;

public class ErrorHandling : MonoBehaviour
{
    async void CallAPI()
    {
        try
        {
            var result = await AIT.GetDeviceId();
            Debug.Log($"성공: {result}");
        }
        catch (AITException ex)
        {
            Debug.LogError($"API 오류: {ex.Message}");
            Debug.LogError($"오류 코드: {ex.ErrorCode}");
        }
        catch (System.Exception ex)
        {
            Debug.LogError($"예상치 못한 오류: {ex.Message}");
        }
    }
}

AITException 속성

속성타입설명
Messagestring사람이 읽을 수 있는 오류 메시지
ErrorCodestring오류 코드 (프로그래밍 방식 처리용)
APINamestring실패한 API 이름
IsPlatformUnavailablebool플랫폼 미지원으로 인한 오류 여부 (브라우저 환경 등)

오류 코드별 처리

csharp
async void HandlePayment()
{
    try
    {
        var result = await AIT.CheckoutPayment(options);
    }
    catch (AITException ex)
    {
        switch (ex.ErrorCode)
        {
            case "PAYMENT_CANCELLED":
                Debug.Log("사용자가 결제를 취소했어요.");
                break;
            case "PAYMENT_FAILED":
                Debug.LogError("결제 처리 중 오류가 발생했어요.");
                break;
            case "NETWORK_ERROR":
                Debug.LogError("네트워크 연결을 확인해 주세요.");
                break;
            default:
                Debug.LogError($"알 수 없는 오류: {ex.Message}");
                break;
        }
    }
}

WebGL vs Unity Editor

SDK API의 동작은 실행 환경에 따라 달라요.

실행 환경별 동작

환경동작
WebGL 빌드 (Apps in Toss 앱 내)실제 네이티브 API 호출
WebGL 빌드 (일반 브라우저)Mock 구현 호출 (Dev Server 모드)
Unity EditorMock 구현 호출
기타 플랫폼 (Windows, macOS 등)Mock 구현 호출

환경별 코드 분기

필요한 경우 환경에 따라 다른 로직을 실행할 수 있어요:

csharp
using UnityEngine;

public class PlatformAware : MonoBehaviour
{
    void Start()
    {
#if UNITY_WEBGL && !UNITY_EDITOR
        Debug.Log("WebGL 빌드에서 실행 중");
        // WebGL 전용 로직
#else
        Debug.Log("에디터 또는 다른 플랫폼에서 실행 중");
        // 개발/테스트용 로직
#endif
    }
}

참고

  • Unity Editor에서는 항상 Mock 구현이 호출돼요.
  • 실제 네이티브 기능을 테스트하려면 WebGL로 빌드 후 Apps in Toss 앱에서 실행해야 해요.
  • Dev Server 모드는 일반 브라우저에서도 Mock으로 동작해서 개발이 편리해요.

Mock 브릿지

Mock 브릿지란?

Mock 브릿지는 네이티브 API가 없는 환경(Unity Editor, 일반 브라우저)에서 SDK API를 테스트할 수 있도록 하는 시뮬레이션 레이어예요.

Mock 동작

APIMock 반환값
GetDeviceId()빈 문자열 ""
GetPlatformOS()빈 문자열 ""
GetNetworkStatus()default(NetworkStatus)
CheckoutPayment()default(CheckoutPaymentResult)
GenerateHapticFeedback()로그 출력만 (실제 진동 없음)

Mock 로그

Mock 브릿지가 호출되면 Console에 로그가 출력돼요:

[AIT Mock] GetDeviceId called
[AIT Mock] GetPlatformOS called

빌드 프로필별 Mock 설정

빌드 프로필Mock 브릿지
Dev Server활성화
Production Server비활성화
Build & Package비활성화
Publish비활성화

자세한 빌드 프로필 설정은 빌드 프로필 문서를 참고해 주세요.