介绍
google应用内支付主要用于海外应用的内购。主要分为一次性产品、订阅和奖励产品,本文主要介绍订阅和一次性产品,其他内容可以参考google开发文档。
订阅
类比国内各种产品的会员,每隔一定周期向用户收费。我负责开发的应用也主要采用这种收费模式,分为按月和按年两种付费模式。
一次性购买
类比游戏买皮肤这种一次性买断商品。最开始我们也使用了这种方式,后来被舍弃了,改为了按年订阅。
试用期
这两种收费方式都存在着试用期一说,试用期内用户使用产品不会进行扣费,试用期结束之后如果用户没有取消才会进行扣款。
取消
如果用户订阅后再取消订阅,在试用期内用户可以选择取消购买,订阅状态会自动保持到此次订阅周期结束之后。
用户A订阅B产品(试用期假设是3天),在前三天不管哪天取消,都是白嫖不会扣款,并且订阅会一直持续到试用期结束(能够查询到用户的订阅),之后A再购买同一个产品就会立即扣费,不再有试用期了。
产品的实际计算周期也是从试用期结束之后计算的,所以第一次用户的订阅周期=试用期天数+产品天数
购买确认
确认购买交易
用户再进行付款后,客户端在收到用户的订阅结果后需要向google发送购买结果确认(防止用户付费了但是客户端没收到结果,导致用户白白扣钱),否则一段时间后订单会自动取消。
接入代码
引入
implementation 'com.android.billingclient:billing:2.0.3'
初始化连接google play
首先通过BillingClient.startConnection连接google play
private lateinit var billingClient: BillingClient
fun initServiceConnect(context:Context,purchasesUpdated:(Int)->Unit={
},connected:(Boolean)->Unit){
//这里监听购买结果
billingClient = BillingClient.newBuilder(context).enablePendingPurchases().setListener (object :PurchasesUpdatedListener{
override fun onPurchasesUpdated(billingResult: BillingResult, purchases: MutableList<Purchase>?) {
purchasesUpdated(billingResult.responseCode)
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && purchases != null) {
Log.i("PayHelpe onPurchases",billingResult.responseCode.toString())
//这里进行支付确认
for (purchaseItem in purchases) {
handlePurchase(purchaseItem)
}
} else if (billingResult.responseCode == BillingClient.BillingResponseCode.USER_CANCELED) {
Log.i("PayHelpe onPurchases","${
billingResult.responseCode} ${
billingResult.