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()
}
}
}