Reputation: 583
I am trying to add an in-app purchase into my app, but have not been successful.
I have added dependacy in build.gradle:
implementation 'com.android.billingclient:billing:6.2.1'
BillingClient.kt
package xyz.mikkm.jagobd
import android.app.Activity
import android.util.Log
import com.android.billingclient.api.*
class BillingClientWrapper(private val activity: Activity) : PurchasesUpdatedListener {
private val billingClient: BillingClient = BillingClient.newBuilder(activity)
.enablePendingPurchases()
.setListener(this)
.build()
init {
billingClient.startConnection(object : BillingClientStateListener {
override fun onBillingSetupFinished(billingResult: BillingResult) {
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
// Billing client is ready
Log.d("BillingClient", "Billing client setup finished.")
} else {
// Error handling
Log.e("BillingClient", "Failed to set up billing client. Error code: ${billingResult.responseCode}")
}
}
override fun onBillingServiceDisconnected() {
// Try to restart the connection on the next request to
// Google Play by calling the startConnection() method.
Log.d("BillingClient", "Billing service disconnected.")
}
})
}
fun querySkuDetailsAsync(skuList: List<String>, listener: SkuDetailsResponseListener) {
Log.d("BillingClient", "Querying SKU details for $skuList")
val params = SkuDetailsParams.newBuilder()
.setSkusList(skuList)
.setType(BillingClient.SkuType.INAPP)
.build()
billingClient.querySkuDetailsAsync(params) { billingResult, skuDetailsList ->
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK) {
listener.onSkuDetailsResponse(billingResult, skuDetailsList)
} else {
// Error handling
Log.e("BillingClient", "Failed to query SKU details. Error code: ${billingResult.responseCode}")
listener.onSkuDetailsResponse(billingResult, null)
}
}
}
fun launchBillingFlow(activity: Activity, skuDetails: SkuDetails) {
val flowParams = BillingFlowParams.newBuilder()
.setSkuDetails(skuDetails)
.build()
billingClient.launchBillingFlow(activity, flowParams)
}
override fun onPurchasesUpdated(billingResult: BillingResult, purchases: MutableList<Purchase>?) {
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && purchases != null) {
for (purchase in purchases) {
val sku = purchase.skus.firstOrNull() // Accessing the first SKU if multiple SKUs exist
if (sku != null) {
// Handle purchase
Log.d("BillingClient", "Purchase successful: $sku")
} else {
// Handle error: no SKU found
Log.e("BillingClient", "Failed to get SKU for purchase")
}
}
} else if (billingResult.responseCode == BillingClient.BillingResponseCode.USER_CANCELED) {
// Handle user cancelation
Log.d("BillingClient", "User canceled the purchase")
} else {
// Handle other errors
Log.e("BillingClient", "Failed to make a purchase. Error code: ${billingResult.responseCode}")
}
}
}
Then I i initialize billing in MainActivity like this:
class MainActivity : AppCompatActivity(), View.OnClickListener {
private lateinit var billingClientWrapper: BillingClientWrapper
override fun onCreate(savedInstanceState: Bundle?) {
// Initialize BillingClientWrapper
billingClientWrapper = BillingClientWrapper(this)
// Example usage: querying SKU details
val skuList = listOf("premium")
billingClientWrapper.querySkuDetailsAsync(skuList, object : SkuDetailsResponseListener {
override fun onSkuDetailsResponse(billingResult: BillingResult, skuDetailsList: List<SkuDetails>?) {
if (billingResult.responseCode == BillingClient.BillingResponseCode.OK && skuDetailsList != null) {
// Update UI with SKU details
for (skuDetails in skuDetailsList) {
val sku = skuDetails.sku
val price = skuDetails.price
// Display sku and price in UI (e.g., ListView)
Log.d("BillingClient", "SKU: $sku, Price: $price")
}
} else {
// Handle error
Log.e("BillingClient", "Failed to query SKU details. Error code: ${billingResult.responseCode}")
}
}
})
}
}
I also added in-app product at google play console.
When i run the app i have error:
2024-05-06 10:27:39.988 8551-8551 BillingClient xyz.mikkm.jagobd D Querying SKU details for [premium]
2024-05-06 10:27:39.992 8551-8551 BillingClient xyz.mikkm.jagobd E Failed to query SKU details. Error code: -1
2024-05-06 10:27:39.992 8551-8551 BillingClient xyz.mikkm.jagobd E Failed to query SKU details. Error code: -1
As i understand -1 is generic error code and doesnt show anything specific.
Anyone have any ideas ?
Thank you.
Upvotes: 0
Views: 108