【问题标题】:Google In app billing always failing and not consuming谷歌应用内计费总是失败且不消费
【发布时间】:2014-05-22 17:07:36
【问题描述】:

我正在尝试添加应用计费功能,允许用户购买任意次数(无限制)。因此必须食用。我第一次在新设备上运行代码时它工作正常并且测试购买成功。但是它没有被消费,并且不允许我再次购买。问题似乎出在这种方法中,因为它总是以 result.isFailure() 结束,因此,购买不会被消耗(并且只能进行一次)。

IabHelper.OnIabPurchaseFinishedListener mPurchaseFinishedListener = new IabHelper.OnIabPurchaseFinishedListener() {
    public void onIabPurchaseFinished(IabResult result, Purchase purchase) 
    {
        if (result.isFailure()) {
            Toast.makeText(getApplicationContext(), "Failed to make purchase.", Toast.LENGTH_LONG).show();
            return;
        }      
        else if (purchase.getSku().equals(ITEM_SKU)) {
            consumeItem();
        }

    }
};

有人知道我该如何解决这个问题吗?

下面是剩下的代码:

    Preference removeAds = (Preference) findPreference("inAppBilling");
        removeAds.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            public boolean onPreferenceClick(Preference preference) {

                mHelper.launchPurchaseFlow(About.this, ITEM_SKU, 10001, mPurchaseFinishedListener, "mypurchasetoken");

                return true; 
            }
    });

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) 
    {
        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 (result.isFailure()) {
                Toast.makeText(getApplicationContext(), "Failed to make purchase.", Toast.LENGTH_LONG).show();
                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 (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 (result.isSuccess()) {                
                CustomAlerts.showBasicAlert("Thanks", "We appreciate your support.", About.this);
            } else {
                // handle error
            }
        }
    };

    @Override
    public void onDestroy() {
        super.onDestroy();
        if (mHelper != null) mHelper.dispose();
        mHelper = null;
    }

【问题讨论】:

    标签: java android google-play in-app-billing


    【解决方案1】:

    您需要在应用启动时查询用户库存。如果其中有任何已购买但尚未兑换的产品,您可以在此时兑换它们。 Here's 检索文档。

    【讨论】:

    • 为什么我在检查购买的商品时会在onQueryInventoryFinished 中得到isFailure?以前正常处理的购买。
    猜你喜欢
    • 1970-01-01
    • 2020-10-23
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2021-06-11
    • 1970-01-01
    相关资源
    最近更新 更多