Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android consumable: "already own that item" but inventory.hasPurchase() is false

I'm stuck with Google In App v3 - I tested a purchase without consumption (e.g. when app crashes between buying and consuming) - now I don't find a way out.

If I try to buy again, it says 'you already own that item'. But when I test for ownership, it says I don't own it:

Inventory inv = mHelper.queryInventory(false, null);
inv.getPurchase(sku); // null
inv.hasPurchase(sku); // false

I can't consume something either, as I don't have a purchase to consume. How to proceed here?

EDIT Reproduce it like the following: purchase in-app consumable, then disable internet connection. After that, you're not able to purchase the product again for some hours. Just tested with a popular app from the play store (Diamond Digger Saga), I had the exact same behaviour. Is there really no possibility to avoid/solve this?

like image 262
swalkner Avatar asked Sep 19 '14 05:09

swalkner


2 Answers

I ran into this exact problem. I had two Google accounts on the phone, one which was the developer account (which I foolishly used my personal account for) and another which was the test account I registered in the developer console. I had removed and re-added the developer account from my accounts on the phone, which allowed me to make test-purchases from my app, thinking if the developer account was the second on this list it would use the first for purchases.

Alas, after a couple of runs of the app I ran into your issue. I gave up trying to have both and removed the developer account from my phone. While incredibly inconvenient, this got rid of this problem and allowed me to test purchase, consume, query, etc.

like image 97
Bob Liberatore Avatar answered Sep 27 '22 15:09

Bob Liberatore


If you are doing everything correctly and your code is ok - most likely the problem is in cached Google Play Services data.

For example when you make a test purchase on your device A - on your device B (with the same Google account logged in) you will keep receiving inventory without your purchase for some time. And your inventory.getPurchase(sku) will return null and inventory.hasPurchase(sku) will return false;

To fix this try to open Google Play and close it using Recent Apps button (click it and then swipe the app away) this will terminate the app faster than usual "back" button. Then turn your device off for couple of minutes.

Our goal here is to make Google Play to update it's cache.

Be sure that you're on wifi because it may update rarely if you're on mobile data. Eventually data will be updated and you will get your purchase. In my case it happened after 5 minutes or smth.

like image 45
Kirill Karmazin Avatar answered Sep 26 '22 15:09

Kirill Karmazin