2016-07-28 6 views
0

Ich folgte einem Tutorial, In-App-Abrechnung Elemente zu kodieren und ich schaffe es, alles gut zu machen, aber wenn ich wissen möchte, ob der Benutzer einen Artikel gekauft hat, ist es immer falsch, sogar wenn ich es mit anderen Geräten teste, die einen Beta-Tester-Account haben.Android In-App-Abrechnung gekaufte Artikel

Dies ist, was ich benutze das Produkt gekauft zu erhalten:

mHelper = new IabHelper(MainActivity.this, base64EncodedPublicKey); 

    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() { 
     public void onIabSetupFinished(IabResult result) { 
      IabHelper.QueryInventoryFinishedListener mGotInventoryListener 
        = new IabHelper.QueryInventoryFinishedListener() { 
       public void onQueryInventoryFinished(IabResult result, 
                Inventory inventory) { 

        if (result.isFailure()) { 
         // handle error here 
        } 
        else { 
         // does the user have the premium upgrade? 
         boolean mIsPremium = inventory.hasPurchase(ITEM_SKU); 
         // update UI accordingly 
         Toast.makeText(getApplicationContext(), "" + mIsPremium, Toast.LENGTH_LONG).show(); 
         if(mIsPremium){ 
          buy.setVisibility(View.INVISIBLE); 
         } 
        } 
       } 
      }; 
      mHelper.queryInventoryAsync(mGotInventoryListener); 
     } 
    }); 

Und das ist der Code, die Artikel zu kaufen:

buy.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mHelper.launchPurchaseFlow(MainActivity.this, ITEM_SKU, 10001, 
        new IabHelper.OnIabPurchaseFinishedListener() { 
         public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 
          if (result.isFailure()) { 
           return; 
          } else if (purchase.getSku().equals(ITEM_SKU)) { 
           mHelper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() { 
            public void onQueryInventoryFinished(IabResult result, Inventory inventory) { 
             if (result.isFailure()) { 
             } else { 
              mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU), 
                new IabHelper.OnConsumeFinishedListener() { 
                 public void onConsumeFinished(Purchase purchase, IabResult result) { 
                  if (result.isSuccess()) { 
                   buy.setVisibility(View.GONE); 
                  } else { 
                  } 
                 } 
                }); 
             } 
            } 
           }); 
          } 
         } 
        }, "mypurchasetoken"); 
     } 
    }); 

Wenn ich die App in einem realen Gerät mit dem Test Bei meinen Beta-Testern funktioniert der Code gut, wenn Sie den Artikel kaufen, aber wenn ich die App schließe und sie wieder öffne, sagt der erste Code, dass das Konto den Artikel nicht gekauft hat.

Antwort

0

Ok Jungs, Ive lösten es, es ein Fehler war ein Tutorial folgen, aber ich werde es nie über Verbrauch/nicht ohne Lese lösen Verbrauchsartikel. Mein Artikel ist eine einmalige Anschaffung, so gibt es keine Notwendigkeit zu haben:

mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU), 
               new IabHelper.OnConsumeFinishedListener() { 
                public void onConsumeFinished(Purchase purchase, IabResult result) { 
                 if (result.isSuccess()) { 
                  buy.setVisibility(View.GONE); 
                 } else { 
                 } 
                } 
               }); 

Im zweiten Teil des Codes, alles, was ich tun muß, ist, dass zu löschen und sudenly alles in Ordnung ist, auf diese Weise, die Der zweite Teil des Codes wird:

buy.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      mHelper.launchPurchaseFlow(MainActivity.this, ITEM_SKU, 10001, 
        new IabHelper.OnIabPurchaseFinishedListener() { 
         public void onIabPurchaseFinished(IabResult result, Purchase purchase) { 
          if (result.isFailure()) { 
           return; 
          } else if (purchase.getSku().equals(ITEM_SKU)) { 
           mHelper.queryInventoryAsync(new IabHelper.QueryInventoryFinishedListener() { 
            public void onQueryInventoryFinished(IabResult result, Inventory inventory) { 
             if (!result.isFailure()) { 
              buy.setVisibility(View.GONE); 
             } 
            } 
           }); 
          } 
         } 
        }, "mypurchasetoken"); 
     } 
    }); 

Hoffe, dass dies jemand in der Zukunft helfen wird, und danke !.

0

Sie verbrauchen das Produkt wahrscheinlich nach dem Kauf zurück.

Siehe hier über Verbrauch/Nicht-Verbrauchsmaterialien: https://developer.android.com/google/play/billing/api.html#consumetypes

+0

Während dies wahrscheinlich die Antwort ist, sollte dies ein Kommentar sein, der zusätzliche Informationen anfordert? Du antwortest mit einer Frage. – Bonatti

+0

Ich kann umformulieren zu "Sie verbrauchen wahrscheinlich die Produkte ...", wäre das besser? – marmor

+0

Ich glaube es so. Grundsätzlich kann ein anderer Benutzer, der diese Antwort überprüft, die "wahrscheinlichsten" Probleme sehen, die er möglicherweise hat. Ein Verbrauchsartikel würde nicht als Codefehler erscheinen, würde aber das gleiche Verhalten zeigen. – Bonatti