メインコンテンツまでスキップ

Google Play Billing SDK から Aptoide Billing SDK への移行

概要

この移行では、**ワンタイム製品(消費型)**について、Google Play Billing SDKcom.android.billingclient:billing)を Aptoide Billing SDKcom.aptoide:android-aptoide-billing)に置き換えます。Aptoide Billing SDK は構造的に Google Play Billing とよく似ているため、必要なコード変更はわずかな的を絞ったものだけで済みます。以下の手順では、置き換えまたはリファクタリングすべき内容を正確に順を追って説明します。


移行例

...
// Update the imports from Google Play package to Aptoide package
import android.app.Activity
import android.content.Context
import android.util.Log
-import com.android.billingclient.api.AcknowledgePurchaseResponseListener
-import com.android.billingclient.api.BillingClient
-import com.android.billingclient.api.BillingClient.BillingResponseCode
-import com.android.billingclient.api.BillingClient.ProductType
-import com.android.billingclient.api.BillingClientStateListener
-import com.android.billingclient.api.BillingFlowParams
-import com.android.billingclient.api.BillingResult
-import com.android.billingclient.api.ConsumeParams
-import com.android.billingclient.api.ConsumeResponseListener
-import com.android.billingclient.api.ProductDetails
-import com.android.billingclient.api.Purchase
-import com.android.billingclient.api.PurchasesUpdatedListener
-import com.android.billingclient.api.QueryProductDetailsParams
-import com.android.billingclient.api.QueryProductDetailsParams.Product
-import com.android.billingclient.api.QueryProductDetailsResult
-import com.android.billingclient.api.QueryPurchasesParams
+import com.aptoide.sdk.billing.AptoideBillingClient
+import com.aptoide.sdk.billing.AptoideBillingClient.BillingResponseCode
+import com.aptoide.sdk.billing.AptoideBillingClient.FeatureType
+import com.aptoide.sdk.billing.AptoideBillingClient.ProductType
+import com.aptoide.sdk.billing.BillingFlowParams
+import com.aptoide.sdk.billing.BillingResult
+import com.aptoide.sdk.billing.ConsumeParams
+import com.aptoide.sdk.billing.ProductDetails
+import com.aptoide.sdk.billing.Purchase
+import com.aptoide.sdk.billing.PurchasesUpdatedListener
+import com.aptoide.sdk.billing.QueryProductDetailsParams
+import com.aptoide.sdk.billing.QueryProductDetailsParams.Product
+import com.aptoide.sdk.billing.QueryProductDetailsResult
+import com.aptoide.sdk.billing.QueryPurchasesParams
+import com.aptoide.sdk.billing.listeners.AptoideBillingClientStateListener
+import com.aptoide.sdk.billing.listeners.ConsumeResponseListener
...

// Change the type of billingClient to AptoideBillingClient
-var billingClient: BillingClient
+val billingClient: AptoideBillingClient

