2012-07-11 81 views
6

这是我第一次在Android应用中实施应用内结算,并且我直接从guideline拿走了大部分代码,并且所有事情都完全忘记了,直到我想退款。示例应用程序已经退款实施,但以一种奇怪的方式!退款收到应用程序作为购买但退款的状态,这是完全可以理解的,但原始来源是这样的: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); 

其添加项目,即使是退款,并且我不知道这是为什么?退款的物品是否有特殊的身份证或我缺少什么?我只用测试产品试过这个,所以我不知道。

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

,但我怀疑有可能是错误的代码中的示例应用程序,所以我完全不确定如果我做得对!

我该如何处理?请帮帮我!

+0

它可能只是一个错误。数量变量是衡量项目类型的总购买量还是所有购买量(包括“退款”类型)?如果它是一个错误,我不会感到惊讶,因为Android Developer网站上存在的订阅示例没有调整就无法正常工作。 – BDFun 2012-07-11 12:33:52

+0

数量是当时购买的物品数量(我不认为它甚至可能一次购买多件物品),并且由于某种原因,即使物品退还,它也会提高数量。 updatePurchasedItem删除条目,如果它接收到数量为0的产品,这应该表示退款据我所知,因为它不使用状态数据的任何地方。你可以查看这里的例子http://developer.android.com/guide/google/play/billing/billing_integrate.html#billing-download – Ruuhkis 2012-07-11 12:40:05

回答

5

历史记录表每次购买都有一个条目。这意味着后来退款的购物将在退款后为产品提供单一的“退款”状态记录。

当计数购买时,“退款”状态表明该项目已被购买。 然后由开发者决定用户是否应该有权使用退款产品。 (在这个网站上有一个开发商想要退还已经捐款的人购买的产品,并希望让他们继续使用该产品)。

如果您不想退款计数,您应该更改您的代码以添加购买数量,但对退款不做任何处理。 (不要将数量设置为零)。

在应用产品进来3个品种:

  1. 管理的项目:谷歌不允许购买此类产品不止一次。总数量可以加起来只有零或一个。

  2. 非托管项目:用户可以多次购买此类产品。总数量可以为零或更多

  3. 订阅:与托管项目相同。

+0

谢谢你明确的答案! – Ruuhkis 2012-07-30 18:55:11