Google Play Billing 6.0: how get end date of a subscription?

147 Views Asked by At

How can I get the end date of a user's subscription? I'm using the version billing 6.1.0.

implementation 'com.android.billingclient:billing-ktx:6.1.0'

Here is the whole code of how I connect to billing and get a list of products available for purchase and also a list of active user subscriptions:

billingClient.startConnection(object : BillingClientStateListener {
        override fun onBillingSetupFinished(billingResult: BillingResult) {
            if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
                showProducts()
            }
        }

        override fun onBillingServiceDisconnected() {
        }
    })

I get a list of subscriptions available for purchase:

fun showProducts() {
    val productList: ImmutableList<Product> = ImmutableList.of(
        Product.newBuilder()
            .setProductId(TARIFF_SKU_MONTH)
            .setProductType(BillingClient.ProductType.SUBS)
            .build(),
        Product.newBuilder()
            .setProductId(TARIFF_SKU_YEAR)
            .setProductType(BillingClient.ProductType.SUBS)
            .build()
    )

    val params = QueryProductDetailsParams.newBuilder()
        .setProductList(productList)
        .build()

    billingClient.queryProductDetailsAsync(params) { billingResult, prodDetailsList ->
        App.listSkuDetails = prodDetailsList
    }

    handlePendingPurchases()
}

I get a list of active user subscriptions:

private fun handlePendingPurchases() {
    billingClient.queryPurchasesAsync(
        QueryPurchasesParams.newBuilder().setProductType(BillingClient.ProductType.SUBS).build()
    ) { billingResult, list ->
        if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
            if (list.isNotEmpty()) {
                isActiveSubscribe = true
                currentSubscribe = list[0]
                setDataEndSubscribe(list[0])

                for (purchase in list) {
                    verifySubPurchase(purchase)
                }
            } else isActiveSubscribe = false

            App.prefEditor.putBoolean(PREF_ACTIVE_SUBSCRIBE, isActiveSubscribe).apply()
        }
    }
}

I am checking my subscription so that it is confirmed:

fun verifySubPurchase(purchase: Purchase) {
    if (purchase.purchaseState == Purchase.PurchaseState.PURCHASED && !purchase.isAcknowledged) {
        val acknowledgePurchaseParams = AcknowledgePurchaseParams
            .newBuilder()
            .setPurchaseToken(purchase.purchaseToken)
            .build()

        billingClient.acknowledgePurchase(acknowledgePurchaseParams) { billingResult ->
            isActiveSubscribe =
                billingResult.responseCode == BillingClient.BillingResponseCode.OK
            App.prefEditor.putBoolean(PREF_ACTIVE_SUBSCRIBE, isActiveSubscribe).apply()
        }
    }
}
0

There are 0 best solutions below