...
// Update billingClientStateListener to AptoideBillingClientStateListener
-val billingClientStateListener: BillingClientStateListener
+val aptoideBillingClientStateListener: AptoideBillingClientStateListener
get() =
- object : BillingClientStateListener {
+ object : AptoideBillingClientStateListener {
override fun onBillingSetupFinished(billingResult: BillingResult) {
...
}

override fun onBillingServiceDisconnected() {
...
}
}

...
// Initialize the SDK with the AptoideBillingClient Builder
// by setting the Public Key and
// remove enablePendingPurchases
fun setupSdkConnection(context: Context) {
- billingClient = BillingClient.newBuilder(context)
+ billingClient = AptoideBillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
- .enablePendingPurchases()
+ .setPublicKey(PUBLIC_KEY)
.build()
- billingClient.startConnection(billingClientStateListener)
+ billingClient.startConnection(aptoideBillingClientStateListener)
}
...
// Update the Payment initialization by launching it from a background Thread
fun launchPayment(activity: Activity, obfuscatedAccountId: String, productDetailsParamsList: List<BillingFlowParams.ProductDetailsParams>) {
val billingFlowParams = BillingFlowParams.newBuilder()
.setProductDetailsParamsList(productDetailsParamsList)
.setObfuscatedAccountId(obfuscatedAccountId)
.build()

- billingClient.launchBillingFlow(activity, billingFlowParams)
+ Thread {
+ billingClient.launchBillingFlow(activity, billingFlowParams)
+ }.start()
}
...

移行手順の概要

ワンタイム製品の統合を正常に移行するには、以下の変更を適用してください。

  1. SDK の依存関係を更新する
    build.gradle で、Google Play Billing SDK の依存関係を Aptoide Billing SDK に置き換えます。

  2. インポートを更新する
    Google Play Billing を参照するすべてのクラスのインポートを、対応する Aptoide Billing SDK のクラスに更新します。

  3. Billing クライアントの初期化をリファクタリングする
    BillingClientAptoideBillingClient に置き換え、.setPublicKey() を介して公開鍵を指定します。

  4. 購入フローを更新する
    同じ課金フローの構造を使用しますが、Aptoide WebPayments をサポートするために launchBillingFlow() の呼び出しがバックグラウンドスレッドで行われるようにしてください。


1. SDK の依存関係を更新する

実施内容:
build.gradle ファイルから Google Play Billing への依存関係を削除し、代わりに Aptoide Billing SDK を追加します。

また、プロジェクトを同期し、アプリが最新の安定版 Aptoide billing バージョンを使用していることを確認してください。

Google Play SDK:

implementation("com.android.billingclient:billing:8.0.0")  

Aptoide SDK:

implementation("com.aptoide:android-aptoide-billing:1.+")  

2. インポートを更新する

com.android.billingclient.api のクラスへのすべての参照を、com.aptoide.sdk.billing の対応する Aptoide Billing SDK クラスに置き換えます。

ほとんどのクラス名は同じままです(PurchaseProductDetailsBillingFlowParams など)が、異なるパッケージから提供されます。

Google Play のインポート:

import com.android.billingclient.api.BillingClient  
import com.android.billingclient.api.Purchase
import com.android.billingclient.api.ProductDetails
import com.android.billingclient.api.QueryProductDetailsParams
import com.android.billingclient.api.BillingFlowParams
import com.android.billingclient.api.BillingClient; 
import com.android.billingclient.api.Purchase;
import com.android.billingclient.api.ProductDetails;
import com.android.billingclient.api.QueryProductDetailsParams;
import com.android.billingclient.api.BillingFlowParams;

Aptoide のインポート:

import com.aptoide.sdk.billing.AptoideBillingClient  
import com.aptoide.sdk.billing.Purchase
import com.aptoide.sdk.billing.ProductDetails
import com.aptoide.sdk.billing.QueryProductDetailsParams
import com.aptoide.sdk.billing.BillingFlowParams
import com.aptoide.sdk.billing.AptoideBillingClient;  
import com.aptoide.sdk.billing.Purchase;
import com.aptoide.sdk.billing.ProductDetails;
import com.aptoide.sdk.billing.QueryProductDetailsParams;
import com.aptoide.sdk.billing.BillingFlowParams;

3. Billing クライアントの初期化をリファクタリングする

BillingClient のインスタンス化を AptoideBillingClient に置き換えます。Google Play Billing とは異なり、Aptoide SDK では .setPublicKey() を介して公開鍵を設定し、AptoideBillingClientStateListener を指定して startConnection() を使用する必要があります。

公開鍵は Aptoide Connect から取得できます。

Google Play の初期化:

val billingClientStateListener: BillingClientStateListener
get() =
object : BillingClientStateListener {
...
}

val billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.build()

billingClient.startConnection(billingClientStateListener)
BillingClientStateListener billingClientStateListener = new BillingClientStateListener() {
...
};

BillingClient billingClient = BillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.build();

billingClient.startConnection(billingClientStateListener);

Aptoide の初期化:

val aptoideBillingClientStateListener: AptoideBillingClientStateListener
get() =
object : AptoideBillingClientStateListener {
...
}

val billingClient = AptoideBillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.setPublicKey(MY_PUBLIC_KEY)
.build()

billingClient.startConnection(aptoideBillingClientStateListener)
AptoideBillingClientStateListener aptoideBillingClientStateListener = new AptoideBillingClientStateListener() {
...
};

AptoideBillingClient billingClient = AptoideBillingClient.newBuilder(context)
.setListener(purchasesUpdatedListener)
.setPublicKey(MY_PUBLIC_KEY)
.build();

billingClient.startConnection(aptoideBillingClientStateListener);

4. 購入フローを更新する

ProductDetailsParams を作成して渡すロジックは Google と同じです。ただし、Aptoide では launchBillingFlow() の呼び出しを UI スレッドではなくバックグラウンドスレッドから行う必要があります。これにより、ネイティブの Wallet アプリがインストールされていない場合の Aptoide の WebPayment フォールバックとの互換性が確保されます。

Google Play の購入フロー:

val billingFlowParams = BillingFlowParams.newBuilder()
.setProductDetailsParamsList(listOf(
BillingFlowParams.ProductDetailsParams.newBuilder()
.setProductDetails(productDetails)
.build()
))
.build()

billingClient.launchBillingFlow(activity, billingFlowParams)
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
.setProductDetailsParamsList(List.of(
BillingFlowParams.ProductDetailsParams.newBuilder()
.setProductDetails(productDetails)
.build()
))
.build();

billingClient.launchBillingFlow(activity, billingFlowParams);

Aptoide の購入フロー:

val billingFlowParams = BillingFlowParams.newBuilder()
.setProductDetailsParamsList(listOf(
BillingFlowParams.ProductDetailsParams.newBuilder()
.setProductDetails(productDetails)
.build()
))
.build()

Thread {
val billingResult = billingClient.launchBillingFlow(activity, billingFlowParams)
runOnUiThread {
// Handle billingResult
}
}.start()
BillingFlowParams billingFlowParams = BillingFlowParams.newBuilder()
.setProductDetailsParamsList(List.of(
BillingFlowParams.ProductDetailsParams.newBuilder()
.setProductDetails(productDetails)
.build()
))
.build();

new Thread(() -> {
BillingResult billingResult = billingClient.launchBillingFlow(activity, billingFlowParams);
activity.runOnUiThread(() -> {
// Handle billingResult
});
}).start();

変更点の比較表

機能Google Play BillingAptoide Billing SDK
SDK の依存関係com.android.billingclientcom.aptoide:android-aptoide-billing
インポートGoogle Play のクラス(com.android.billingclient.apiAptoide Billing のクラス(com.aptoide.sdk.billing
Billing クライアントの命名BillingClientAptoideBillingClient
公開鍵の要件.setPublicKey(...) が必須
特定スレッドでの Billing フロー起動UI/メインスレッド✅ WebPayments のためにバックグラウンドスレッドを使用する必要あり

FAQ

Aptoide Billing SDK 統合のドキュメント全体はどこで見つけられますか?

Aptoide Billing SDK 統合に関する当社のドキュメント全体は、こちらでご覧いただけます。当社の課金システムを完全かつ正常に統合するための最も重要な手順が含まれています。


アプリケーションの公開鍵はどこで見つけられますか?

アプリケーションの公開鍵を取得し、それを使用して Billing クライアントを初期化するには、このガイドに従ってください。


アプリケーションにサブスクリプションが含まれていますが、何か違いはありますか?

Aptoide Billing SDK では、サブスクリプションは異なる構造に従っており、正しく統合するにはいくつかの追加変更が必要です。必要な手順がすべて含まれているため、当社の完全な統合ガイドに従ってください。

追加のご質問やご不明な点がある場合は、当社の公式サポートチャネルにお問い合わせください。