📌  相关文章
📜  如何在 Android 中实现应用内购买?

📅  最后修改于: 2022-05-13 01:54:53.445000             🧑  作者: Mango

如何在 Android 中实现应用内购买?

在本文中,我们将了解如何使用计费库在 Android 智能手机上进行应用内购买。作为流程的一部分,我们将创建一个应用程序,以帮助我们了解应用程序内购买的工作原理。所以,事不宜迟,让我们开始吧。我们将首先创建一个以空 Activity 作为第一个 Activity 的应用程序,将其命名为 MainActivity,并将 XML 文件活动命名为 main.xml。

分步实施

第1步

在应用程序的 build.gradle 文件中,将以下行添加到依赖项部分:

dependencies {
    ...
    implementation 'com.android.billingclient:billing:2.0.1'
}

第2步

您还必须在 Android 清单中提供计费权限:

现在我们已经完成了权限和依赖项的设置,我们必须通过建立与 Google Play 的连接来开始实施过程。

步骤#3

MainActivity 中将创建两个变量。

Kotlin
class MainActivity : AppCompatActivity() {
    private lateinit var myBilled: BillingClient
    private val courseList = listOf("geeks_for_geeks_android_course", "geeks_for_geeks_dsa_course")


Kotlin
class MainActivity : AppCompatActivity(), PurchasesUpdatedListener {
    override fun onCreate(savedInstanceState: Bundle?) {
        ..........
        doMyBiller()
    }
  
    private fun doMyBiller() {
        myBiller = MyBiller.newBuilder(this)
            .enablePendingPurchases()
            .setListener(this)
            .build()
        myBiller.startConnection(object : MyBillerStateListener {
            override fun onBillingSetupFinished(billingResult: BillingResult) {
                if (billingResult.responseCode == MyBiller.BillingResponseCode.OK) {
                    // The MyBiller is setup successfully                 
                }
            }
              
            override fun onBillingServiceDisconnected() {
              // Do something, like restarting the billing service
                 
            }
        })
      
}


Kotlin
private fun loadBillers() = if (myBiller.isReady) {
    val params = Billers
        .newBuilder()
        .setSkusList(skuList)
        .setType(MyBiller.SkuType.INAPP)
        .build()
    myBiller.queryLoadBillersAsync(params) { billingResult, loadBillersList ->
        // Process the result.
        if (billingResult.responseCode == MyBiller.BillingResponseCode.OK && loadBillersList.isNotEmpty()) {
            for (loadBillers in loadBillersList) {
                // this will return both the billers
                  // from Google Play Console
            }
        }
    }
  
} else {
    println("Something Wrong")
}


Kotlin
if (myBiller.responseCode == BillingClient.BillingResponseCode.OK && myBiller.isNotEmpty()) {
    for (myBillers in myBillers) {
        if (myBiller.sku == "gfg_product_one")
            buyCourseBtn.setOnClickListener {
                val billingFlowParams = BillingFlowParams
                    .newBuilder()
                    .setSkuDetails(skuDetails)
                    .build()
                myBiller.launchBillingFlow(this, billingFlowParams)
            }
    }
}


Kotlin
override fun onPurchasesUpdated(
    myBiller: MyBiller?,
    purchases: MutableList?
) {
    if (myBiller?.replyCode == BillingClient.BillingReplyCode.OK && purchases != null) {
        for (purchase in purchases) {
            acknowledgePurchase(purchase.purchaseToken)
  
        }
    } else if (myBiller?.replyCode == BillingClient.BillingReplyCode.USER_CANCELED) {
        // User cancelled purchase
    } else {
        // Some other error handling
    }
}
private fun acknowledgePurchase(purchaseToken: String) {
    val params = AcknowledgePurchaseParams.newBuilder()
        .setPurchaseToken(purchaseToken)
        .build()
    billingClient.acknowledgePurchase(params) { myBiller ->
        val replyCode = myBiller.replyCode
        val debugMessage = myBiller.debugMessage
    }
}


我们生成的第一个变量是 BillingClient 类型,它为库和用户应用程序代码之间的通信提供了主接口,我们还建立了一个 courseList 列表,它定义了我们需要购买的产品 ID 列表。

第4步

我们现在将使用 onCreate() 方法设置计费客户端。

科特林

class MainActivity : AppCompatActivity(), PurchasesUpdatedListener {
    override fun onCreate(savedInstanceState: Bundle?) {
        ..........
        doMyBiller()
    }
  
