how to cancel an in-app test purchase on android?

前端 未结 9 500
眼角桃花
眼角桃花 2020-12-14 14:43

Until june 20th 2016 i was able to cancel test purchases done in my app. Doing multiple in-app purchases (not consumable) from the same test account made it easy to develop

相关标签:
9条回答
  • 2020-12-14 15:18

    All managed in-app products are consumable.

    as stated in the docs.

    That means that you can consume an owned item instead of cancelling the purchase and buy it all over again. I suggest querying the inventory at the app launch time:

    mIabHelper.queryInventoryAsync(this);

    You can then consume the owned item in the callback:

    @Override
    public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
        Purchase purchase = inventory.getPurchase(MY_SKU);
        boolean isBought = (purchase != null && verifyDeveloperPayload(purchase));
        if (isBought) {
            mIabHelper.consumeAsync(purchase, new OnConsumeFinishedListener() {
                @Override
                public void onConsumeFinished(Purchase purchase, IabResult result) {
                    //Clear the purchase info from persistent storage
                }
            });
        }
    }
    

    This is OK for testing the IAB flow but make sure to remove this code from the release version.

    0 讨论(0)
  • 2020-12-14 15:18

    I found a solution which isn't very convenient, but works. It seems like you can consume uncomsumable products and that way you can buy them again. I'm working with phonegap so I only have example code for the cordova-plugin-purchase plugin:

    store.when("your.product.id").updated(product => {
        if(product.owned) {
            var transaction = product.transaction;
            product.transaction = null;
            store.inappbilling.consumePurchase(
                function() { // success
                    alert("consume success");
                },
                function(err, code) { // error
                    alert("consume error " + err)
                },
                product.id,
                transaction.id
            );
        }
    });
    

    The updated callback gets called when you call store.refresh() or buy the product. So depending on your use case you'd want to implement an additional method of checking when to consume the product.

    I have no experience with the native Android in-app payments, but obviously you will be able to consume the products there as well.

    Edit: Sorry, I just read that you didn't want to include additional code in your project. I don't think that's possible at the moment, but would like to keep my answer here because it might help other people trying to test in-app payments.

    0 讨论(0)
  • 2020-12-14 15:23

    What worked for me was a combination of both:

    • Go to order management and refund
    • clear cache/data in Play Store app (as well as your app in you placed some shared prefs).

    Also, in case you get an item already owned status, you can consume the purchase using the purchase token and calling billingClient.consumeAsync().

    0 讨论(0)
  • 2020-12-14 15:27

    For people using a way based on the new TrivialDriveKotlin, consumable products are consumed during the installation of the app in the method

    handleConsumablePurchasesAsync
    

    If your purchase is not consumable, you can make it consumable by adding the corresponding sku into CONSUMABLE_SKUS in the GameSku object. Exemple:

    val CONSUMABLE_SKUS = listOf(GAS, PREMIUM_CAR)
    

    Then uninstall your app from your device and install it again, and your non consumable purchase is available again. Fast and simply. Of course, don't forget to remove your

    0 讨论(0)
  • 2020-12-14 15:31
    • On Play Console, go to Developer Account -> Account Details, set the license testers (you are one by default)

    • Purchase items

    • Go to Order Management, choose those test orders, select: refund, but DON'T FORGET to check REVOKE when you are refunding. (I forgot to revoke, and now can't find a way to take them back)

    Anyway, another test account will do.

    0 讨论(0)
  • 2020-12-14 15:40

    Didn't find a solution for this. My workaround is simply remove the current test user from the test users list, make a real purchase, then cancel it using the merchant console.

    0 讨论(0)
提交回复
热议问题