인앱 결제 테스트

Google Play Developer Console은 인앱 결제 구현의 테스트에 도움이 되는 여러 가지 도구를 제공합니다.

  • 라이선스 테스트 사용자의 계정에 대해 실제로 요금을 청구하지는 않고 테스트 사용자가 개발자가 게시한 인앱 아이템을 구매할 수 있는 구매 구현을 테스트합니다.
  • 초기 개발 단계에서 테스트하기 위한 Google Play의 정적 결제 응답

인앱 결제를 테스트하려면 Google Play의 알파 또는 베타 채널에 앱을 게시해야 합니다.

알파 또는 베타 채널에 앱을 게시한 후, 테스트 사용자가 앱을 사용할 수 있기까지는 몇 시간 정도 걸릴 수 있습니다. 테스트 기기의 APK 버전 코드는 Google Play의 알파 또는 베타 채널에 현재 업로드되어 있는 버전과 일치해야 합니다.

중요: 인앱 상품을 테스트하거나 알파 또는 베타 채널 앱에서 인앱 구매를 하려면, 각각의 테스트 사용자가 앱의 알파 또는 베타 테스트에 옵트인해야 합니다. 테스트의 옵트인 URL을 방문하면 테스트 사용자로서의 역할이나 활동 등에 대한 설명과 옵트인 링크를 확인할 수 있습니다.

Android 1.6 이상을 실행하는 Android 기반 하드웨어 기기에서 테스트할 수 있습니다. 기기에는 최신 버전의 Google Play 애플리케이션이 설치되어 있어야 합니다. Android 애플리케이션 개발에 사용하기 위해 기기를 설정하는 방법에 대한 개괄적인 정보는 하드웨어 기기 사용을 참조하세요.

인앱 구매 테스트

인앱 결제 구현이 준비되면 다음 두 가지 방법으로 인앱 SKU의 구매를 테스트할 수 있습니다.

  • 테스트 구매: 개발자가 선정한 라이선스 테스트 사용자가 자신에게 실제로는 요금이 청구되는 일 없이 인앱 상품을 구매할 수 있습니다. 테스트 구매 상품은 알파/베타 릴리스에서만 사용할 수 있습니다.
  • 실제 구매: 일반 사용자가 인앱 상품을 실제로 구매할 수 있으며, 사용자가 선택한 결제 수단에 실제로 요금이 청구됩니다.

어느 경우든, 개발자는 Google Play의 알파 및 베타 릴리스 채널에 앱을 게시하여 구매할 수 있는 사용자를 관리할 필요가 있습니다.

아래 섹션에 테스트와 유효성 검사를 위해 이런 접근 방식을 활용하는 방법에 대해 자세히 설명되어 있습니다.

테스트 구매(인앱 결제 샌드박스)

테스트 구매에서는 개발 중이거나 출시 준비 단계에서 인앱 결제 구현을 더 큰 규모로 안전하고 편리하게 테스트할 수 있는 방법이 있습니다. 테스트 구매에서는 인증된 사용자 계정으로 Google Play를 통해 인앱 상품을 구매할 수 있으며, 이때 사용자 계정에는 실제로 요금이 청구되지 않습니다.

테스트 액세스 인증을 받은 사용자는 요금 청구를 받지 않고 구매할 수 있습니다. 테스트 구매에는 orderId 필드가 없는데, 이는 사용자 계정에 실제로 청구되지 않도록 하기 위함입니다.

참고: 테스트 구독 구매는 상품의 구독 기간에 상관없이 매일 되풀이됩니다.

테스트 구매 설정

테스트 구매는 손쉽게 설정할 수 있습니다. 아무 사용자 계정이나 테스트 계정으로 선택할 수 있고, (결제 수단을 통해 요금이 청구되지 않지만) 테스트 계정으로 로그인한 사용자는 누구든 사용 가능한 결제 수단으로 테스트 구매할 수 있습니다.

먼저 테스트 사용자가 구매할 수 있도록 할 인앱 상품을 업로드하고 게시하세요. Developer Console에서 인앱 상품을 업로드하고 게시할 수 있습니다. 참고로, APK 자체를 게시하기 전에 인앱 아이템을 업로드하고 게시할 수 있습니다.

다음으로, 인증된 사용자를 위한 라이선스 테스트 계정을 만드세요. Developer Console에서 Settings > Account details로 이동한 다음, License Testing 섹션에서 Gmail accounts with testing access 필드에 주소를 추가합니다. 자세한 내용은 테스트 구매 설정을 참조하세요.

사용자를 라이선스 테스트 사용자 계정으로 추가하고 변경 내용을 저장한 후, 해당 사용자는 15분 내에 개발자의 인앱 상품을 테스트 구매하기 시작할 수 있습니다.

