我接受了Google的“应用内结算v3”培训。我买了一件物品,但我遇到了问题。
https://developer.android.com/training/in-app-billing/index.html
我已取消并退还购买但该应用程序检测到买入为真。我无法继续测试我的应用程序,因为我始终检测到购买该项目。
我在logCat中发现的唯一错误是下一个错误:
[3687] InAppBillingService.logResponseBundle:Bundle不包含响应代码
启动mHelper.queryInventoryAsync(mGotInventoryListener)后出现。
有什么想法吗?
答案 0 :(得分:20)
P.S。 - 这表明退款需要时间才能更新
http://code.google.com/p/marketbilling/issues/detail?id=88#makechanges
但我不相信 - 我发现他们已经在设备上缓存购买数据,但24小时很长时间......
更新以便在我取消' test'后超过24小时添加交易,这些帐户仍然是许可!!
再次更新 - 36小时后该应用仍然获得许可。我卸载并重新安装,它仍然是STILL许可!!
更新了AGAIN! - 我出厂重置设备,登录,安装了应用程序,它是未经许可的......
和另一次更新 - Google的回复表明退款会自动处理'但最长可达72个小时。在设备上刷新 - 没有其他途径可以检测到退款,因此玩家可以免费获得3天的免费服务。如果他们退款 - 呃,好吧这是应用程序而不是App购买,但仍然,这似乎是一个BIT过度?
答案 1 :(得分:2)
在等了大约12个小时并尝试了这里和类似线程的所有建议之后,我仍然面临同样的问题。对我来说诀窍是以下adb命令:
adb shell pm clear com.android.vending
答案 2 :(得分:1)
您可以通过使用该项目轻松否定购买以进行测试。
使用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
作为奖励,当您消费升级时,您可以获得一个免费的四分之一气体储气罐,因为该样品将所有消耗量视为其他地方的汽油。搜索MainActivity for" Provisioning"找到哪里。
答案 3 :(得分:0)
我正在解决的方法是使用一段代码忽略我所做的具体购买。我在代码中有一个日志声明打印出购买信息,然后我在我的buyTimes应用程序中硬编码列表以忽略。这是一团糟,每次我想测试时我都要重新编译,但我还没有找到更好的方法。