繁体   English   中英

试用期过后,所有Google Play订阅都将退还

[英]All Google Play subscriptions are refunded after trial period

我正在使用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:该应用程序会在本地验证购买签名,并且统计信息显示结果是肯定的。

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

关于消耗品的重要说明。 您无需确认消耗性产品。 但是,如果您确实选择了(由于某种原因)对它们进行确认,并且进一步(如果有其他原因)您在确认时提交了有效负载:那么当您在Android上调用consumeAsync时,您必须提交相同的有效负载。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM