安卓应用内购买退款

7

这是我第一次在Android应用中实现应用内计费,我直接从指南中获取了大部分代码,一切都很完美,直到我考虑退款。示例应用程序已经实现了退款,但方式有些奇怪!退款在应用程序上被视为购买,但状态为退款,这是完全可以理解的,但原始代码如下:

        // Count the number of times the product was purchased
        while (cursor.moveToNext()) {
            int stateIndex = cursor.getInt(2);
            PurchaseState state = PurchaseState.valueOf(stateIndex);
            // Note that a refunded purchase is treated as a purchase. Such
            // a friendly refund policy is nice for the user.
            if (state == PurchaseState.PURCHASED || state == PurchaseState.REFUNDED) {
                quantity += 1;
            }
        }

        // Update the "purchased items" table
        updatePurchasedItem(productId, quantity);

即使商品已退款,它仍会添加商品,我不知道为什么?退款商品是否有特殊的ID或者我遗漏了什么?到目前为止,我只尝试过测试产品,所以我不清楚。

updatePurchasedItem方法如果数量为0,则从表中删除条目,这似乎是完全正确的,因此我将我的代码更改为:

        while (cursor.moveToNext()) {
            int stateIndex = cursor.getInt(2);
            PurchaseState state = PurchaseState.valueOf(stateIndex);
            // Note that a refunded purchase is treated as a purchase. Such
            // a friendly refund policy is nice for the user.
            if(Consts.DEBUG)
                Log.v(TAG, state == PurchaseState.PURCHASED ? "purchase" : "refund");

            if (state == PurchaseState.PURCHASED) {
                quantity += 1;
            } else if(state == PurchaseState.REFUNDED) {
                quantity = 0;
            }
        }

        // Update the "purchased items" table
        updatePurchasedItem(productId, quantity);

但是我怀疑示例应用程序中是否存在错误代码,因此我完全不确定自己是否做得正确!我该如何处理?请帮助我!

这可能只是一个bug。数量变量是否测量了某种物品类型的总购买量,还是所有购买(包括“退款”类型)?如果存在订阅示例在Android开发者网站上不经过调整就无法正常工作,我不会感到惊讶,因为这很可能是一个bug。 - BDFun
数量是指当时购买的物品数量(我认为一次购买多个物品甚至是不可能的),但由于某种原因,即使商品被退款,它也会增加数量。如果updatePurchasedItem收到数量为0的产品,则会删除条目,据我所知,这应该表示退款,因为它在任何其他地方都没有使用状态数据。您可以在此处查看示例http://developer.android.com/guide/google/play/billing/billing_integrate.html#billing-download - Ruuhkis
1个回答

5
历史记录表每次购买只有一个条目。这意味着,在退款后的购买将有一个产品的单个历史记录,状态为“已退款”。
统计购买次数时,“已退款”状态表示该商品已被购买。然后由开发人员决定用户是否应该使用退款的产品。 (本网站上有一位开发人员想要退还已经捐赠了资金的人所做的购买,并希望允许他们继续使用该产品的示例)。
如果您不想计算退款,请更改代码以添加购买数量,但对于退款不执行任何操作。 (不要将数量设置为零)。
应用内产品有三种类型:
1. 管理项目:Google不允许多次购买此类产品。总数量只能为零或一。
2. 未管理的项目:用户可以多次购买此类产品。总数量可以是零或更多。
3. 订阅:与托管项目相同。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接