如何取消Android上的应用内测试购买?

Ken*_*sen 37 android billing in-app

直到2016年6月20日,我才能取消在我的应用程序中完成的测试购买.从同一个测试帐户进行多个应用程序内购买(非消费品),可以轻松开发和测试代码,而不需要太多的麻烦.

2016年6月20日之后,我的商家帐户中没有显示购买,我无法从我的测试帐户购买超过1次.我得到的只是:"你已经拥有这个项目"的消息.

我向google开发人员支持小组记录了一个请求,答案是:

从2016年6月20日开始,我们更改了一次性应用内购买(IAP)的测试购买.以前,测试购买一次性IAP会生成订单ID.从2016年6月20日开始,一次性IAP不会生成正式订单ID(如果有的话),也不会出现在Merchant Center中.此行为已适用于订阅IAP.您可以在Android开发者帮助中心了解有关测试应用内结算的详情:https://developer.android.com/google/play/billing/billing_testing.html#testing-purchases

好吧..所以我去了上面提到的链接,并在那里有一个部分: 取消已完成的测试购买 ,其中说明:

Google Play会为每个用户累积完成的测试购买,但不会将其传递给财务处理.在某些情况下,您可能希望手动取消测试购买以继续测试.为此,请在Play商店中打开应用页面.如果要取消的测试购买是订阅,您还可以使用Purchases.subscriptions API的cancel()方法.重要提示:Purchases.subscriptions API的refund()和revoke()方法不支持测试购买.

所以我去Play商店的应用页面......然后做到了什么?网页没有说明我应该在那里做什么.谁都知道?

它确实说: 你也可以使用Purchases.subscriptions API的cancel()方法.

这表明使用cancel()方法不是唯一的方法.

如何解决这个问题而不在我的应用中添加额外的代码?

cmi*_*nus 17

我进入了主要的Google Play控制台页面,然后点击了订单管理.在此之下,我能够选择所有测试购买并退款.我是该应用程序的主要开发人员,因此我可以访问.如果您是测试人员,您可能需要联系支持团队并要求他们退还您的订单.

  • 精彩,精彩的答案!完美运行。一旦交易被标记为“已退款”,我就强制退出 Play 商店并清除其缓存和应用程序数据。然后我被取消订阅,可以重新购买订阅。 (3认同)

dev*_*max 15

所有托管的应用内商品均为耗材.

正如文档中所述.

这意味着您可以使用自有物品而不是取消购买并重新购买.我建议在应用发布时查询广告资源:

mIabHelper.queryInventoryAsync(this);

然后,您可以在回调中使用拥有的项:

@Override
public void onQueryInventoryFinished(IabResult result, Inventory inventory) {
    Purchase purchase = inventory.getPurchase(MY_SKU);
    boolean isBought = (purchase != null && verifyDeveloperPayload(purchase));
    if (isBought) {
        mIabHelper.consumeAsync(purchase, new OnConsumeFinishedListener() {
            @Override
            public void onConsumeFinished(Purchase purchase, IabResult result) {
                //Clear the purchase info from persistent storage
            }
        });
    }
}
Run Code Online (Sandbox Code Playgroud)

这对于测试IAB流是可以的,但请确保从发行版中删除此代码.


Sol*_*ake 10

来自/sf/answers/2112520301/ @mttmllns

无需编写任何特殊的消费代码。只需使用 adb 命令清除 Google Play 商店数据:

adb shell pm clear com.android.vending
Run Code Online (Sandbox Code Playgroud)


Mor*_*tur 6

我找到了一个不太方便但有效的解决方案。似乎您可以消费不可食用的产品,这样您就可以再次购买它们。我正在使用phonegap,所以我只有cordova-plugin-purchase插件的示例代码:

store.when("your.product.id").updated(product => {
    if(product.owned) {
        var transaction = product.transaction;
        product.transaction = null;
        store.inappbilling.consumePurchase(
            function() { // success
                alert("consume success");
            },
            function(err, code) { // error
                alert("consume error " + err)
            },
            product.id,
            transaction.id
        );
    }
});
Run Code Online (Sandbox Code Playgroud)

当您致电store.refresh()或购买产品时,将调用更新的回调。因此,根据您的用例,您可能想要实施一种额外的方法来检查何时消费该产品。

我没有使用原生 Android 应用内支付的经验,但显然您也可以在那里消费产品。

编辑:抱歉,我刚刚读到您不想在项目中包含其他代码。我认为目前这是不可能的,但我想在这里保留我的答案,因为它可能会帮助其他尝试测试应用内支付的人。


小智 5

  • 在Play控制台上,转到开发者帐户->帐户详细信息,设置许可证测试人员(默认情况下,您是一个)

  • 购买物品

  • 转到订单管理,选择那些测试订单,然后选择:退款,但是在退款时不要忘记检查撤销。(我忘记了撤消,现在找不到找回它们的方法)

无论如何,另一个测试帐户可以。

  • 我发现即使您忘记了,您实际上也可以撤销,但这很痛苦,因为您需要使用api。该文档位于此处:https://developers.google.com/android-publisher/api-ref/orders/refund确保在执行请求时在网址末尾包含?revoke = true。我很晚才提出此要求,最多需要等待30分钟,但它正确地撤消了我以前忘记在控制台中撤消的购买 (2认同)