In-App Billing v3 - 不检测退款
Posted
技术标签:
【中文标题】In-App Billing v3 - 不检测退款【英文标题】:In-App Billing v3 - Don't detect refund 【发布时间】:2012-12-01 10:44:55 【问题描述】:我参加了 Google 的“In-App Billing v3”培训。我打算购买一件商品,但我遇到了问题。
https://developer.android.com/training/in-app-billing/index.html
我已取消购买并退款,但应用检测到购买是真实的。我无法继续测试我的应用,因为我始终检测到该商品为已购买。
我在 logCat 中发现的唯一错误是下一个:
[3687] InAppBillingService.logResponseBundle:捆绑包不包含响应代码
在启动 mHelper.queryInventoryAsync(mGotInventoryListener) 后出现。
有什么想法吗?
【问题讨论】:
好问题。到目前为止你找到答案了吗? 没有找到,我不知道去哪里找更多。 我在同一条船上 - 退款(测试用户)购买并且系统继续相信用户已获得许可。 v3 API 几乎没有任何退款 - 示例应用程序没有解决它们 - 另一个 Google API 为我们发布了半生不熟的豚鼠测试 - 我们应该开始为此向他们收费...... 即使在 15 小时后,在 Nexus7 上清除 Google Play 应用程序的缓存后,甚至在处理订单取消超过 15 小时后在我的 Nexus One 上安装新鲜的 TrivialDrive 后,我也遇到了同样的问题收到来自 Checkout 的确认电子邮件。 Google 似乎没有将这种变化的状态从其服务器传送到 Google Play 应用程序;它显然与 Google Play 缓存值无关。另见***.com/questions/14303850/… 【参考方案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 中搜索“Provisioning”以查找位置。
【讨论】:
【参考方案2】:在等待了大约 12 个小时并尝试了此处建议的所有内容以及类似线程后,我仍然面临同样的问题。对我有用的是以下 adb 命令:
adb shell pm clear com.android.vending
【讨论】:
该命令对我不起作用。该项目仍被视为已购买。【参考方案3】:我解决它的方法是使用忽略我所做的特定购买的代码块。我在打印出购买信息的代码中有一个日志语句,然后我在我的 purchaseTimes 应用程序中硬编码一个列表以忽略。这是一团糟,每次我想测试时都必须重新编译,但我还没有找到更好的方法。
【讨论】:
【参考方案4】:附言- 这表明更新退款需要时间
http://code.google.com/p/marketbilling/issues/detail?id=88#makechanges
但我不相信 - 我意识到他们正在设备上缓存购买数据,但 24 小时是很长的时间......
更新添加了在我取消“测试”交易超过 24 小时后,这些帐户仍然获得许可!!
再次更新 - 36 小时后,该应用仍获得许可。我卸载并重新安装它仍然是许可的!
再次更新! - 我将设备恢复出厂设置,登录,安装了应用程序,但它是未经许可的......
还有另一个更新 - 来自 Google 的回复表明退款是“自动”处理的,但可能需要“最多 72 小时”才能在设备上刷新 - 没有其他途径可以检测到退款,因此玩家最多可以 3 天如果他们退款,则“免费”的东西 - 嗯,好吧,这是应用内购买,而不是应用内购买,但仍然,这似乎有点过分?
【讨论】:
我也遇到过这种情况,但我没有急于恢复出厂设置。几天后,它得到了无牌。不知道是不是 3 天或更长时间...... 我认为它“最终”确实会取消许可 - 但你肯定会看到几天。我不确定 Google 的应用内退款政策是什么——如果他们要发放简单的退款并且客户对此很明智(1-3 天免费运行),那么我认为我们在这里遇到了问题。 .. 这很高兴知道!我不太关心这三天,只要它最终会发生。至于 Google 的退款政策,John,我的理解是,对于应用内购买,无法通过 Google 进行 no 退款 - 客户唯一的办法是向开发者发送电子邮件要求退款,而开发人员自行决定是否授予。 @shrewdlogarithm 通过 Google 的 Merchant Center 退款和取消订单是一回事吗?因为我已经将订单退还到我的测试账户已经一个星期了,但购买状态(Premium car)仍然是拥有的。但是,我现在可以选择取消订单...无法取消订单(但已退款)是原因吗? 只是补充一点。我在(2018 年 5 月 12 日上午 8 点 27 分)退还了产品,现在是(2018 年 5 月 15 日下午 17 点 56 分)和产品仍然获得许可..我知道它最终会发生,但仍然....以上是关于In-App Billing v3 - 不检测退款的主要内容,如果未能解决你的问题,请参考以下文章
android in-app billing v3 api中的开发者有效负载应该是多少?
android in-app billing v3 api中的开发人员有效负载应该是啥?
Google Play In-app Billing API 版本低于 3