OnIabPurchaseFinishedListener被调用但失败

时间:2015-03-31 19:29:47

标签: android android-pay

我是Android开发人员,但我刚刚进入应用内购买。我浏览了Google教程并获得了测试版本。但是,当我尝试实现购买的自定义项目时,它总是在OnIabPurchaseFinishedListener中失败。我现在想要的只是为不同级别的捐款添加3个按钮(1美元,5美元,10美元)。我已经在我的开发者控制台上创建了其中一个项目。

总是在这里失败:

if (result.isFailure()) {
   Log.d("Money", "Error purchasing: " + result);
   return;
}

这是我的代码:

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 by 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 up failed", Toast.LENGTH_LONG).show();
                } else {
                    buyButton.setEnabled(true);
                    Log.d("inappbilling", "In-app Billing is set up OK");
                }
                mHelper.queryInventoryAsync(mGotInventoryListener);
            }
        });
    }

    boolean verifyDeveloperPayload(Purchase p) {
        String payload = p.getDeveloperPayload();
        return true;
    }

    // Listener that's called when we finish querying the items and
    // subscriptions we 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 to query inventory: " + result);
                return;
            }

            Log.d("Money", "Query inventory was successful.");

                /*
                 * Check for items we own. Notice that for each purchase, we check
                 * the developer payload to see if it's correct! See
                 * verifyDeveloperPayload().
                 */

            // // Check for gas delivery -- if we own gas, we should fill up the
            // tank immediately
            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 for when a purchase is 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 from here and 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;
    }
}

0 个答案:

没有答案