빌링 개발 연동

게임 개발 스튜디오에서 빌링 결제 기능을 구현하는 과정에서 실수할 수 있는 부분에 대한 체크리스트입니다.

1. 기본 설명

  • 빌링을 게임에 연동하는 과정에서 놓칠 수 있는 부분에 대한 간단한 체크리스트입니다.

  • 개발을 위한 모든 내용이 포함되어 있지는 않습니다. 상세 내용은 SDK 및 서버 API 상세 가이드 등을 참고하세요.

2. 체크리스트

구분
내용
비고

전체 공통

구매 복구 기능이 준비되어 있는지?

  • 시퀀스 중 구글 또는 애플 장애 발생 등을 대응하기 위한 준비

  • API 등 외부 호출 과정에서 네트워크 오류 등이 발생하면 Jitter 기반의 Backoff를 이용해서 재시도 구현(참고 링크arrow-up-right)

  • 인게임 상점 진입시 트랜잭션 재 시도 또는 복구 기능 버튼을 설정 등의 메뉴에 위치

클라이언트(with SDK)

GetProduct()로 상품 조회 후 등록되지 않은 상품에 대해서 QueryProductDetails 호출하는지?

  • QueryProductDetails은 스토어에 상품정보를 요청하는 것으로 네트워크 트래픽 사용

  • GetProduct은 QueryProductDetails으로 조회한 상품 정보 캐시

재 로그인 후에 빌링플랫폼 PreInit을 변경된 계정 정보와 함께 호출하는지?

  • 다른 계정으로 로그인 대비

빌링플랫폼 PreInit 후 게임 플레이 가능한 상태로 진행한 경우 구매복구 요청하는지?

결제 후 수신한 영수증 정보를 게임서버에 구매 완료 요청한 후 수신한 결과 SDK에 알려주는지?

  • OnCompletedPurchase(true or false)

결제 어뷰징 건으로 자동제재된 경우 로그인 시 서비스 이용 제재 팝업이 정상 노출하는지?

결제 어뷰징 자동 제재 기능을 사용하는 경우에만 해당

스팀 결제(게임서버)

API 호출 타임아웃은 최소 30초로 설정 하였는지?

  • 스팀 API는 매우 느린 경우가 종종 발생하여 랩핑해서 기능을 제공하는 빌링 API도 느린 경우가 발생할 수 있음

애플 결제(게임서버)

영수증 검증 API의 타임아웃은 최소 15초로 설정하였는지?

  • 애플 API가 느리기 때문에 발생하는 타임아웃 대비

애플 결제(클라이언트)

구매 복구 과정에서 수신한 영수증으로 게임서버에게 구매 완료를 요청할 때, 게임서버로부터 이미 지급한 구매건으로 결과를 수신한 경우 OnCompletedPurchase(true)로 호출하여 미처리 구매건을 완료처리하는지?

2-2. 구매 복구 체크리스트 관련 추가 설명

Android, Google Play Games

  • 시나리오1 : 결제 완료 후 게임 서버에 결제 영수증 전송 실패

    • 결제 완료 ➔ 앱: 결제 영수증 수신(X)

    • 결제 완료 ➔ 앱: 결제 영수증 수신 ➔ 게임서버 전달(X)

      • 앱 : 게임서버 로그인 ➔ BillingPlatform.Restore() 호출 ➔ 결제 영수증 수신 ➔ 게임서버 전달

      • 게임서버 : 앱: 결제 영수증 수신 ➔ 결제 백엔드 연동 결제 프로세스 진행

  • 시나리오2 : 결제 완료 후 게임 서버에 결제 영수증 전송 성공

    • 결제 완료 ➔ 앱: 게임 이벤트 수신(O)

    • 결제 완료 ➔ 앱: 게임 이벤트 수신 ➔ 게임서버 전달(O)

      • 앱 : 게임서버 로그인

      • 게임서버 : 로그인 한 계정에 미 완료된 결제 있는지 체크 후 프로세스 완료

circle-exclamation

iOS

  • 시나리오1 : 결제 완료 후 게임 서버에 결제 영수증 전송 실패

    • 결제 완료 ➔ 앱: 결제 영수증 수신(X)

    • 결제 완료 ➔ 앱: 결제 영수증 수신 ➔ 게임서버 전달(X)

      • 앱 : BillingPlatform.Restore() 호출 ➔ 결제 영수증 수신 ➔ 게임서버 전달

      • 게임서버 : 결제 영수증 수신 ➔ 결제 백엔드 연동 결제 프로세스 진행

      • 앱 : 결제 프로세스 완료 후 결제 결과 수신

    • BillingPlatform.OnPurchaseCompleted(true) 호출 ➔ 중요 반드시 호출되어야 한다.

      • true을 호출하지 않으면 미처리 상품으로 계속 남게 되어 Restore() 호출할 때 마다 결제 영수증을 서버에 전달하게 된다.

      • 이미 아이템 지급까지 완료된 결제 건에 대해서도 Restore() 호출로 결제 영수증이 수신되어 게임서버에 전달될 수 있음

  • 시나리오2 : 결제 완료 후 게임 서버에 결제 영수증 전송 성공

    • 결제 완료 ➔ 앱: 결제 영수증 수신(O)

    • 결제 완료 ➔ 앱: 결제 영수증 수신(O) ➔ 게임서버 전달(O)-> 결제 프로세스 완료(X)

    • 결제 완료 ➔ 앱: 결제 영수증 수신(O) ➔ 게임서버 전달(O) -> 결제 프로세스 완료(O) ➔ 아이템 지급(O) ➔ BillingPlatform.OnPurchaseCompleted(true)를 호출 (X)

      • 앱 : BillingPlatform.Restore() 호출 ➔ 결제 영수증 수신 ➔ 게임서버 전달

      • 게임서버 :

        • (1) 로그인 한 계정에 미처리 결제 건이있는지 체크 후 프로세스 완료

        • (2) BillingPlatform.Restore() 호출로 결제 영수증 수신

      • (1)에서 이미 완료한 결제 건 인 경우 ➔ 앱에 결과 전달

      • 결제 프로세스 완료되지 않은 경우 ➔ 결제 백엔드 연동 결제 프로세스 진행 ➔ 앱에 결과 전달

      • 앱 : 결제 프로세스 완료 후 결제 결과 수신

        • BillingPlatform.OnPurchaseCompleted(true) 호출

          • 이미 아이템 지급까지 완료된 결제 건에 대해서도 BillingPlatform.Restore() 호출로 결제 영수증이 수신되어 게임 서버에 전달될 수 있음

          • 서버에서 완료 결과를 앱 이 수신 실패 하여 OnPurchaseCompleted(true) 호출이 안되는 경우

          • 이미 지급된 결제 건에 대해서도 반드시 OnPurchaseCompleted(true)를 호출하여 결제를 완료해야 한다. ((2) - (1) 경우 해당)

circle-exclamation

정리하면, 결제 영수증 소비 처리는

  • 안드로이드 : 서버에서 결제 프로세스 과정에서 소비 처리

  • iOS : 앱에서 OnPurchaseCompleted(true) 호출로 결제 프로세스 과정에서 소비처리 즉, 게임에서 결제 영수증 소비 처리

    • true로 호출하지 않으면 Restore() 호출할 때 마다 미처리 결제 건으로 결제 영수증이 게임으로 전달됩니다.

    • 이미 지급된 결제 건에 대해서 중복 요청한 경우 게임 서버에서 게임으로 '이미 지급한 결제' 건으로 정보를 전달하고 이 경우에 게임은 OnPurchaseCompleted(true) 호출하여 이미 지급된 결제 건을 소비처리 해야 합니다.

Last updated