    private fun doMyBiller() {
        myBiller = MyBiller.newBuilder(this)
            .enablePendingPurchases()
            .setListener(this)
            .build()
        myBiller.startConnection(object : MyBillerStateListener {
            override fun onBillingSetupFinished(billingResult: BillingResult) {
                if (billingResult.responseCode == MyBiller.BillingResponseCode.OK) {
                    // The MyBiller is setup successfully                 
                }
            }
              
            override fun onBillingServiceDisconnected() {
              // Do something, like restarting the billing service
                 
            }
        })
      
}

步骤#5

此时,让我们在游戏机中设置我们的购买产品。首先,登录您的游戏机并从菜单中选择创建应用程序。像设置任何其他应用程序一样设置您的应用程序,包括提供应用程序名称、应用程序描述等信息。

图片 #1:在 Play 开发者控制台中创建新应用

收集所有必要的信息,例如商品详情和评分,然后进行到您只需要提交 APK 或 AAB 文件的阶段。在您完成上述程序后,我们需要开发我们可以购买的产品。为此,当我们完成上述信息的填写后,我们需要向下滚动以激活它并输入产品的定价。

图片 #2:设置应用内购买

按保存!

步骤#6

完成金额和付款后,下一步是加载产品,通过以下方式执行此操作:

科特林

private fun loadBillers() = if (myBiller.isReady) {
    val params = Billers
        .newBuilder()
        .setSkusList(skuList)
        .setType(MyBiller.SkuType.INAPP)
        .build()
    myBiller.queryLoadBillersAsync(params) { billingResult, loadBillersList ->
        // Process the result.
        if (billingResult.responseCode == MyBiller.BillingResponseCode.OK && loadBillersList.isNotEmpty()) {
            for (loadBillers in loadBillersList) {
                // this will return both the billers
                  // from Google Play Console
            }
        }
    }
  
} else {
    println("Something Wrong")
}

步骤 #7

为了完成购买,我们将使用点击监听器。我们将在步骤 06 的成功回调中添加 SKU 获取的成功回调。

科特林

if (myBiller.responseCode == BillingClient.BillingResponseCode.OK && myBiller.isNotEmpty()) {
    for (myBillers in myBillers) {
        if (myBiller.sku == "gfg_product_one")
            buyCourseBtn.setOnClickListener {
                val billingFlowParams = BillingFlowParams
                    .newBuilder()
                    .setSkuDetails(skuDetails)
                    .build()
                myBiller.launchBillingFlow(this, billingFlowParams)
            }
    }
}

当 myBiller 点击时,BillingFlowParams 使用精确的 SKU 数据开始购买流程,而 billingClient 启动计费流程以开始购买指定的 SKU。

步骤 #8

现在我们创建一个可变列表,获取应用上所有可购买物品的列表,然后执行应用内购买

科特林

override fun onPurchasesUpdated(
    myBiller: MyBiller?,
    purchases: MutableList?
) {
    if (myBiller?.replyCode == BillingClient.BillingReplyCode.OK && purchases != null) {
        for (purchase in purchases) {
            acknowledgePurchase(purchase.purchaseToken)
  
        }
    } else if (myBiller?.replyCode == BillingClient.BillingReplyCode.USER_CANCELED) {
        // User cancelled purchase
    } else {
        // Some other error handling
    }
}
private fun acknowledgePurchase(purchaseToken: String) {
    val params = AcknowledgePurchaseParams.newBuilder()
        .setPurchaseToken(purchaseToken)
        .build()
    billingClient.acknowledgePurchase(params) { myBiller ->
        val replyCode = myBiller.replyCode
        val debugMessage = myBiller.debugMessage
    }
}

我们已经完成了我们的任务。只需创建一个签名的 APK 并将其发布到 Play 商店,然后等待它被接受。之后,我们所要做的就是设置卡并购买它。这就是本文的内容,希望您对如何在您的应用中实施应用内购买并开始赚钱有确切的了解!