Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Android In-App Billing: Purchase state stays "purchased" after order cancelation

I'm currently testing my InApp billing mechanism (using the InApp Billing version 3 API, therefore taking the TrivialDrive example as reference).

I have one managed item, which is upgrade to premium version.

Now, purchasing the item with my test account works, but when I do a cancellation of the entire order in Google checkout afterwards, my code still tells me that the item is purchased an therefore grants the premium features.

Here is how I check for the purchase in my MainActivity. I do not save the purchase state locally somewhere, as I understood that the with the billing API v3, you can query for purchases ad hoc as needed.

@Override     protected void onStart() {         // TODO Auto-generated method stub         super.onStart();          iabHelper = new IabHelper(this, Helper.getPKey());         iabHelper.enableDebugLogging(true);          iabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {              @Override             public void onIabSetupFinished(IabResult result) {                 Log.d("IAB", "SETUP FINISHED");                  if(!result.isSuccess())                 {                     Log.d("IAB", "SETUP NOT OK");                     return;                 }                 else                     Log.d("IAB", "SETUP OK");                  iabHelper.queryInventoryAsync(                     new QueryInventoryFinishedListener() {                          @Override                         public void onQueryInventoryFinished(IabResult result, Inventory inv) {                             Log.d("IAB", "Query inventory finished.");                             if (result.isFailure()) {                                 Log.d("IAB","Failed to query inventory: " + result);                                 return;                             }                              Log.d("IAB", "Query inventory was successful.");                              // Do we have the premium upgrade?                             boolean mIsPremium = inv.hasPurchase(Helper.premiumSku);                             Purchase p = inv.getPurchase(Helper.premiumSku);                             if(p != null)                                 Log.d("IAB PURCHASE STATE", IabHelper.getResponseDesc(p.getPurchaseState()));                             else                                 Log.d("IAB PURCHASE STATE", "Purchase is null");                              Log.d("IAB", "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM"));                           }                     }                                         );                           }         });            } 

I keep getting getPurchaseState = 0, which means is Purchased, even one hour after I cancelled the order. Why?

like image 424
Toni Kanoni Avatar asked Jan 13 '13 13:01

Toni Kanoni


1 Answers

After having waited for about 12 hours and having tried everything suggested here, I was still facing the same issue. What did the trick for me was the following adb command:

adb shell pm clear com.android.vending

like image 62
lalit_sam Avatar answered Oct 06 '22 18:10

lalit_sam