Unity IAP: 영수증 검증 가이드

이 문서는 Unity의 인앱 결제(IAP) 시스템에서 영수증 검증을 수행하는 방법에 대해 설명합니다. Unity IAP는 여러 플랫폼에서의 영수증 검증을 지원하며, 여기서는 로컬 및 원격 검증 방법을 다룹니다.

영수증 검증의 중요성

영수증 검증은 사용자가 구매하지 않은 콘텐츠에 접근하는 것을 방지하는 역할을 합니다. 이는 사용자 경험을 높이고, 개발자에게는 수익을 보호하는 중요한 과정입니다.

검증 시점

  • 로컬 검증: 클라이언트 측에서 바로 검증. 구매한 콘텐츠가 앱에 포함된 경우에 해당합니다.
  • 원격 검증: 서버 측에서 수행. 콘텐츠가 다운로드되거나 릴리스되기 전에 검증이 이루어집니다.

로컬 검증

로컬 검증은 애플리케이션이 디바이스에서 직접 영수증을 검증하는 방법입니다. 이는 사용자 경험을 향상시키지만, 사기 공격에 취약할 수 있습니다. 따라서 가능한 경우 서버측 검증이 권장됩니다.

암호화 키 난독 처리

영수증 검증에는 알려진 암호화 키가 사용됩니다. 이 키는 사용자에 의해 수정되기 어려워야 하며, Unity IAP는 이를 위해 암호화 키를 난독 처리하는 도구를 제공합니다.

CrossPlatformValidator 클래스

CrossPlatformValidator 클래스를 사용하여 Google Play와 Apple 스토어의 영수증을 검증할 수 있습니다. 이 클래스는 두 가지 주요 검사를 수행합니다:

  1. 서명 검증을 통한 영수증의 유효성 검사
  2. 애플리케이션 번들 식별자 비교

코드 예제

다음은 Unity에서 영수증을 처리하는 기본적인 코드 예제입니다:

public PurchaseProcessingResult ProcessPurchase (PurchaseEventArgs e)
{
    bool validPurchase = true; // Assume valid purchase

||UNITY_IOS||
|---|---|---|
    var validator = new CrossPlatformValidator(GooglePlayTangle.Data(), AppleTangle.Data(), Application.bundleIdentifier);

    try {
        var result = validator.Validate(e.purchasedProduct.receipt);
        foreach (IPurchaseReceipt productReceipt in result) {
            Debug.Log($"Product ID: {productReceipt.productID}");
            Debug.Log($"Purchase Date: {productReceipt.purchaseDate}");
            Debug.Log($"Transaction ID: {productReceipt.transactionID}");
        }
    } catch (IAPSecurityException) {
        Debug.Log("Invalid receipt, not unlocking content");
        validPurchase = false;
    }
#endif

    if (validPurchase) {
        // Unlock content
    }

    return PurchaseProcessingResult.Complete;
}

스토어별 세부 사항

각 스토어마다 영수증의 구조는 다릅니다. IPurchaseReceipt를 통해 Google Play와 Apple 스토어에서 제공하는 각각의 서브타입에 접근할 수 있습니다. 각각의 필드를 사용하여 추가 정보를 추출할 수 있습니다.

예를 들어, Apple 영수증의 정보를 추출하려면 아래와 같은 코드를 사용할 수 있습니다:

var appleConfig = builder.Configure<IAppleConfiguration>();
var receiptData = System.Convert.FromBase64String(appleConfig.appReceipt);
AppleReceipt receipt = new AppleValidator(AppleTangle.Data()).Validate(receiptData);

foreach (AppleInAppPurchaseReceipt productReceipt in receipt.inAppPurchaseReceipts) {
    Debug.Log($"Transaction Identifier: {productReceipt.transactionIdentifier}");
    Debug.Log($"Product Identifier: {productReceipt.productIdentifier}");
}

결론

Unity IAP의 영수증 검증 과정은 사용자와 개발자 모두에게 중요합니다. 위의 내용을 통해 영수증 검증의 개념과 구현 방법을 이해하고, 적용할 방법에 대해 알아보셨길 바랍니다. 각 플랫폼별 세부사항과 유의사항을 확인하여 안전한 인앱 결제 환경을 조성하시기 바랍니다.

Read more

Unity 매뉴얼 스크립팅 API 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 간단한 해설과 활용 예제들을 포함하고 있습니다. Unity는 게임 개발 플랫폼으로, 스크립팅 API를 통해 게임의 다양한 기능을 제어하고 수정할 수 있습니다. 버전 Unity 스크립팅 API는 여러 버전으로 제공됩니다. 주의 깊게 선택하여 사용하는 것이 중요합니다. 버전 설명 2023.2 최신 기능 및 버그 수정이 추가됨

By 이재협/실장/시스템개발실/PHYSIA

Unity 매뉴얼 스크립팅 API 설명서 해설

이 문서는 Unity의 매뉴얼 스크립팅 API에 대한 정보를 제공하며, 버전에 따라 다르게 적용되는 내용들을 설명합니다. 본 문서에서는 주요 내용을 간단히 정리하고 활용 가능 예제를 통해 이해를 돕겠습니다. 기본 개념 Unity에서 스크립팅 API는 게임 오브젝트와 그들의 동작을 제어하기 위한 강력한 도구입니다. 이를 통해 게임의 로직, 물리 엔진, 애니메이션 및 사용자 인터페이스를

By 이재협/실장/시스템개발실/PHYSIA

Unity 스크립팅 API 가이드

이 문서는 Unity의 스크립팅 API에 대해 설명합니다. Unity는 게임 개발을 위한 인기 있는 엔진으로, 강력한 스크립팅 기능을 제공합니다. 이 가이드는 Unity에서 스크립트를 작성하고 사용하는 방법을 이해하는 데 도움을 드립니다. 목차 * Unity 스크립팅 소개 * 기본 스크립트 생성 * 스크립트 사용 예제 * 응용 프로그램 * 참고 자료 Unity 스크립팅 소개 Unity는 C# 프로그래밍 언어를

By 이재협/실장/시스템개발실/PHYSIA