我设置了一个测试版帐户来测试我正在处理的谷歌应用程序的IAP,我遇到的问题是,一旦我购买了一次性产品(非经常性费用)测试IAP,我无法将其删除“就这样,所以现在,即使我删除了应用程序并重新安装,它也会记住购买,这对于用户而言在现实世界中很棒,但在尝试修复错误时却不是很好!
是否有任何方法(缺少大量的gmail帐户进行测试)从帐户中删除购买?
答案 0 :(得分:15)
这是一个老问题,但如果有人仍在寻找解决方案,请转到:
您可以退款/取消测试购买。然后使用以下命令清除购买状态:
adb shell pm clear com.android.vending
答案 1 :(得分:5)
我知道的唯一方法是在你的应用中强制消费。然后,您可以删除该代码。
答案 2 :(得分:1)
我正在使用cc.fovea.cordova.purchase插件进行cordova管理我的IAP购买。要将我的测试非消耗品删除,我将注册从非消耗品更改为消耗品。
store.register({
id: this.predatorID,
alias: 'Predator Pack',
type: store.CONSUMABLE //store.NON_CONSUMABLE
});
另外,显然还有reserved keywords you could use instead(如果你进入那个)。 - https://developer.android.com/google/play/billing/billing_testing.html
答案 3 :(得分:1)
if (inventory.getPurchase(ITEM_SKU) != null ) {
try {
mIabHelper.consumeAsync(premiumPurchase, new IabHelper.OnConsumeFinishedListener() {
@Override
public void onConsumeFinished(Purchase purchase, IabResult result) {
Toast.makeText(MainActivity.this, "Consumed the test purchase successfully", Toast.LENGTH_SHORT).show();
}
});
} catch (IabHelper.IabAsyncInProgressException e) {
e.printStackTrace();
}
}
然而,refund()和revoke()方法不支持测试购买,只剩下consumeAsync()选项。
答案 4 :(得分:1)
我遇到了同样的情况并开始研究。不幸的是,这里的指示并没有产生解决方案。
我想分享对我有用的解决方案。
如果在正确的位置调用以下方法,将产生解决方案。来源:Link
/**
* Recall that Google Play Billing only supports two SKU types:
* [in-app products][BillingClient.SkuType.INAPP] and
* [subscriptions][BillingClient.SkuType.SUBS]. In-app products are actual items that a
* user can buy, such as a house or food; subscriptions refer to services that a user must
* pay for regularly, such as auto-insurance. Subscriptions are not consumable.
*
* Play Billing provides methods for consuming in-app products because they understand that
* apps may sell items that users will keep forever (i.e. never consume) such as a house,
* and consumable items that users will need to keep buying such as food. Nevertheless, Google
* Play leaves the distinction for which in-app products are consumable entirely up to you.
*
* If an app wants its users to be able to keep buying an item, it must call
* [BillingClient.consumeAsync] each time they buy it. This is because Google Play won't let
* users buy items that they've previously bought but haven't consumed. In Trivial Drive, for
* example, consumeAsync is called each time the user buys gas; otherwise they would never be
* able to buy gas or drive again once the tank becomes empty.
*/
private fun clearIapHistory() {
billingClient!!.queryPurchases(BillingClient.SkuType.INAPP).purchasesList
.forEach {
val params =
ConsumeParams.newBuilder().setPurchaseToken(it.purchaseToken).build()
billingClient!!.consumeAsync(params) { responseCode, purchaseToken ->
when (responseCode.responseCode) {
BillingClient.BillingResponseCode.OK -> {
}
else -> {
Log.w(LOG_TAG, responseCode.debugMessage)
}
}
}
}
}
答案 5 :(得分:1)
我想唯一可行的方法是...
食用!
有关更多信息,请访问使用文档并搜索“ consume”:https://developer.android.com/google/play/billing/integrate
以下是您的重要步骤:
祝你好运〜
答案 6 :(得分:0)
我有类似的问题。幸运的是,我正在使用的应用程序是基于WebView的,因此我可以轻松地注入一个链接或按钮来触发一些Javascript来回调应用程序以使用测试订单。由于测试订单的orderId
字符串为空,因此很容易识别它们以使用它们。一旦消费,该物品可以再次“购买”。删除按钮需要注释掉一行代码但是如果按钮意外地进入最终发布的应用程序,它将不会导致任何问题,因为代码只消耗测试订单 - 也就是说,实际订单不受影响。那个按钮只会令人尴尬而不是灾难。
我正在使用没有与之关联的信用卡的设备。我设置了一些促销代码,并为我的测试订单使用“兑换代码”选项。促销代码不会产生金钱交换的风险,我可以使用真实产品完全验证我的应用程序中的IAB功能,而无需使用IAB测试代码。
根据Martin Kool的帖子,Google电子钱包中没有任何内容可供我使用。
答案 7 :(得分:0)
只是:
Purchase unlockedPurchase = inventory.getPurchase(SKU_UNLOCKED);
// Log unlockedPurchase.getOrderId();
转到Google Play面板的订单管理,查找该订单ID并退款(如果是您自己的订单,则应显示“测试订单”)。
答案 8 :(得分:-1)
Google Play购买内容存储在Google电子钱包中。
签名后,转到" Transactions"在左边。可以从那里取消测试购买。