android: Inapp Rechnung: Fehlerantwort: 7: Artikel bereits im Besitz

Ich lerne, eine In-App-Abrechnung für meine App zu implementieren, sodass Benutzer beispielsweise beim Drücken des Spenden-Buttons $ spenden können.

Der Benutzer darf mehr als einmal spenden, d. H. Der Kauf ist Verbrauchsmaterial.

Die folgenden Codes stammen aus dem TrivalDrive-Beispiel und einigen Tutorials aus dem Internet:

Code:
IabHelper mHelper;
static final String ITEM_SKU = "android.test.purchased"; 

@Override
protected void onCreate(Bundle savedInstanceState) 
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_in_app_billing);

    buy10Button = (Button) findViewById(R.id.buy10Button); 
    buy15Button = (Button) findViewById(R.id.buy15Button); 
    buy20Button = (Button) findViewById(R.id.buy20Button);      

    String base64EncodedPublicKey = "keykeykey";

    mHelper = new IabHelper(this, base64EncodedPublicKey);


    mHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() 
    {
          public void onIabSetupFinished(IabResult result) 
          {
            if (!result.isSuccess()) 
            {
               Log.d(TAG, "In-app Billing setup failed: " + result);
               return;
            } 
            if (mHelper == null) 
            {
                return;
            }          
            Log.d(TAG, "In-app Billing is set up OK");
          }
    });     
}

public void buy10Click(View view) 
{
    mHelper.launchPurchaseFlow(this, ITEM_SKU, 10001,  mPurchaseFinishedListener, "");
}

public void buy15Click(View view) 
{

}

public void buy20Click(View view) 
{

}   

@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);
    }
}

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() 
{
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) 
    {
        if (mHelper == null) return;
        if (result.isFailure()) 
        {
           // Handle error
               return;
        }      
        else if ((purchase.getSku().equals(ITEM_SKU)))   
        {
           consumeItem();
        }              
    }
};

public void consumeItem() 
{
    mHelper.queryInventoryAsync(mReceivedInventoryListener);
}

IabHelper.QueryInventoryFinishedListener mReceivedInventoryListener = new IabHelper.QueryInventoryFinishedListener() 
{
    public void onQueryInventoryFinished(IabResult result, Inventory inventory) 
    {
        if (mHelper == null) return;
        if (result.isFailure()) 
        {
            // Handle failure
        } 
        else 
        {
            mHelper.consumeAsync(inventory.getPurchase(ITEM_SKU), mConsumeFinishedListener);
        }
    }
};

IabHelper.OnConsumeFinishedListener mConsumeFinishedListener = new IabHelper.OnConsumeFinishedListener() 
{
    public void onConsumeFinished(Purchase purchase, IabResult result) 
    {
        if (mHelper == null) return;
        if (result.isSuccess()) 
        {
            Toast.makeText(InAppBillingActivity.this, "Thank you for your donation!!", Toast.LENGTH_LONG).show();   
        } 
        else 
        {
            // handle error
        }
    }
};
Frage:

Trotzdem empfange ich weiterE/IabHelper(13392): In-app billing error: Unable to buy item, Error response: 7:Item Already Owned Fehler und dass der Zahlungsdialog von Google Play einfach nicht erscheint.

Ich habe viele ähnliche Situationen recherchiert und herausgefunden, einige haben vorgeschlagen, ein paar Minuten zu warten, und dann wird der Kauf von selbst zurückgesetzt, aber ich habe fast eine Stunde gewartet, aber es ist immer noch zum Kotzen.

Ich habe auch festgestellt, dass jemand vorschlägt, das IabResult zu ändernpublic boolean isSuccess() { return mResponse == IabHelper.BILLING_RESPONSE_RESULT_OK; } auch die zurückgebenBILLING_RESPONSE_RESULT_ITEM_ALREADY_OWNED as isSuccess = true, aber ich weiß nicht, wie ich so etwas ändern soll ...

Wie konnte das Problem behoben werden? Vielen Dank!!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage