android - In App Purchase Error in Static codes -
i using current code purchase calling purchase intent
bundle buyintentbundle = mservice.getbuyintent(3, pcontext.getpackagename(), "android.test.canceled", "inapp", "bgoa+v7g/yqdxv"); set<string> allkeys = buyintentbundle.keyset(); object responsecode= buyintentbundle.get("response_code"); object intent= buyintentbundle.get("buy_intent"); log.i(tag,"buyintentbundle"+buyintentbundle.keyset()+"responsecode"+responsecode+"intent"+intent); pendingintent pendingintent = buyintentbundle.getparcelable("buy_intent"); if (pendingintent != null) { pcontext.startintentsenderforresult(pendingintent.getintentsender(), 2013, new intent(), integer.valueof(0), integer.valueof(0),integer.valueof(0)); } now onactivityresult checking
if (requestcode == 2013) { log.i(tag, "onactivity result called inside request code"); int responsecode = intent.getintextra("response_code", 0); string purchasedata = intent.getstringextra("inapp_purchase_data"); string datasignature = intent.getstringextra("inapp_data_signature"); if (responsecode == constants.billing_response_result_ok) { try { jsonobject jo = new jsonobject(purchasedata); string sku = jo.getstring("productid"); toast.maketext(pcontext, "you have bought " + sku + ". excellent choice, adventurer!", toast.length_short); jsonobject o = new jsonobject(purchasedata); string morderid = o.optstring("orderid"); string mpackagename = o.optstring("packagename"); string msku = o.optstring("productid"); long mpurchasetime = o.optlong("purchasetime"); int mpurchasestate = o.optint("purchasestate"); string mdeveloperpayload = o.optstring("developerpayload"); string mtoken = o.optstring("token", o.optstring("purchasetoken")); try { mservice.consumepurchase(3, pcontext.getpackagename(), mtoken); } catch (remoteexception e) { e.printstacktrace(); }//consumepurchase } catch (jsonexception e) { toast.maketext(pcontext, "failed parse purchase data.", toast.length_short); e.printstacktrace(); } }else if (responsecode == constants.billing_response_result_user_canceled) { toast.maketext(pcontext, "user cancelled purchase.", toast.length_short); }else if (responsecode == constants.billing_response_result_billing_unavailable) { toast.maketext(pcontext, "your device doesn't support inapp billing.", toast.length_short); }else if (responsecode == constants.billing_response_result_item_unavailable) { toast.maketext(pcontext, "item not available billing.", toast.length_short); }else if (responsecode == constants.billing_response_result_developer_error) { toast.maketext(pcontext, "can't purchase item due developer error.", toast.length_short); }else if (responsecode == constants.billing_response_result_error) { toast.maketext(pcontext, "can't purchase item due error in response.", toast.length_short); }else if (responsecode == constants.billing_response_result_item_already_owned) { toast.maketext(pcontext, "you own item.", toast.length_short); }else if (responsecode == constants.billing_response_result_item_not_owned) { toast.maketext(pcontext, "you don't own item.", toast.length_short); } } since calling "android.test.canceled" should getting billing_response_result_user_canceled response shows payment successful , returns responsecode billing_response_result_ok no other parameter in intent.getextras. trying static responses http://developer.android.com/google/play/billing/billing_testing.html#billing-testing-static
thanks & regards!!
you not checking:
if (resultcode == activity.result_ok) { .... } it's possible process not complete successfully. , since default value responsecode in case key "response_code" not present in intent "0"....
int responsecode = intent.getintextra("response_code", 0); .... responsecode initialized constants.billing_response_result_ok == > 0.
try using:
int responsecode = intent.getintextra("response_code", -1); and add final else block handle -1.
Comments
Post a Comment