개발자 제공 결제 전용 인앱 통합 가이드

이 가이드에서는 API를 통합하여 대상 앱에서 개발자 제공 결제 전용(즉, 사용자 선택권 없음)을 제공하는 방법을 설명합니다. 자격 요건과 지리적 범위 등 이러한 프로그램에 관한 자세한 내용은 개발자 제공 결제 정보를 참고하세요.

Play 결제 라이브러리 설정

Android 앱에 Play 결제 라이브러리 종속 항목을 추가합니다. 개발자 제공 결제 API를 사용하려면 버전 6.1 이상을 사용해야 합니다.

Google Play에 연결

통합 프로세스의 첫 번째 단계는 Google Play 결제 통합 가이드와 동일하되 BillingClient 초기화에 약간의 수정이 적용됩니다.

  • 앱에서 개발자 제공 결제 시스템만 사용한다고 나타내려면 다음과 같은 새 메서드를 호출해야 합니다. enableAlternativeBillingOnly

다음 예는 이러한 수정을 적용하여 BillingClient를 초기화하는 방법을 보여줍니다.

Kotlin


var billingClient = BillingClient.newBuilder(context)
    .enableAlternativeBillingOnly()
    .build()

Java

private BillingClient billingClient = BillingClient.newBuilder(context)
    .enableAlternativeBillingOnly()
    .build();

BillingClient를 초기화한 후에는 통합 가이드에 설명된 대로 Google Play에 연결해야 합니다.

사용 가능 여부 확인

앱에서 isAlternativeBillingOnlyAvailableAsync를 호출하여 개발자 제공 결제 전용이 사용 가능한지 확인해야 합니다.

개발자 제공 결제 전용을 사용할 수 있는 경우 이 API는 BillingResponseCode.OK를 반환합니다. 앱이 다른 응답 코드에 응답하는 방법에 관한 자세한 내용은 응답 처리를 참고하세요.

Kotlin


billingClient.isAlternativeBillingOnlyAvailableAsync(object:
    AlternativeBillingOnlyAvailabilityListener {
        override fun onAlternativeBillingOnlyAvailabilityResponse(
            billingResult: BillingResult) {
            if (billingResult.responseCode !=  BillingResponseCode.OK) {
                // Handle failures such as retrying due to network errors,
                // handling alternative billing only being unavailable, etc.
                return
            }

            // Alternative billing only is available. Continue with steps in
            // the guide.
        }
    });

Java


billingClient.isAlternativeBillingOnlyAvailable(
    new AlternativeBillingOnlyAvailabilityListener() {
        @Override
        public void onAlternativeBillingOnlyAvailabilityResponse(
            BillingResult billingResult) {
            if (billingResult.getResponseCode() != BillingResponseCode.OK) {
                 // Handle failures such as retrying due to network errors,
                 // handling alternative billing only being unavailable,
                 // etc.
                return;
            }

            // Alternative billing only is available. Continue with steps in
            // the guide.
        }
    });

사용자를 위한 정보 대화상자

개발자 제공 결제 전용과 통합하려면 자격을 갖춘 앱에서는 결제가 Google Play에서 관리되지 않음을 사용자가 이해할 수 있도록 정보 화면을 표시해야 합니다. 정보 화면은 매번 개발자 제공 결제 흐름을 시작하기 전에 showAlternativeBillingOnlyInformationDialog API를 호출하여 사용자에게 표시되어야 합니다. 사용자가 이미 대화상자를 확인한 경우 이 API를 사용해도 일반적으로 대화상자가 다시 표시되지 않습니다. 사용자가 기기에서 캐시를 지우는 등의 상황에서는 대화상자가 사용자에게 다시 표시될 수도 있습니다.

Kotlin


// An activity reference from which the alternative billing only information
// dialog will be launched.
val activity : Activity = ...;

val listener : AlternativeBillingOnlyInformationDialogListener =
    AlternativeBillingOnlyInformationDialogListener { 
        override fun onAlternativeBillingOnlyInformationDialogResponse(
            billingResult: BillingResult) {
            // check billingResult
        }
}

val billingResult =
    billingClient.showAlternativeBillingOnlyInformationDialog(activity,
        listener)

Java


// An activity reference from which the alternative billing only information
// dialog will be launched.
Activity activity = ...;

AlternativeBillingOnlyInformationDialogListener listener =
    new AlternativeBillingOnlyInformationDialogListener() {
        @Override
        public void onAlternativeBillingOnlyInformationDialogResponse(
            BillingResult billingResult) {
                // check billingResult
            }
    };

BillingResult billingResult =
    billingClient.showAlternativeBillingOnlyInformationDialog(activity,
        listener);

