How to remove test IAP purchase from Android Google Play

18,117

Solution 1

This is an old question but if someone is still looking for a solution then go to:

There you can refund / cancel test purchases. Then clear the purchase state using this command:

adb shell pm clear com.android.vending

Solution 2

The only way I know is to force a consume in your app. You can then remove that code.

Solution 3

I encountered the same situation and started to research. Unfortunately, the directions made here did not produce a solution.

I want to share the solution that worked for me.

If you call the method below in the right place, the solution will be produced. Source : Link

/**
     * Recall that Google Play Billing only supports two SKU types:
     * [in-app products][BillingClient.SkuType.INAPP] and
     * [subscriptions][BillingClient.SkuType.SUBS]. In-app products are actual items that a
     * user can buy, such as a house or food; subscriptions refer to services that a user must
     * pay for regularly, such as auto-insurance. Subscriptions are not consumable.
     *
     * Play Billing provides methods for consuming in-app products because they understand that
     * apps may sell items that users will keep forever (i.e. never consume) such as a house,
     * and consumable items that users will need to keep buying such as food. Nevertheless, Google
     * Play leaves the distinction for which in-app products are consumable entirely up to you.
     *
     * If an app wants its users to be able to keep buying an item, it must call
     * [BillingClient.consumeAsync] each time they buy it. This is because Google Play won't let
     * users buy items that they've previously bought but haven't consumed. In Trivial Drive, for
     * example, consumeAsync is called each time the user buys gas; otherwise they would never be
     * able to buy gas or drive again once the tank becomes empty.
     */

    private fun clearIapHistory() {
            billingClient!!.queryPurchases(BillingClient.SkuType.INAPP).purchasesList
                .forEach {
                    val params =
                        ConsumeParams.newBuilder().setPurchaseToken(it.purchaseToken).build()
                    billingClient!!.consumeAsync(params) { responseCode, purchaseToken ->
                        when (responseCode.responseCode) {
                            BillingClient.BillingResponseCode.OK -> {

                            }
                            else -> {
                                Log.w(LOG_TAG, responseCode.debugMessage)
                            }
                        }
                    }
                }
        }

Solution 4

I am using cc.fovea.cordova.purchase plugin for cordova to manage my IAP purchases. To get my test Non-Consumables to be deleted I changed my registration from Non-consumable to Consumable.

store.register({
      id: this.predatorID,
      alias: 'Predator Pack',
      type: store.CONSUMABLE //store.NON_CONSUMABLE
    });

Also, apparently there are reserved keywords you could use instead (if you're into that). - https://developer.android.com/google/play/billing/billing_testing.html

Solution 5

if (inventory.getPurchase(ITEM_SKU) != null ) {
                try {
                    mIabHelper.consumeAsync(premiumPurchase, new IabHelper.OnConsumeFinishedListener() {
                        @Override
                        public void onConsumeFinished(Purchase purchase, IabResult result) {
                            Toast.makeText(MainActivity.this, "Consumed the test purchase successfully", Toast.LENGTH_SHORT).show();
                        }
                    });
                } catch (IabHelper.IabAsyncInProgressException e) {
                    e.printStackTrace();
                }
             }

However refund() and revoke() methods don't support test purchases and you are left with only consumeAsync() option.

Share:
18,117
Hypergater
Author by

Hypergater

Updated on June 11, 2022

Comments

  • Hypergater
    Hypergater almost 2 years

    I set up a beta account to test IAP for google app that I am working on, the issue I have is, once I have purchased One-time products(non-recurring charge) the test IAP, I cannot 'remove it' as such, so now, even when I delete the app and re-install, it remembers the purchase, that's great in the real world for a user, but not great when trying to fix the bugs!

    Is there any way (short of making a ton of gmail accounts to test with) to remove the purchase from the account?