android - OnIabPurchaseFinishedListener called but fails -


i'm long time android developer got in-app purchasing. went through google tutorial , got testing version work. however, when try implement custom items purchase, fails @ oniabpurchasefinishedlistener. want @ moment add 3 buttons different levels of donations ($1, $5, $10). have 1 of these items made on developer console.

it fails here:

if (result.isfailure()) {    log.d("money", "error purchasing: " + result);    return; } 

here's code:

package widowmaker110.productions.greenlink.pages;  import android.app.activity; import android.content.intent; import android.os.bundle; import android.util.log; import android.view.view; import android.widget.button; import android.widget.toast;  import widowmaker110.productions.greenlink.r; import widowmaker110.productions.greenlink.util.iabhelper; import widowmaker110.productions.greenlink.util.iabresult; import widowmaker110.productions.greenlink.util.inventory; import widowmaker110.productions.greenlink.util.purchase;  /**  * created alexander on 3/26/2015.  */ public class moneyactivity extends activity{      //http://www.techotopia.com/index.php/an_android_studio_google_play_in-app_billing_tutorial     iabhelper mhelper;     // google's built in testing item     //static final string item_sku = "android.test.purchased";      private button clickbutton;     private button buybutton;     static final string item_sku = "com.example.buttonclick";      @override     protected void oncreate(bundle savedinstancestate) {         super.oncreate(savedinstancestate);         setcontentview(r.layout.fragment_in_app_billing);          buybutton = (button)findviewbyid(r.id.buybutton);         clickbutton = (button)findviewbyid(r.id.clickbutton);         clickbutton.setenabled(false);         buybutton.setenabled(false);           string base64encodedpublickey = "my_key";           buybutton.setonclicklistener(new view.onclicklistener() {             @override             public void onclick(view v) {                 mhelper.launchpurchaseflow(moneyactivity.this, item_sku, 10001, mpurchasefinishedlistener, "");                 clickbutton.setenabled(false);                 buybutton.setenabled(true);             }         });          mhelper = new iabhelper(this, base64encodedpublickey);          mhelper.startsetup(new iabhelper.oniabsetupfinishedlistener() {             public void oniabsetupfinished(iabresult result) {                 if (!result.issuccess()) {                     log.d("inappbilling", "in-app billing setup failed: " + result);                     toast.maketext(moneyactivity.this, "in-app purchasing set failed", toast.length_long).show();                 } else {                     buybutton.setenabled(true);                     log.d("inappbilling", "in-app billing set ok");                 }                 mhelper.queryinventoryasync(mgotinventorylistener);             }         });     }      boolean verifydeveloperpayload(purchase p) {         string payload = p.getdeveloperpayload();         return true;     }      // listener that's called when finish querying items ,     // subscriptions own     iabhelper.queryinventoryfinishedlistener mgotinventorylistener = new iabhelper.queryinventoryfinishedlistener() {         public void onqueryinventoryfinished(iabresult result,                                              inventory inventory) {             log.d("", "query inventory finished.");             if (result.isfailure()) {                 log.d("money","failed query inventory: " + result);                 return;             }              log.d("money", "query inventory successful.");                  /*                  * check items own. notice each purchase, check                  * developer payload see if it's correct! see                  * verifydeveloperpayload().                  */              // // check gas delivery -- if own gas, should fill             // tank             purchase gaspurchase = inventory.getpurchase(item_sku);             if (gaspurchase != null && verifydeveloperpayload(gaspurchase)) {                 log.d("money", "we have gas. consuming it.");                 mhelper.consumeasync(inventory.getpurchase(item_sku),                         mconsumefinishedlistener);                 return;             }         }     };      @override     protected void onactivityresult(int requestcode, int resultcode, intent data)     {         if (mhelper == null) return;         if (!mhelper.handleactivityresult(requestcode, resultcode, data))         {             super.onactivityresult(requestcode, resultcode, data);         }     }       @override     protected void onstart() {         super.onstart();     }      // callback when purchase finished     iabhelper.oniabpurchasefinishedlistener mpurchasefinishedlistener = new iabhelper.oniabpurchasefinishedlistener() {         public void oniabpurchasefinished(iabresult result, purchase purchase) {             log.d("money", "purchase finished: " + result + ", purchase: "                     + purchase);             if (result.isfailure()) {                 log.d("money", "error purchasing: " + result);                 return;             }             if (!verifydeveloperpayload(purchase)) {                 log.d("money","error purchasing. authenticity verification failed.");                 return;             }              log.d("money", "purchase successful.");              if (purchase.getsku().equals(item_sku)) {                  // remove query inventory method here , put consumeasync() directly                 mhelper.consumeasync(purchase, mconsumefinishedlistener);              }          }     };      public void consumeitem() {         mhelper.queryinventoryasync(mreceivedinventorylistener);     }      iabhelper.queryinventoryfinishedlistener mreceivedinventorylistener = new iabhelper.queryinventoryfinishedlistener() {         public void onqueryinventoryfinished(iabresult result,inventory inventory) {             if (result.isfailure())             {                 // handle failure                 toast.maketext(moneyactivity.this, "mreceivedinventorylistener failed", toast.length_long).show();             }             else             {                 mhelper.consumeasync(inventory.getpurchase(item_sku), mconsumefinishedlistener);                 toast.maketext(moneyactivity.this, "mreceivedinventorylistener worked", toast.length_long).show();             }         }     };      iabhelper.onconsumefinishedlistener mconsumefinishedlistener = new iabhelper.onconsumefinishedlistener() {                 public void onconsumefinished(purchase purchase, iabresult result) {                     if (result.issuccess())                     {                         clickbutton.setenabled(true);                         toast.maketext(moneyactivity.this, "purchasing button worked", toast.length_long).show();                     }                     else                     {                         toast.maketext(moneyactivity.this, "error 20: purchase failed.", toast.length_long).show();                     }                 }             };      @override     public void ondestroy() {         super.ondestroy();         if (mhelper != null) mhelper.dispose();         mhelper = null;     } } 


Comments

Popular posts from this blog

cakephp - simple blog with croogo -

How to group boxplot outliers in gnuplot -

bash - Performing variable substitution in a string -