为你的应用集成谷歌结算(客户端集成+服务端校验)

本文详细介绍了如何为Android应用集成谷歌结算,包括客户端的集成步骤、遇到的问题,以及服务端的校验流程和注意事项。在客户端,重点讲述了依赖隔离、重连逻辑,以及解决Google Play In-app Billing API版本问题。服务端校验部分,讨论了产品校验接口的使用、整体购买流程设计,以及一些坑点,强调了服务端验证的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在开发自己的一款新产品 言叶,上架到谷歌商店之后有国外用户反馈想要使用谷歌支付,于是我准备为自己的应用集成谷歌结算以允许用户进行内购付款。

之前我完全没用集成过谷歌支付,从寻找到的一些资料来看,谷歌结算的开发方式已经做了调整,新的开发方式比之前使用 AIDL 开发要简单一些。

1、客户端集成

1.1 文档资料

对于客户端集成,官方文档已经给了比较详尽的说明,这里对应的文档资料提供一下:

虽然文档集成说明很详细但是有时候我们需要知道具体的某些类及其字段的含义,类文档可以参考:

  • 类说明文档:https://developer.android.google.cn/reference/com/android/billingclient/api/package-summary

1.2 集成的一些细节

既然谷歌官方文档介绍的已经比较详细了,这里我只对自己集成的时候一些细节设计介绍一下。

1. 依赖隔离

记得之前集成了购买的功能的话,安装 APK 的时候会提示你 “需要谷歌服务才能使用”,所以我在开发的时候提前做了准备。我希望的是,只在国外版本加入 Gooogle billing 依赖,可以在打包的时候进行配置,而国内版本不加入谷歌结算的依赖。因此,在应用 module 之外,我们需要加一个为谷歌支付使用的模块。此模块只用来处理谷歌结算业务,其依赖如下:

dependencies {
   
   
    // billing
    compileOnly "com.android.billingclient:billing:3.0.0"
    compileOnly "com.android.billingclient:billing-ktx:3.0.0"
    // ...
}

这里我使用了 compileOnly 进行依赖,这样是否打入谷歌结算库只要在主工程模块进行配置即可。另外,在代码中通过反射获取类的方式来判断是否加入了谷歌结算依赖:

private fun isGoogleDependencyAdded(): Boolean = try {
   
   
    Class.forName("com.android.billingclient.api.BillingClient")
    true
} catch (e: ClassNotFoundException) {
   
   
    false
}

此外,我们需要保证在主工程中不直接引用谷歌结算库的类。因此,我们需要对谷歌结算库的类进行包装,

data class SkuDetailsWrapper(val skuDetails: SkuDetails) {
   
   

    /** Get the product id */
    fun getProductId(): String = skuDetails.sku

    /** Get sku price */
    fun getPrice(): String = skuDetails.price

    /** Launch billing flow */
    fun launch(activity: Activity, onSuccess: () -> Unit, onFailed: (msg: String) -> Unit) {
   
   
        BillingManager.instance.launchBillingFlow(activity, skuDetails, onSuccess, onFailed)
    }
}

/** Purchase wrapper */
data class PurchaseWrapper(val purchase: Purchase) {
   
   

    fun getPackageName(): String = purchase.packageName

    fun getPurchaseToken(): String = purchase.purchaseToken

    fun isAcknowledged(): Boolean = purchase.isAcknowledged

    fun getOrderId(): String = purchase.orderId

    /** Get google goods id */
    fun getGoogleGoodsId(): String = purchase.sku

    /** Is given product was purchased */
    fun isPurchased():
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值