CheckoutPurchase.setError:type = UNKNOWN,code = -1,message =处理购买错误[DF-BPA-13]

时间:2012-10-12 12:56:28

标签: android in-app-billing

所以我正在使用Android计费库并进行了一些设置:

    BillingController.setConfiguration(new BillingController.IConfiguration() {

                    public byte[] getObfuscationSalt() {
//Havent changed this
                        return new byte[] { 41, -90, -116, -41, 66, -53, 122,
                                -110, -127, -96, -88, 77, 127, 115, 1, 73, 57,
                                110, 48, -116 };
                    }

                    public String getPublicKey() {
                        return "The key (yes this is set correctly)";
                    }
                });

        BillingController.setDebug(true);

        mBillingObserver = new AbstractBillingObserver(this) {

            public void onBillingChecked(boolean supported) {
                BuyCoins.this.onBillingChecked(supported);
            }

            public void onPurchaseStateChanged(String itemId,
                    PurchaseState state) {
                BuyCoins.this.onPurchaseStateChanged(itemId, state);
            }

            public void onRequestPurchaseResponse(String itemId,
                    ResponseCode response) {
                BuyCoins.this.onRequestPurchaseResponse(itemId,
                        response);
            }

            public void onSubscriptionChecked(boolean supported) {
                BuyCoins.this.onSubscriptionChecked(supported);
            }

        };

        BillingController.registerObserver(mBillingObserver);
        BillingController.checkBillingSupported(this);
        BillingController.checkSubscriptionSupported(this);

    }

然后简单地说:

public void onSubscriptionChecked(boolean supported) {
    if (supported) {
        Toast.makeText(this, "Subscription is supported", Toast.LENGTH_SHORT)
                .show();
    } else {
        Toast.makeText(this, "Subscription is NOT supported", Toast.LENGTH_SHORT)
                .show();

    }
}

public void onRequestPurchaseResponse(String itemId, ResponseCode response) {
    if (response == ResponseCode.RESULT_OK) {
        Toast.makeText(this, "Purchase Response OK", Toast.LENGTH_LONG)
                .show();
    } else if (response == ResponseCode.RESULT_USER_CANCELED) {
        Toast.makeText(this, "Purchase Response Canceled",
                Toast.LENGTH_LONG).show();
    } else if (response == ResponseCode.RESULT_SERVICE_UNAVAILABLE) {
        Toast.makeText(this, "Purchase Response Unavailable",
                Toast.LENGTH_LONG).show();
    } else if (response == ResponseCode.RESULT_ERROR) {
        Toast.makeText(this, "Purchase Response Error", Toast.LENGTH_LONG)
                .show();
    } else {
        Toast.makeText(this, "UNKNOWN RESPONSE", Toast.LENGTH_LONG)
        .show();        }
}

public void onPurchaseStateChanged(String itemId, PurchaseState state) {
    Toast.makeText(this,
            "Purchase State: " + state.toString() + " for item " + itemId,
            Toast.LENGTH_LONG).show();

    purchaseList();
}

public void onBillingChecked(boolean supported) {
    if (supported) {
        Toast.makeText(this, "Billing is supported", Toast.LENGTH_SHORT)
                .show();
    } else {
        Toast.makeText(this, "Billing is NOT supported", Toast.LENGTH_SHORT)
                .show();

    }
}

该项目通过以下方式调用:

public void onClick(View v) {

    switch (v.getId()) {
    case R.id.buy_coins_button_one:
        BillingController.requestPurchase(this, "coins",true /* confirm */, null);
        break;
    case R.id.buy_coins_button_two:
        BillingController.requestPurchase(this, "android.test.purchased",true /* confirm */, null);
        break;

    }

}

如果我点击按钮一(硬币),我会收到标题中提到的错误(“错误处理购买:[DF-BPA-13],然后才能点击”接受并购买“

我到处检查过,似乎没有明确的答案,为什么会出现这种错误。

如果我点击按钮2(保留的安卓机器人),我可以点击购买但我得到:

从服务器检索信息时出错。 [DF-DFERH-01]

所以这里采取了一些措施来打击这种废话:

  • 公钥正确
  • 应用内商品已发布1天
  • 在结算观察员
  • 上将调试设置为true
  • 应用已导出并使用密钥库签名,并安装了apk
  • 测试用户IS NOT发布用户
  • 测试用户在测试帐户列表中
  • 使用相同的问题将调试设置为关闭
  • 主要手机用户已更改(出厂重置)给不同的测试用户
  • 使用不同用户在不同设备上测试
  • APK和Market上的版本和版本代码相同

我完全迷失在这里。也许值得注意的是另一个错误([27]与1相比)[27] FileBasedKeyValueStore.delete: Attempt to delete 'paramsnMy695NrbaHSHjK0hNnMgg' failed!

我错过了什么地方吗?这一切看起来都非常简单。

我看过:

In App Purchase Issue

[DF-BPA-13]

In-App Billing Not Working

我会告诉你如何解决这个问题,因为它似乎是一个常规问题

编辑:因此您无法从开发控制台中删除应用,因此删除/添加无效。

2 个答案:

答案 0 :(得分:1)

HA得到了它。这很奇怪。也许这是一个侥幸,它只是踢了,但这对我有用:

结帐测试帐户,发布商帐户在结帐时与同一张信用卡绑定。在测试帐户上更改它会修复它。 Grrrrr。

答案 1 :(得分:0)

它基本上是因为谷歌需要一些时间来同步产品列表。因此,如果您对产品进行任何更改或添加新项目,那么请花一些时间(大约1小时),它将自动修复