[java] 앱에서 인앱 결제 구현

앱에서 인앱 결제를 구현하기 위해서는 몇 가지 단계를 따라야 합니다. 이 글에서는 Java를 사용하여 안드로이드 앱에서 인앱 결제를 구현하는 방법에 대해 알아보겠습니다.

1. Google Play Billing Library 설정

앱에서 인앱 결제를 구현하기 위해서는 먼저 Google Play Billing Library를 앱에 추가해야 합니다. 이를 위해서는 다음 단계를 따르세요:

  1. 프로젝트의 build.gradle 파일에서 dependencies 섹션에 다음 코드를 추가하세요:
implementation 'com.android.billingclient:billing:+'`
  1. 앱 모듈의 build.gradle 파일에서 android 섹션에 다음 코드를 추가하세요:
packagingOptions {
    exclude 'META-INF/DEPENDENCIES'
    exclude 'META-INF/LICENSE'
    exclude 'META-INF/LICENSE.txt'
    exclude 'META-INF/license.txt'
    exclude 'META-INF/NOTICE'
    exclude 'META-INF/NOTICE.txt'
    exclude 'META-INF/notice.txt'
    exclude 'META-INF/ASL2.0'
    exclude 'META-INF/MANIFEST.MF'
    exclude("META-INF/*.kotlin_module")
}

2. 인앱 상품 등록

Google Play 콘솔에서 앱에 판매할 인앱 상품을 등록해야 합니다. 다음 단계를 따라 인앱 상품을 등록하세요:

  1. Google Play 콘솔에 로그인하세요.
  2. 앱을 선택한 후 “상품” 메뉴로 이동하세요.
  3. “인앱 상품 추가” 버튼을 클릭하세요.
  4. 인앱 상품의 종류에 맞는 옵션을 선택하세요 (ex: 소비형, 영구적 등).
  5. 필요한 정보 (상품 ID, 가격 등)를 입력하세요.
  6. “저장” 버튼을 클릭하여 인앱 상품을 등록하세요.

3. 인앱 결제 구현

인앱 상품 등록이 완료되었다면 앱에서 실제로 인앱 결제를 수행할 수 있습니다. 다음은 인앱 결제를 구현하는 단계입니다:

  1. BillingClient 인스턴스를 초기화합니다:
private BillingClient billingClient;

...

billingClient = BillingClient.newBuilder(context)
    .setListener(this)
    .enablePendingPurchases()
    .build();
  1. BillingClientStateListener를 구현하고 onBillingSetupFinished 메서드에서 구매 가능한 인앱 상품 목록을 요청합니다:
@Override
public void onBillingSetupFinished(BillingResult billingResult) {
    if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK) {
        List<String> skuList = new ArrayList<>();
        skuList.add("your_product_id");

        SkuDetailsParams.Builder params = SkuDetailsParams.newBuilder();
        params.setSkusList(skuList).setType(BillingClient.SkuType.INAPP);

        billingClient.querySkuDetailsAsync(params.build(),
            (billingResult1, skuDetailsList) -> {
                // 구매 가능한 인앱 상품 목록 처리
            });
    }
}
  1. SkuDetailsResponseListener를 구현하고 onSkuDetailsResponse 메서드에서 구매 과정을 처리합니다:
@Override
public void onSkuDetailsResponse(BillingResult billingResult, List<SkuDetails> skuDetailsList) {
    if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && skuDetailsList != null) {
        // 구매 과정 처리
    }
}
  1. 구매 버튼을 클릭하거나 결제를 요청할 때 BillingFlowParams를 생성하여 구매 프로세스를 시작합니다:
BillingFlowParams flowParams = BillingFlowParams.newBuilder()
    .setSkuDetails(skuDetails)
    .build();

BillingResult result = billingClient.launchBillingFlow(activity, flowParams);

위의 코드에서 skuDetails는 구매할 인앱 상품의 SkuDetails 객체입니다.

  1. 결제가 완료되면 onPurchasesUpdated 메서드에서 구매 정보를 처리합니다:
@Override
public void onPurchasesUpdated(BillingResult billingResult, List<Purchase> purchases) {
    if (billingResult.getResponseCode() == BillingClient.BillingResponseCode.OK && purchases != null) {
        // 구매 정보 처리
    }
}

인앱 결제 구현 완료 후에는 구매 처리, 구독 갱신 등 추가적인 기능을 구현할 수 있습니다. Google Play Billing Library에 대한 더 자세한 내용은 공식 문서를 참조하세요.