user2033139
user2033139

Reputation: 583

Google billingclient responseCode -1

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. enter image description here

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

Answers (0)

Related Questions