在我的应用程序中,我为用户提供了使用Google Play IAP进行捐赠的机会,作为回报,我删除了广告并解锁了高级功能。
在我的应用程序加载后,我想检查用户是否进行了捐赠,如何通过代码知道来做到这一点(在用户捐赠之后),我将调用以下代码以允许用户进行捐赠如果需要,将来可以捐款。
因此,我希望允许用户根据需要进行进一步的捐赠,但是我想知道他是否已经为禁用广告和解锁高级功能进行了捐赠。
BillingProcessor bp;
bp.consumePurchase(productId);
请注意,我的问题是关于IAP的在线流程,而不是关于离线保存值并稍后检查。
答案 0 :(得分:1)
我认为本指南应该帮助您了解如何做到这一点:
https://developer.android.com/google/play/billing/billing_library_overview
查询缓存的购买
要检索有关以下内容的购买信息: 用户从您的应用中获取,请通过以下命令调用queryPurchases()方法: Play帐单上的购买类型(SkuType.INAPP或SkuType.SUBS) 图书馆客户。例如:
PurchasesResult purchasesResult = mBillingClient.queryPurchases(SkuType.INAPP);
Google Play返回 通过登录到设备的用户帐户进行的购买。如果 请求成功后,Play Billing Library将存储查询 会生成“购买”对象列表。
注意:此列表中仅显示活动的订阅。只要 应用内商品在此列表中,用户应有权访问它。对于 更多信息,请参见“处理SUBSCRPTION_ON_HOLD”部分 添加特定于订阅的功能文档。要检索列表, 在PurchasesResult对象上调用getPurchasesList()方法。您 然后可以在Purchase对象上调用各种方法来查看 有关商品的相关信息,例如其购买状态或 时间。查看以下类型的产品详细信息: 可用,请参见Purchase类中的方法列表。
在您的代码中至少两次调用queryPurchases():
每次启动应用程序时,您都可以恢复所有购买 自应用程序上次停止以来用户所做的操作。在你的onResume()中 方法,因为用户可以在您的应用程序位于 背景(例如,在Play商店应用中兑换促销代码)。 在启动和恢复时调用queryPurchases()可以确保您的 应用程序查找用户可能拥有的所有购买和兑换 在应用未运行时进行的。此外,如果用户 在应用运行时购买商品,而您的应用会错过任何商品 原因是,您的应用程序下次仍会找到有关购买的信息 活动恢复并调用queryPurchases()。
查询最近购买的商品
queryPurchases()方法使用缓存 无需发起网络请求即可访问Google Play商店应用。如果 您需要检查用户最近一次购买的商品 产品ID,则可以使用queryPurchaseHistoryAsync()方法和 传递购买类型和PurchaseHistoryResponseListener来处理 查询结果。
queryPurchaseHistoryAsync()返回的最新购买者是 每个产品ID的用户,即使该购买已过期, 取消或消耗。随时使用queryPurchases()方法 可能的,因为它使用本地缓存,而不是 queryPurchaseHistoryAsync()方法。你可以结合 带刷新按钮的queryPurchaseHistoryAsync(),允许用户 更新他们的购买清单。
以下代码演示了如何覆盖 onPurchaseHistoryResponse()方法:
mBillingClient.queryPurchaseHistoryAsync(SkuType.INAPP,
new PurchaseHistoryResponseListener() {
@Override
public void onPurchaseHistoryResponse(@BillingResponse int responseCode,
List purchasesList) {
if (responseCode == BillingResponse.OK
&& purchasesList != null) {
for (Purchase purchase : purchasesList) {
// Process the result.
}
}
} });
答案 1 :(得分:1)
正如 nasch 和 AlexBSC 已经回答的那样,您必须获取可能进行的购买。
但是,执行此操作的最新方法是调用 BillingClient.queryPurchasesAsync()
,如 https://developer.android.com/google/play/billing/integrate#fetch 中所述。您至少应该在 onResume()
和 onCreate()
中调用它。
例如像这样,
billingClient.queryPurchasesAsync(BillingClient.SkuType.SUBS, new PurchasesResponseListener() {
@Override
public void onQueryPurchasesResponse(BillingResult billingResult, List<Purchase> purchases) {
if (billingResult.getResponseCode() == OK
&& purchases != null) {
for (Purchase purchase : purchases) {
handlePurchase(purchase);
}
}
}
});
遵循这些步骤应该会让您走得很远https://developer.android.com/google/play/billing/integrate。
答案 2 :(得分:0)
您可以使用此:
Purchase.PurchasesResult purchasesResult = billingClient.queryPurchases(BillingClient.SkuType.SUBS); //Or SkuType.INAPP
if (purchasesResult.getPurchasesList() != null) {
for (Purchase purchase : purchasesResult.getPurchasesList()) {
if (purchase.getSku().equals("your_product_id")) handlePurchase(purchase);
}
[...]
void handlePurchase(Purchase purchase) {
if (purchase.getPurchaseState() == Purchase.PurchaseState.PURCHASED) {
premium = true; //In casse purchase was acknowledge before
if (!purchase.isAcknowledged()) {
AcknowledgePurchaseParams acknowledgePurchaseParams =
AcknowledgePurchaseParams.newBuilder()
.setPurchaseToken(purchase.getPurchaseToken())
.build();
AcknowledgePurchaseResponseListener acknowledgePurchaseResponseListener = new AcknowledgePurchaseResponseListener() {
@Override
public void onAcknowledgePurchaseResponse(BillingResult billingResult) {
premium = true;
}
};
billingClient.acknowledgePurchase(acknowledgePurchaseParams, acknowledgePurchaseResponseListener);
}
}
}
如有任何疑问,请继续发表评论。