이 메서드가 BillingResponseCode.OK를 반환하면 앱에서 거래를 진행할 수 있습니다. BillingResponseCode.USER_CANCELED의 경우에는 앱에서 showAlternativeBillingOnlyInformationDialog를 호출하여 사용자에게 대화상자를 다시 표시해야 합니다. 다른 응답 코드는 응답 처리 섹션을 참고하세요.

Google Play에 거래 보고

개발자 제공 결제 시스템을 통한 모든 거래는 24시간 이내에 백엔드에서 Google Play Developer API를 호출하여 Google Play에 보고해야 하고 아래 설명된 API를 사용하여 가져온 externalTransactionToken을 제공합니다. 일회성 구매, 새 정기 결제, 기존 정기 결제로 업그레이드/다운그레이드할 때마다 새 externalTransactionToken이 생성되어야 합니다. externalTransactionToken을 획득한 후 거래를 보고하는 방법은 백엔드 통합 가이드를 참고하세요.

Kotlin

billingClient.createAlternativeBillingOnlyReportingDetailsAsync(object:
    AlternativeBillingOnlyReportingDetailsListener {
        override fun onAlternativeBillingOnlyTokenResponse(
            billingResult: BillingResult,
            alternativeBillingOnlyReportingDetails:
                AlternativeBillingOnlyReportingDetails?) {
            if (billingResult.responseCode !=  BillingResponseCode.OK) {
                // Handle failures such as retrying due to network errors.
                return
            }

            val externalTransactionToken =
                alternativeBillingOnlyReportingDetails?
                    .externalTransactionToken

            // Send transaction token to backend and report to Google Play.
        }
    });

Java


billingClient.createAlternativeBillingOnlyReportingDetailsAsync(
    new AlternativeBillingOnlyReportingDetailsListener() {
        @Override
        public void onAlternativeBillingOnlyTokenResponse(
            BillingResult billingResult,
            @Nullable AlternativeBillingOnlyReportingDetails
                alternativeBillingOnlyReportingDetails) {
            if (billingResult.getResponseCode() != BillingResponseCode.OK) {
                // Handle failures such as retrying due to network errors.
                return;
            }

            String transactionToken =
                alternativeBillingOnlyReportingDetails
                .getExternalTransactionToken();

            // Send transaction token to backend and report to Google Play.
        }
    });

응답 처리

오류 발생 시 위의 메서드 isAlternativeBillingOnlyAvailableAsync(), showAlternativeBillingOnlyInformationDialog()createAlternativeBillingOnlyReportingDetailsAsync()는 BillingResponseCode.OK가 아닌 응답을 반환할 수 있습니다. 권장되는 오류 처리 방법은 다음과 같습니다.

  • ERROR: 내부 오류입니다. 개발자 제공 결제 시스템을 통해 거래를 처리합니다. 이 거래는 영향을 받는 정기 결제의 갱신을 포함하여 Google에 보고하지 않아도 됩니다.
  • FEATURE_NOT_SUPPORTED: 현재 기기의 Play 스토어에서 개발자 제공 결제 API를 지원하지 않습니다. 개발자 제공 결제 시스템을 통해 거래를 처리합니다. 이 거래는 Google에 보고하지 않아도 되며 영향을 받는 정기 결제의 갱신도 보고하지 않아도 됩니다.
  • USER_CANCELED: showAlternativeBillingOnlyInformationDialog()를 다시 호출하여 사용자가 다음에 구매를 시도할 때 정보 대화상자를 사용자에게 표시합니다.
  • BILLING_UNAVAILABLE: 이 거래는 개발자 제공 결제 전용에 적합하지 않으므로 이 프로그램에서 진행되면 안 됩니다. 이는 사용자가 이 프로그램을 이용할 수 있는 국가에 거주하지 않거나 계정이 프로그램에 등록되지 않았기 때문입니다. 후자인 경우 Play Console에서 등록 상태를 확인하세요.
  • DEVELOPER_ERROR: 요청에 오류가 있습니다. 계속하기 전에 디버그 메시지를 사용하여 오류를 식별하고 수정하세요.
  • NETWORK_ERROR, SERVICE_DISCONNECTED, SERVICE_UNAVAILABLE: 재시도해야 하는 일시적인 오류입니다. SERVICE_DISCONNECTED의 경우 다시 시도하기 전에 Google Play와의 연결을 다시 설정합니다.

개발자 제공 결제 테스트

개발자 제공 결제 통합을 테스트하려면 라이선스 테스터를 사용해야 합니다. 라이선스 테스터 계정에서 시작한 거래에 대해서는 인보이스가 발행되지 않습니다. 라이선스 테스터 구성에 관한 자세한 내용은 애플리케이션 라이선스로 인앱 결제 테스트를 참고하세요.

다음 단계

인앱 통합을 완료했으면 백엔드 통합을 진행할 수 있습니다.