중요: 알파 또는 베타 채널에 앱을 게시한 후, 테스트 사용자가 제공된 옵트인 URL을 사용하여 앱의 알파 또는 베타 테스트에 옵트인해야 테스트 구매할 수 있습니다.

참고: 사용자의 Android 기기에 라이선스 테스트 계정이 있어야 합니다. 기기에 계정이 두 개 이상 있는 경우 앱을 다운로드한 계정으로 구매가 이루어집니다. 앱을 다운로드한 계정이 없는 경우에는 첫 번째 계정으로 구매가 이루어집니다. 사용자는 구매 대화상자를 펼쳐 구매 중인 계정을 확인할 수 있습니다.

참고: 테스트 구매에는 orderId 필드가 없습니다. 테스트 구매를 추적하려면 purchaseToken 필드를 대신 사용하세요.

테스트 구매와 개발자 계정

인증된 라이선스 테스트 계정은 특정 APK나 패키지 이름이 아니라, Google Play의 개발자 계정과 연결됩니다. 어떤 계정을 테스트 계정으로 식별하면 그 계정을 사용해 요금 청구 없이 인앱 상품을 구매할 수 있습니다.

구매 흐름 세부정보

사용자는 테스트 구매 중에 앱에서 실제 판매, 구매 및 처리 흐름을 테스트할 수 있습니다. 구매 중에는 인앱 아이템이 실제 가격을 가진 정상적인 아이템으로 표시됩니다. 하지만 Google Play에서는 쉽게 식별할 수 있도록 구매 대화상자 중앙 부분에 테스트 구매임을 알리는 메시지를 표시합니다.

완료된 테스트 구매 취소

Google Play에는 각 사용자가 완료한 테스트 구매가 누적되지만 재무 처리 단계로 전달하지 않습니다.

테스트를 계속하려고 테스트 구매를 수동으로 취소하고 싶을 때도 있을 겁니다. 취소하려면 Play 스토어에서 앱 페이지를 여세요. 취소하려는 테스트 구매가 구독일 경우에는 Purchases.subscriptions API의 cancel() 메서드를 사용할 수도 있습니다.

중요: Purchases.subscriptions API의 refund() revoke() 메서드는 테스트 구매를 지원하지 않습니다.

실제 트랜잭션으로 테스트

인앱 결제를 사용하는 앱의 출시 준비를 할 때, 구현에 대해 Google Play 알파/베타 릴리스 옵션을 사용하여 유효성 검사 및 로드 테스트를 수행한 후 모든 사용자에게 앱을 배포할 수 있습니다.

알파/베타 테스트 그룹이 있는 실제 사용자(개발자가 선택한 사용자)는 Google Play에서 앱을 설치하고 인앱 상품을 테스트할 수 있습니다. 이들 사용자는 Google Play에서 구매하기 위한 일반적인 결제 수단을 이용해 자신의 계정에 실제로 요금이 청구되는 실제 구매를 진행할 수 있습니다. 참고로, 알파 및 베타 배포 그룹에 테스트 라이선스 계정을 포함할 경우 위 사용자들은 테스트 구매만 할 수 있습니다.

중요: 알파 또는 베타 채널에 앱을 게시한 후, 테스트 사용자가 제공된 옵트인 URL을 사용하여 앱의 알파 또는 베타 테스트에 옵트인해야 테스트 구매할 수 있습니다.

정적 응답을 이용한 테스트

먼저 Google Play의 정적 응답을 사용하여 인앱 결제 구현을 테스트하는 것이 좋습니다. 이를 통해 애플리케이션이 기본 Google Play 응답을 올바로 처리하고 있는지, 애플리케이션이 서명을 올바로 인증할 수 있는지 확인할 수 있습니다. 앱이 아직 게시되지 않았더라도 확인할 수 있습니다.

정적 응답으로 구현을 테스트하려면 상품 ID가 따로 예약되어 있는 아이템을 사용하여 인앱 결제 요청을 하세요. 예약된 각 상품 ID는 Google Play에서 특정한 정적 응답을 반환합니다. 예약된 상품 ID로 인앱 결제 요청을 하면 돈이 이체되지 않습니다. 또한, 예약된 상품 ID로 결제 요청을 할 때는 결제 양식을 지정할 수 없습니다. 그림 1은 상품 ID가 android.test.purchased인 예약 아이템에 대한 결제 흐름을 나타낸 것입니다.

그림 1.별도로 예약된 아이템 android.test.purchased에 대한 구매 흐름

애플리케이션의 상품 목록에 예약된 상품을 나열할 필요는 없습니다. Google Play는 예약된 상품 ID를 이미 알고 있습니다. 또한, 예약된 상품 ID로 정적 응답 테스트를 수행하려고 Developer Console에 애플리케이션을 업로드할 필요가 없습니다. 그냥 기기에 애플리케이션을 설치하고, 기기에 로그인하고, 예약된 상품 ID를 사용해 결제 요청을 하면 됩니다.

