【问题标题】:All Google Play subscriptions are refunded after trial period试用期结束后,所有 Google Play 订阅都将获得退款
【发布时间】:2019-12-21 07:04:38
【问题描述】:

我正在使用 com.android.billingclient:billing:2.0.1 开发 Android 应用程序。我的订阅有以下参数。

计费周期:3个月

免费试用期:3 天

介绍价格:-

宽限期:3 天

但全部 (>100) 在成功购买 3 天后退款。我不明白原因。

以下是典型订单历史的屏幕截图:

用户问为什么会这样。我不认为他们都选择退款。

我的 BillingManager 类:

public class BillingManager implements PurchasesUpdatedListener {

private BillingClient billingClient;
private final List<Purchase> purchases = new ArrayList<>();

public BillingManager(Context context) {
    billingClient = BillingClient.newBuilder(context).enablePendingPurchases().setListener(this).build();
    startConnection();
}

void startConnection() {
    billingClient.startConnection(new BillingClientStateListener() {
        @Override
        public void onBillingSetupFinished(BillingResult billingResult) {
            final int responseCode = billingResult.getResponseCode();
            if (responseCode == BillingResponseCode.OK) {
                queryPurchases();
            } 
        }

        @Override
        public void onBillingServiceDisconnected() {
            retry();
        }
    });
}

void queryPurchases() {
    PurchasesResult purchasesResult = billingClient.queryPurchases(SkuType.SUBS);
    List<Purchase> cachedPurchaseList = purchasesResult.getPurchasesList();
    onPurchasesUpdated(cachedPurchaseList);
}

@Override
public void onPurchasesUpdated(BillingResult billingResult, @Nullable List<Purchase> purchasesList) {
    final int responseCode = billingResult.getResponseCode();
    if (responseCode == BillingResponseCode.OK) {
        onPurchasesUpdated(purchasesList);
    } else if (responseCode == BillingResponseCode.USER_CANCELED) {
        handleCanceledPurchase();
    } else {
        handleUnknownResponse();
    }
}

private void onPurchasesUpdated(@Nullable List<Purchase> purchasesList) {
    purchases.clear();
    if (purchasesList != null) {
        for (Purchase purchase : purchasesList) {
            processPurchase(purchase);
        }
    }

    notifyListener();
}

private void processPurchase(Purchase purchase) {
    if (purchase.getPurchaseState() != PurchaseState.PURCHASED) {
        return;
    }

    if (!verify(purchase)) {
        return;
    }

    purchases.add(purchase);
}

public boolean shouldDoStuff() {
    if (purchases.isEmpty()) {
        return false;
    } else {
        for (Purchase purchase : purchases) {
            if (purchase.getPurchaseState() != PurchaseState.PURCHASED) {
                continue;
            }
            return true;
        }
        return false;
    }
}
}

PS:该应用程序在本地验证购买签名,统计数据显示结果是肯定的。

【问题讨论】:

标签: android subscription android-billing


【解决方案1】:

感谢您升级到 Play 结算库 2.+。关于确认,您需要确认订阅和非消耗性应用内产品。在确认期间,并且仅在确认期间,您可以选择设置有效负载。您设置的有效负载随后将在您查询购买时返回。

关于消耗品的重要说明。您无需确认消耗品。但是,如果您确实选择了确认它们(无论出于何种原因),并且如果 - 进一步 - 您在确认时提交了一个有效负载:那么当您在 Android 上调用 consumeAsync 时,您需要提交相同的有效负载。

您也可以通过 Android 或服务器 api 进行确认。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-16
    • 1970-01-01
    • 2018-12-06
    • 2016-11-11
    • 1970-01-01
    • 1970-01-01
    • 2018-06-09
    • 2020-03-21
    相关资源
    最近更新 更多