Java Android应用内计费getPurchases返回空

Java Android应用内计费getPurchases返回空,java,android,in-app-purchase,in-app-billing,Java,Android,In App Purchase,In App Billing,目前我正在测试我的应用程序的应用内计费。我正在尝试购买商品并测试签名验证等。当我需要再次购买商品时,问题就出现了:我购买了商品,但在我尝试购买商品时,它仍然表示我拥有该商品,而现在在购买商品后,getPurchases()方法表示我没有任何东西。我做错什么了吗?它是V3 API中的一个bug吗?如果我不能从我的应用程序中消费,我可以从其他地方消费吗 消费购买: try { //Get purchases and consume them all B

目前我正在测试我的应用程序的应用内计费。我正在尝试购买商品并测试签名验证等。当我需要再次购买商品时,问题就出现了:我购买了商品,但在我尝试购买商品时,它仍然表示我拥有该商品,而现在在购买商品后,getPurchases()方法表示我没有任何东西。我做错什么了吗?它是V3 API中的一个bug吗?如果我不能从我的应用程序中消费,我可以从其他地方消费吗

消费购买:

try {
    //Get purchases and consume them all                
    Bundle b = mac.service.getPurchases(3, package, "inapp", null);
    ArrayList<String> datalist = b.getStringArrayList("INAPP_PURCHASE_DATA_LIST");
    for(String str : datalist) {
        JSONObject jpurchase = new JSONObject(str);
        String token = jpurchase.getString("purchaseToken");
        mac.service.consumePurchase(3, package, token);
    }

} catch (Exception e) {

    e.printStackTrace();
}

这似乎是谷歌API中的一个缺陷,如果你在第一个购买意向结束之前同时开始多个购买意向,你可以多次购买该商品。当您尝试消费该商品时,它只消费第一次(或最后一次)购买的商品,其余的商品会被卡在您的帐户上,但不会显示在查询中

如何修复:

确保您的应用程序仅在用户不拥有购买意图时调用购买意图,并且只发送一个意图。如果您有一个或多个项目被卡在帐户上,并希望将其删除,您可以选择
1) 通过Google Play控制台从你的应用程序中删除被窃听的项目并创建新的项目(如果你已经在Google Play上发布了游戏,并且有人购买了被窃听的项目,则这不好)或

2) 直接从您的帐户中删除项目(我不知道如何执行此操作,但这应该是可能的。如果您知道如何执行此操作,请发表评论,以便我可以添加。)

您如何解决此问题?我现在的处境是,
getPurchaes
返回空值,但谷歌说“你已经拥有了该商品”。我怎么才能解决这个问题?@swalkner我不是100%确定,但我想我必须从应用程序中删除被窃听的项目并制作新的。当然,还要修复代码,这样就不可能多次购买物品。你说的“从应用程序中删除有缺陷的物品”是什么意思?从你的Google play开发者控制台中删除你有问题的物品。但是play Store中已经有我的应用程序的一个版本;那就意味着没人能再买了,对吧?
//Get buy intent and send it
PendingIntent buyIntent = mac.service.getBuyIntent(3, package, purchasepopup.id, //purchasepopup.id = item id
                                           "inapp", "").getParcelable("BUY_INTENT");

if(buyIntent != null) mac.startIntentSenderForResult(buyIntent.getIntentSender(),
                                       1002, new Intent(), 0, 0, 0);