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
Post a Comment