【发布时间】: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:该应用程序在本地验证购买签名,统计数据显示结果是肯定的。
【问题讨论】:
-
您是否按照此处文档中的说明确认购买? developer.android.com/google/play/billing/…
-
@jontro 该死的!我认为不应该承认订阅...谢谢!
标签: android subscription android-billing