相关疑难解决方法(0)

Android应用程序结算:订单取消后,购买状态保持"已购买"状态

我目前正在测试我的InApp计费机制(使用InApp Billing版本3 API,因此将TrivialDrive示例作为参考).

我有一个托管项目,即升级到高级版本.

现在,使用我的测试帐户购买该项目是有效的,但是当我之后在Google结帐中取消整个订单时,我的代码仍然告诉我该项目已购买,因此授予高级功能.

以下是我在MainActivity中检查购买的方法.我不会在某处本地保存购买状态,因为据我所知,使用billing API v3,您可以根据需要查询特定购买.

@Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();

        iabHelper = new IabHelper(this, Helper.getPKey());
        iabHelper.enableDebugLogging(true);

        iabHelper.startSetup(new IabHelper.OnIabSetupFinishedListener() {

            @Override
            public void onIabSetupFinished(IabResult result) {
                Log.d("IAB", "SETUP FINISHED");

                if(!result.isSuccess())
                {
                    Log.d("IAB", "SETUP NOT OK");
                    return;
                }
                else
                    Log.d("IAB", "SETUP OK");

                iabHelper.queryInventoryAsync(
                    new QueryInventoryFinishedListener() {

                        @Override
                        public void onQueryInventoryFinished(IabResult result, Inventory inv) {
                            Log.d("IAB", "Query inventory finished.");
                            if (result.isFailure()) {
                                Log.d("IAB","Failed to query inventory: " + result);
                                return;
                            }

                            Log.d("IAB", "Query inventory …
Run Code Online (Sandbox Code Playgroud)

android in-app-purchase in-app-billing

46
推荐指数
6
解决办法
3万
查看次数

检测退款的托管应用内购买 android IAP 2.0.3

我无法弄清楚如何使用com.android.billingclient:billing:2.0.3. 这个问题似乎相当深,但也许我让它变得比它应该的更复杂。

首先,我进行了一次已确认并退款的测试购买:

在此处输入图片说明

查看我的应用程序的日志,我看到以下内容:

D/BillingManager: Got a verified purchase: Purchase. Json: {"orderId":"GPA.3362-7185-5389-78416","packageName":"com.glan.input","productId":"pro","purchaseTime":1567672759460,"purchaseState":0,"purchaseToken":"pbkpcaadklleoecegjfjdpbl.AO-J1OwsR6WVaVZCCYOU6JyYN1r0qJsrwitIPZfhc3jX4yketRUwNzKqwMgYx0TgZ2GebEGbXDL0RlMyogwtSKSPsaHCJ4RA4MPlIGay-aM1-QhmnqwjXjQ","acknowledged":true}
I/BillingManager: purchase pbkpcaadklleoecegjfjdpbl.AO-J1OwsR6WVaVZCCYOU6JyYN1r0qJsrwitIPZfhc3jX4yketRUwNzKqwMgYx0TgZ2GebEGbXDL0RlMyogwtSKSPsaHCJ4RA4MPlIGay-aM1-QhmnqwjXjQ is in 1 state
Run Code Online (Sandbox Code Playgroud)

这里发生了一些有趣的事情:

  1. 我们可以看到图像中的内容与检测到的购买之间的订单 ID 匹配
  2. 第一个日志行是打印购买,Log.d(TAG, "Got a verified purchase: " + purchase);它打印代表purchase.
  3. 注意 "purchaseState":0
  4. 第二个日志行以Log.i(TAG, "purchase " + purchase.getPurchaseToken() + " is in " + purchase.getPurchaseState() + " state");.
  5. 请注意,这里purchase.getPurchaseState()产生的值为1

如果我查看getPurchaseStateAndroid Studio中的实现,我会看到以下内容:

  public @PurchaseState int getPurchaseState() {
    switch (mParsedJson.optInt("purchaseState", PurchaseState.PURCHASED)) {
      case 4:
        return PurchaseState.PENDING;
      default:
        return PurchaseState.PURCHASED; …
Run Code Online (Sandbox Code Playgroud)

android in-app-purchase

10
推荐指数
2
解决办法
3133
查看次数

如何检测 Google 应用内结算的取消或退款订单?

我有很多帖子和 Google 文档,但我仍然不清楚如何判断应用内购买已退款。我小心红了In-App Billing v3 - 不检测退款Google Play In-App Billing Version 3 支持退款吗?.

我相信我在不久前通过复制和粘贴从 Google 官方文档中记下了以下笔记:

purchaseState:订单的购买状态。可能的值为 0(已购买)、1(已取消)或 2(已退款)。

现在,官方文档有以下内容:

-> purchaseState:订单的购买状态。它总是返回 0-

(购买)。

更具体地说,如果 IAB 购买被退款或取消,那是否仍在 mHelper.queryInventoryAsync(mGotInventoryListener) 获取的用户库存中?如果是这样,如何判断购买已被取消或退款?

更新 [2019-12-12]:

我已经测试了很多次并确认了以下几点:

如果订单在退款后被取消,它将从getPurchasesList返回的结果中消失。发生这种情况所需的时间各不相同。可能是几分钟到 10 多个小时。我认为这取决于 Google Play 何时刷新其缓存。似乎可以打开 Google Play 来刷新其缓存。在一种情况下,getPurchasesList在退款 10 多个小时后仍然返回了已退款的购买,但在 Google Play 一打开它就停止了退货。

android google-checkout in-app-billing google-play

7
推荐指数
1
解决办法
2545
查看次数