[Unity] Unity IAP란?

dev.hyeon·2024년 1월 15일

Unity IAP

목록 보기
3/3
post-thumbnail

Unity IAP란?

Unity IAP 패키지는 코딩 및 코드리스 접근 방식을 통해 다음과 같은 설정을 지원한다.

  • 사용자가 게임에서 아이템을 구매할 수 있도록 허용한다.
  • 구매에서 수익을 얻을 수 있도록 스토어에 연결한다.

IStoreListener

Unity IAP가 애플리케이션에 구매 관련 이벤트에 대해 알리기 위해 사용하는 IStoreListener 인터페이스를 구현해야 한다.

초기화

UnityPurchasing.Initialize 메서드를 호출하여 초기화 프로세스를 시작해 리스너 구현 및 설정을 제공한다.

  • 네트워크를 사용할 수 없는 경우에도 실패하지 않는다.
  • Unity IAP는 백그라운드에서 계속 초기화를 시도한다.
  • Unity IAP에서 설정이 잘못되었거나 기기 설정에서 IAP가 비활성화되는 등 복구 불가능한 문제가 발생하는 경우에만 초기화가 실패한다.
  • 초기화가 완료되지 않은 경우 사용자가 구매를 시도하지 않도록 해야 한다.
    /// <summary>
      /// Called when Unity IAP is ready to make purchases.
      /// </summary>
      public void OnInitialized (IStoreController controller, IExtensionProvider extensions)
      {
          this.controller = controller;
          this.extensions = extensions;
      }

구매 시작

IStoreController의 InitiatePurchase 메서드를 호출하여 구매하고자 하는 상품을 식별한다.

  • 애플리케이션은 구매 성공의 경우 ProcessPurchase 호출, 구매 실패의 경우 OnPurchaseFailed 호출로 결과를 비동기적으로 전달 받게 된다.
  • 예시 코드
    // Example method called when the user presses a 'buy' button
    // to start the purchase process.
    public void OnPurchaseClicked(string productId) {
        controller.InitiatePurchase(productId);
    }

구매 처리

애플리케이션이 오프라인 상태인 경우에 완료된 구매는 다음 초기화 시점에서 애플리케이션에 전송된다.

  • 구매 처리 완료 결과

    결과설명
    PurchaseProcessingResult.Complete애플리케이션이 구매 처리를 완료하였으며 이에 대해 다시 알리지 않는다.
    PurchaseProcessingResult.Pending애플리케이션이 아직 구매를 처리하고 있는 상태이며 애플리케이션이 다음에 실행되면 IStoreController의 ConfirmPendingPurchase 함수가 호출되지 않는 한 ProcessPurchase가 호출된다.
  • 구매 즉시 완료

    • PurchaseProcessingResult.Complete가 반환되면 Unity IAP는 거래를 아래의 다이어그램에서 보는 바와 같이 즉시 완료된다.

    • PurchaseProcessingResult.Complete을 반환하면 클라우드에 저장되지 않은 상태에서 애플리케이션이 삭제될 때 소모품 구매 내역이 손실될 수 있다.

    • 비소모품이나 구독형 상품과 달리 소모품의 경우 결제 recepie를 따로 저장하고 있지 않기 때문이다.

      구매 즉시 완료-시퀀스 다이어그램

      💡 과정 설명

      1. APP에서 Unity IAP로 구매 요청
      2. Unity IAP에서 App Store로 구매 요청
      3. 결제 완료 후 성공 반환
      4. 프로세스 구매
      5. 프로세스 구매 결과 ‘Complete’ 전달
      6. transaction 종료
  • 클라우드에 구매 저장

    • 소비 품목 구매를 클라우드에 저장하는 경우, 구매를 성공적으로 완료한 경우에만 PurchaseProcessingResult.Pending를 반환하고 ConfirmPendingPurchase를 호출해야 한다.

    • Pending를 반환하는 경우 Unity IAP는 처리를 확인하기 전까지 해당 스토어 내의 거래를 유지시켜서 소비 품목이 이러한 상태일 때 사용자가 애플리케이션을 다시 설치하더라도 그 구매 내역이 손실되지 않도록 한다.

      클라우드에 구매 저장-시퀀스 다이어그램

      💡 과정 설명

      1. PurchaseProcessingResult.Pending을 반환
      2. app’s server와 통신 중에 App Store와의 Transaction이 종료되지 않기 위해 Complete가 아닌 Pending을 반환함
      3. 서버에 영수증을 전송
      4. Receipt 인증이 완료
      5. ConfirmPendingPurchase 호출
        1. ConfirmPendingPurchase는 영수증이 클라우드에 저장된 후에만 호출해야 한다.
      6. transaction 종료

구매 실패 처리

  • 네트워크 장애, 결제 오류, 기기 설정 등 다양한 이유로 구매가 실패할 수 있으므로 구매 실패 이유를 확인하여 사용자에게 조치를 취하도록 안내하는 것이 좋다.
  • 구매 실패 시 IStoreControllerOnPurchaseFailed를 호출함
  • 예시 코드
    /// <summary>
    /// Called when a purchase fails.
    /// </summary>
    public void **OnPurchaseFailed** (Product i, PurchaseFailureReason p)
    {
        if (p == PurchaseFailureReason.PurchasingUnavailable) {
            // IAP may be disabled in device settings.
        }
    }

참고

Unity IAP 설명 - Unity 메뉴얼
https://docs.unity3d.com/kr/2021.3/Manual/UnityIAPSettingUp.html

0개의 댓글