android-consume in app payment - result: IabResult: Items of type 'subs' can't be consumed -
android-consume in app payment - result: IabResult: Items of type 'subs' can't be consumed -
i'm writing consumable in app payment. code :
static final string sku_premium = "goldvip1"; boolean mispremium = false; static final int rc_request = 12345; iabhelper mhelper; @override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.payit); initilize(); actionbar(); string base64encodedpublickey = "mihnma0gcsqgsib3dqebaquaa4g7adcbtwkbrwds6t/zu28hm3usan93f+s0nlvk1sajcmwiulyeurqs8ebf1eb8jdm6fqxibp0q3kdijpgdla5idexybxpkvcqcf9ekugyu8mizjwgtmrjtlpo+/xhgjxpdvrgvtksdsu4gtovl5miv6jvvugltms68qxct+rea6gtxvjprnhzei0lxnd6a6qubdzn/bxy6qw2hq0nmugm/+gzl1cffdxlookllnj/oqnwosq4ilbwsoccaweaaq=="; mhelper = new iabhelper(this, base64encodedpublickey); mhelper.startsetup(new iabhelper.oniabsetupfinishedlistener() { public void oniabsetupfinished(iabresult result) { if (!result.issuccess()) { log.v("this", "problem setting in-app billing: " + result); }else if(result.issuccess()) mhelper.queryinventoryasync(mgotinventorylistener); } }); b.setonclicklistener(new onclicklistener() { @override public void onclick(view v) { mhelper.launchpurchaseflow(payit.this, sku_premium, rc_request, mpurchasefinishedlistener); } }); } iabhelper.queryinventoryfinishedlistener mgotinventorylistener = new iabhelper.queryinventoryfinishedlistener() { public void onqueryinventoryfinished(iabresult result, inventory inventory) { if (result.isfailure()) { //log.v("this", "failed query inventory: " + result); tv.settext(dariglyphutils.reshapetext(z_farsi.convert(getstring(r.string.problempaying)))); return; }else { mispremium = inventory.haspurchase(sku_premium); log.v("this", "user " + (mispremium ? "premium" : "not premium")); b.setenabled(true); purchase gaspurchase = inventory.getpurchase(sku_premium); if (gaspurchase != null ) mhelper.consumeasync(inventory.getpurchase(sku_premium), mconsumefinishedlistener); } //log.v("this", "initial inventory query finished; enabling main ui."); } }; public void consumeitem() { mhelper.queryinventoryasync(mgotinventorylistener); } iabhelper.oniabpurchasefinishedlistener mpurchasefinishedlistener = new iabhelper.oniabpurchasefinishedlistener() { public void oniabpurchasefinished(iabresult result, purchase purchase) { if (result.isfailure()) { log.v("this", "error purchasing: " + result); return; } else if (purchase.getsku().equals(sku_premium)) { consumeitem(); } if (result.issuccess()) {// successful - item has been payed // flag "clear_task" important, user not sent // purchase activity when presses button. //toast.maketext(getbasecontext(), "thanks payment",toast.length_short).show(); /*intent intentz = new intent(payit.this,page_full.class); intentz.setflags(intent.flag_activity_clear_when_task_reset| intent.flag_activity_new_task); startactivity(intentz);*/ } } }; iabhelper.onconsumefinishedlistener mconsumefinishedlistener = new iabhelper.onconsumefinishedlistener() { public void onconsumefinished(purchase purchase, iabresult result) { log.v("this", "consumption finished. purchase: " + purchase + ", result: " + result); // if disposed of in meantime, quit. if (mhelper == null) return; // know "gas" sku because it's 1 consume, // don't check sku consumed. if have more 1 // sku, should check... if (result.issuccess()) { // consumed, apply effects of item in our // game world's logic, in our case means filling gas tank bit log.v("this", "consumption successful. provisioning."); //alert("you filled 1/4 tank. tank 4 full!"); } else { log.v("this","error while consuming: " + result); } log.v("this", "end consumption flow."); } }; @override protected void onactivityresult(int requestcode, int resultcode, intent data) { super.onactivityresult(requestcode, resultcode, data); log.v("this", "onactivityresult(" + requestcode + "," + resultcode + "," + data); // pass on activity result helper handling if (!mhelper.handleactivityresult(requestcode, resultcode, data)) { super.onactivityresult(requestcode, resultcode, data); } else { log.v("this", "onactivityresult handled iabutil."); } }
please , notify sku_premium consumable item . error :
consumption finished. purchase: purchaseinfo(type:subs):{"orderid": "-vmhod_kwxms6ksb", "purchasetoken": "-vmhod_kwxms6ksb", "developerpayload": "", "packagename": "com.example.package", "purchasestate": 0, "purchasetime": 1413292833534, "productid": "goldvip1"}, result: iabresult: items of type 'subs' can't consumed. (response: -1010:invalid consumption attempt)
i think of import part : result: iabresult: items of type 'subs' can't consumed.
why error ? help me ?
thanks
because have not override function below :
@override protected void onactivityresult(int requestcode, int resultcode, intent data) { if (!mhelper.handleactivityresult(requestcode, resultcode, data)) { super.onactivityresult(requestcode, resultcode, data); } }
then here buyclick function
public void onbuyclickbuttonclicking(view arg0) { mhelper.launchpurchaseflow(this, item_sku, 50002, mpurchasefinishedlistener, "mypurchasetoken"); }
and here purchased finished listener :
iabhelper.oniabpurchasefinishedlistener mpurchasefinishedlistener = new iabhelper.oniabpurchasefinishedlistener() { public void oniabpurchasefinished(iabresult result, purchase purchase) { log.d(tag, "purchase finished: " + result + ", purchase: " + purchase); // if disposed of in meantime, quit. if (mhelper == null) return; if (result.isfailure()) { // handle error return; } else if (purchase.getsku().equals(item_sku)) { mhelper.consumeasync(purchase, mconsumefinishedlistener); } } };
and consume finish listener :
iabhelper.onconsumefinishedlistener mconsumefinishedlistener = new iabhelper.onconsumefinishedlistener() { public void onconsumefinished(purchase purchase, iabresult result) { log.d(tag, "consumption finished. purchase: " + purchase + ", result: " + result); // if disposed of in meantime, quit. if (mhelper == null) return; if (result.issuccess()) { } else { // handle error } } };
android
Comments
Post a Comment