应用内结算v3 – 不要检测退款

我已经参加了Google的“In-App Billing v3”培训。 我可以做一个项目的购买,但我有一个问题。

https://developer.android.com/training/in-app-billing/index.html

我已经取消并退还了购买,但应用程序检测到购买为真。 我无法继续testing我的应用程序,因为我总是检测到购买的项目。

我在logCat中发现的唯一错误是下一个:

InAppBillingService.logResponseBundle:Bundle不包含响应代码

在启动mHelper.queryInventoryAsync(mGotInventoryListener)后出现。

任何想法?

Solutions Collecting From Web of "应用内结算v3 – 不要检测退款"

ps – 这表明只需花费时间来更新退款

http://code.google.com/p/marketbilling/issues/detail?id=88#makechanges

但我不确信 – 我意识到他们正在caching购买数据在设备上,但24h是很长一段时间…

更新以补充说,我取消“testing”交易超过24小时后,这些帐户仍然有执照!

再次更新 – 在36小时后,该应用程序仍然获得许可。 我卸载并重新安装,它仍然有执照!

再次更新! – 我出厂重置设备,login,安装应用程序,它是未经许可的…

另一个更新 – Google的回复表明,退款是“自动”处理的,但可能需要在设备上刷新长达72小时 – 没有其他path可以检测到退款,因此玩家可以获得长达3天的“免费“,如果他们退款 – 呃,这是在应用程序,而不是应用程序购买,但仍然,这似乎是一个BIT过度?

我正在解决这个问题的方式是用一段代码忽略我所做的特定购买。 我在打印出购买信息的代码中有一个日志声明,然后在我的purchaseTimes应用程序中对列表进行硬编码以忽略。 这是一个混乱,我不得不重新编译每次我想testing,但我还没有find一个更好的方法呢。

在等了大约12个小时,并尝试了这里和类似的线程build议,我仍然面临同样的问题。 下面的adb命令对我来说有什么窍门:

adb shell pm清除com.android.vending

通过消耗项目,您可以轻松地否定购买以进行testing。

使用Trivial Drive示例我在MainActivity.java中添加了以下代码,它将在应用程序启动时“消耗”高级升级:

// Do we have the premium upgrade? Purchase premiumPurchase = inventory.getPurchase(SKU_PREMIUM); mIsPremium = (premiumPurchase != null && verifyDeveloperPayload(premiumPurchase)); Log.d(TAG, "User is " + (mIsPremium ? "PREMIUM" : "NOT PREMIUM")); // dss added for test: Consume the premium upgrade for test purposes. boolean testConsume = true; if (mIsPremium && testConsume) { Log.d(TAG, "NOT FOR PRODUCTION: We have a premium upgrade. Consuming it."); mHelper.consumeAsync(inventory.getPurchase(SKU_PREMIUM), mConsumeFinishedListener); mIsPremium = false; } //dss end add 

作为奖励,当你消费升级时,你会得到一个四分之一的天然气,因为样品会把所有的消耗都当作汽油。 search“Provisioning”的MainActivity以查找位置。