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

从 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 客户端初始化
    BillingClient 替换为 AptoideBillingClient,并通过 .setPublicKey() 提供公钥。

  4. 更新购买流程
    使用相同的计费流程结构,但确保对 launchBillingFlow() 的调用在后台线程中完成,以支持 Aptoide WebPayments。


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() 设置公钥,并使用带有 AptoideBillingClientStateListenerstartConnection()

您可以从 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 中遵循不同的结构,需要进行一些额外的更改才能正确集成它们。请遵循我们完整的集成指南,因为它包含所有必要的步骤。

如果您有任何其他问题或疑问,请联系我们的官方支持渠道。