android - InAppBilling v3 IabResult response code BILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED -


following docs on developer site , have implemented inappbilling v3 in app . have used classes in utils package provided in trivial drive sample.

the problem facing if user has purchased in app product on launching purchse flow again on device play store dialog shows item owned response code returned iabresult not match constant iabhelper.billing_response_result_item_already_owned . response code returned 1 of error codes in iabhelper class (-1005 user cancelled).

i know how can actual response code instead of error code. appreciated.

below code callback

// callback when purchase finished iabhelper.oniabpurchasefinishedlistener mpurchasefinishedlistener =         new iabhelper.oniabpurchasefinishedlistener() {             public void oniabpurchasefinished(iabresult result, purchase purchase) {                  if (result.isfailure()) {                     if (result.getresponse() ==                             iabhelper.billing_response_result_item_already_owned) {                         //already owned                         boolean ispremium = true;                         sharedprefsutils.setpremium(baseactivity.this, ispremium);                         eventbus.getdefault().post(new inappbillinguiupdateevent(ispremium));                         //setwaitscreen(false);                         return;                     }                     //handle error                     complain(result.getresponse() + " " + "error purchasing: " + result);                     //setwaitscreen(false);                     return;                 }                 if (!verifydeveloperpayload(purchase)) {                     //corrupted                     complain("error purchasing. authenticity verification failed.");                     //setwaitscreen(false);                     return;                 }                  //successful                 if (purchase.getsku().equals(no_ads_product_id)) {                     // bought premium upgrade!                     alert("thank upgrading premium!");                     boolean ispremium = true;                     sharedprefsutils.setpremium(baseactivity.this, ispremium);                     eventbus.getdefault().post(new inappbillinguiupdateevent(ispremium));                     //setwaitscreen(false);                 }             }         };  

i managed find problem in iabhelper code , here goes whenever activity.result_canceled result code returned in handleactivityresult method iabresult such cases fixed user cancelled (-1005) no matter reason is. in order correct actual response code replace following code in handleactivityresult

 else if (resultcode == activity.result_canceled) {         logdebug("purchase canceled - response: " + getresponsedesc(responsecode));         result = new iabresult(iabhelper_user_cancelled, "user canceled.");         if (mpurchaselistener != null) mpurchaselistener.oniabpurchasefinished(result, null);     } 

with this

 else if (resultcode == activity.result_canceled) {         logdebug("purchase canceled - response: " + getresponsedesc(responsecode));         result = new iabresult(responsecode, null);         if (mpurchaselistener != null) mpurchaselistener.oniabpurchasefinished(result, null);     } 

hope saves someones time


Comments