Android In app billing getPurchases返回空

时间:2014-05-17 14:46:12

标签: java android in-app-purchase in-app-billing

目前,我正在测试应用广告中的应用。我试图购买物品并测试签名验证等。当我需要再次购买物品时出现问题:我消费了购买但仍然说当我尝试购买时我拥有该产品现在消费后一旦getPurchases()方法说我不拥有任何东西就购买。我在这里做错了吗?这是V3 API中的错误吗?如果我无法从我的应用中消费购买,我可以从其他地方消费吗?

消费购买:

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

购买物品:

//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);

1 个答案:

答案 0 :(得分:2)

似乎这是Google的API中的一个错误,如果您在第一个结束之前立即启动多个购买意图,您可以多次购买该商品。当您尝试使用该项目时,它只会消耗第一次(或最后一次)购买,其余的则会停留在您的帐户上,但不会在查询中显示。

如何解决:

确保您的应用仅在用户不拥有购买意图时才调用购买意图并仅发送一个意图。如果您有一个项目卡在帐户上并想要删除它们,您可以 1)通过Google Play控制台从您的应用中删除有问题的项目并创建新项目(如果您已经在Google Play上发布了游戏并且有人购买了有问题的项目,那么这不是很好)或者 2)直接从您的帐户中删除项目(我不知道如何执行此操作但是应该可以。如果您知道如何执行此操作,请对其进行评论,以便我可以添加它。)