참고: 이전에는 게시되지 않은 "초안" 버전을 업로드하여 앱을 테스트할 수 있었습니다. 이 기능은 더 이상 지원되지 않습니다. 하지만 Google Play 스토어에 앱을 업로드하기도 전에 정적 응답으로 앱을 테스트할 수 있습니다. 자세한 내용은 초안 앱 지원 중단을 참조하세요.

정적 인앱 결제 응답 테스트를 위해 예약된 상품 ID는 다음 4가지가 있습니다.

  • android.test.purchased

    이 상품 ID로 인앱 결제 요청을 하면 Google Play가 마치 아이템 구매에 성공한 것처럼 응답합니다. 응답에는 JSON 문자열이 포함되는데, 이 문자열에는 가짜 구매 정보(예: 가짜 주문 ID)가 포함됩니다. 어떤 경우에는 JSON 문자열이 서명되어 있고 응답에 그 서명이 포함되어 있기도 한데, 이때는 이런 응답을 사용해 서명 확인 구현을 테스트할 수 있습니다.

  • android.test.canceled

    이 상품 ID로 인앱 결제 요청을 하면 Google Play가 마치 구매가 취소된 것처럼 응답합니다. 주문 프로세스에서 잘못된 신용카드 정보와 같은 오류가 발생하거나 사용자의 주문에 요금이 청구되기 전에 주문을 취소할 때 이런 현상이 발생할 수 있습니다.

  • android.test.refunded

    이 상품 ID로 인앱 결제 요청을 하면 Google Play가 마치 구매가 환불 처리된 것처럼 응답합니다. Google Play의 인앱 결제 서비스를 통해서는 환불이 시작될 수 없습니다. 환불은 개발자(즉, 판매자)가 시작해야 합니다. Google Payments 판매자 계정을 통해 환불 요청을 처리하면 Google Play에서 애플리케이션으로 환불 메시지를 보냅니다. 이는 Google Play가 Google Payments로부터 환불되었음을 알리는 메시지를 받을 때만 일어나는 일입니다. 환불에 대한 자세한 내용은 IN_APP_NOTIFY 메시지 처리인앱 결제 가격을 참조하세요.

  • android.test.item_unavailable

    이 상품 ID로 인앱 결제 요청을 하면 Google Play가 마치 구매 중인 아이템이 애플리케이션의 상품 목록에 없는 것처럼 응답합니다.

때로는 예약된 아이템이 서명된 정적 응답을 반환하여 애플리케이션에서 서명 확인을 테스트할 수 있는 경우도 있습니다. 애플리케이션을 실행하는 사용자에게 개발자 또는 테스트 계정이 있는 경우 예약된 아이템은 서명된 응답만 반환합니다.

예약된 상품 ID로 인앱 결제 요청을 하려면 일반적인 REQUEST_PURCHASE 요청만 생성하면 되지만, 애플리케이션의 상품 목록에 있는 실제 상품 ID를 사용하는 대신 예약된 상품 ID 중 하나를 사용하세요.

예약된 상품 ID를 사용하여 애플리케이션을 테스트하려면 다음 단계를 따르세요.

  1. Android 구동 기기에 애플리케이션을 설치합니다.

    에뮬레이터를 사용하여 인앱 결제를 테스트할 수 없습니다. 기기에 개발자의 애플리케이션을 설치하여 인앱 결제를 테스트하세요.

    기기에 애플리케이션을 설치하는 방법을 알아보려면 기기에서 실행을 참조하세요.

  2. 개발자 계정으로 기기에 로그인합니다.

    예약된 상품 ID로만 테스트할 경우에는 테스트 계정을 사용할 필요가 없습니다.

  3. 기기에서 지원되는 버전의 Google Play 애플리케이션 또는 MyApps 애플리케이션을 실행 중인지 확인합니다.

    기기에서 Android 3.0을 실행 중이면 인앱 결제를 위해 MyApps 애플리케이션 버전 5.0.12 이상이 필요합니다. 기기에서 다른 버전의 Android를 실행 중이면 인앱 결제에 Google Play 애플리케이션 버전 2.3.4 이상이 필요합니다. Google Play 애플리케이션의 버전을 확인하는 방법은 Google Play 업데이트를 참조하세요.

  4. 애플리케이션을 실행하고 예약된 상품 ID를 구매합니다.

참고: 예약된 상품 ID로 인앱 결제를 요청하면 일반적인 Google Play 프로덕션 시스템이 재정의됩니다. 예약된 상품 ID에 대한 인앱 결제 요청을 보내면 서비스 품질을 프로덕션 환경과 비교할 수 없게 됩니다.

테스트 구매 설정

정적 응답 테스트를 마치고 애플리케이션에서 서명 확인이 작동 중인 것을 확인하고 나면, 실제 인앱 구매를 실행하여 인앱 결제 구현을 테스트할 수 있습니다. 실제 인앱 구매를 테스트하면 Google Play에서의 실제 구매와 사용자가 개발자의 애플리케이션에서 경험하게 될 실제 결제 흐름을 비롯하여, 전반적인 인앱 결제 환경을 테스트할 수 있습니다.

참고: 알파 배포 채널에 앱을 게시하여 앱을 종합적으로 철저히 테스트할 수 있습니다. 이를 통해 Google Play 스토어에 앱을 게시할 수 있지만, 개발자 자신이 지정한 테스트 사용자만 사용할 수 있도록 제한하세요.

실제 인앱 구매로 인앱 결제 구현을 테스트하려면 Google Play Developer Console에 한 개 이상의 테스트 계정을 등록해야 합니다. Google Payments에서는 개발자가 스스로에게서 아이템을 살 수 없도록 되어 있으므로, 자신의 개발자 계정을 사용하여 전체 인앱 구매 프로세스를 테스트할 수는 없습니다. 전에 테스트 계정을 설정해본 적이 없다면, 테스트 계정 설정을 참조하세요.

테스트 계정으로는 아이템이 게시되어 있을 때만 상품 목록에서 해당 아이템을 구매할 수 있습니다.

실제 구매로 인앱 결제 구현을 테스트하려면 다음 단계를 따르세요.

  1. Developer Console로 알파 배포 채널에 애플리케이션을 업로드합니다.

    참고: 이전에는 게시되지 않은 "초안" 버전을 업로드하여 앱을 테스트할 수 있었습니다. 이 기능은 더 이상 지원되지 않으며, 그 대신 알파 또는 베타 배포 채널에 앱을 게시해야 합니다. 자세한 내용은 초안 앱 지원 중단을 참조하세요.

  2. 애플리케이션의 상품 목록에 아이템을 추가합니다.

    아이템을 게시하세요(애플리케이션은 게시되지 않은 상태로 유지할 수 있음). 작업 수행 방법은 상품 목록 생성을 참조하세요.

  3. Android 구동 기기에 애플리케이션을 설치합니다.

    에뮬레이터를 사용하여 인앱 결제를 테스트할 수 없습니다. 기기에 개발자의 애플리케이션을 설치하여 인앱 결제를 테스트하세요.

    기기에 애플리케이션을 설치하는 방법을 알아보려면 기기에서 실행을 참조하세요.

  4. 기기에서 지원되는 버전의 Google Play 애플리케이션 또는 MyApps 애플리케이션을 실행 중인지 확인합니다.

    기기에서 Android 3.0을 실행 중이면 인앱 결제를 위해 MyApps 애플리케이션 버전 5.0.12 이상이 필요합니다. 기기에서 다른 버전의 Android를 실행 중이면 인앱 결제에 Google Play 애플리케이션 버전 2.3.4 이상이 필요합니다. Google Play 애플리케이션의 버전을 확인하는 방법은 Google Play 업데이트를 참조하세요.

  5. 애플리케이션에서 인앱 구매를 진행합니다.

참고: 기기에서 기본 계정을 변경하는 유일한 방법은 기본값으로 재설정하고 기본 계정으로 먼저 로그인하는 것입니다.

인앱 결제 구현 테스트를 마치면 Google Play에 애플리케이션을 게시할 준비가 완료됩니다. 그러면 Google Play에서 준비, 서명, 게시하는 일반적인 단계를 따르면 됩니다.

초안 앱 지원 중단

이전에는 앱의 "초안" 버전을 게시하여 테스트할 수 있었습니다. 이 기능은 더 이상 지원되지 않습니다. 그 대신, 다음과 같이 Google Play 스토어에서 출시 전 앱이 어떻게 작동하는지 테스트할 수 있는 두 가지 방법이 있습니다.

  • 알파 또는 베타 배포 채널에 앱을 게시할 수 있습니다. 그러면 Google Play 스토어에서 앱을 사용할 수 있지만, 개발자가 "허용 목록"에 올린 테스트 사용자로만 한정됩니다.
  • 몇 가지 경우에 게시되지 않은 앱으로 Google Play 기능을 테스트할 수 있습니다. 예를 들어, 항상 특정한 결과(예: "purchased" 또는 "refunded")를 반환하는 정적 응답인 별도로 예약된 상품 ID를 사용하여 게시되지 않은 앱의 인앱 결제 지원을 테스트할 수 있습니다.