Android 如何检查用户是否购买了IAP提供的产品
在我的应用程序中,我让用户使用Google Play IAP进行捐赠,作为回报,我删除广告并解锁高级功能Android 如何检查用户是否购买了IAP提供的产品,android,in-app-purchase,Android,In App Purchase,在我的应用程序中,我让用户使用Google Play IAP进行捐赠,作为回报,我删除广告并解锁高级功能 BillingProcessor bp; bp.consumePurchase(productId); 当我的应用程序加载时,我想检查用户是否进行了捐赠,如何通过代码进行检查,知道用户进行捐赠后,我将调用以下代码,以允许用户在需要时进行未来捐赠 因此,我想允许用户在需要的情况下进一步捐款,但我想知道他是否已经捐款来禁用广告和解锁高级功能 BillingProcessor bp; bp.co
BillingProcessor bp;
bp.consumePurchase(productId);
当我的应用程序加载时,我想检查用户是否进行了捐赠,如何通过代码进行检查,知道用户进行捐赠后,我将调用以下代码,以允许用户在需要时进行未来捐赠
因此,我想允许用户在需要的情况下进一步捐款,但我想知道他是否已经捐款来禁用广告和解锁高级功能
BillingProcessor bp;
bp.consumePurchase(productId);
请注意,我的问题是关于IAP联机过程,而不是脱机保存值并稍后检查。我认为本指南应该帮助您了解如何执行此操作: 查询缓存的购买 要检索有关购买的信息,请执行以下操作: 用户通过应用程序调用queryPurchases()方法 播放账单上的购买类型(SkuType.INAPP或SkuType.SUBS) 图书馆客户端。例如:
PurchasesResult PurchasesResult=mBillingClient.queryPurchases(SkuType.INAPP)代码>
Google Play返回
由登录到设备的用户帐户进行的购买。如果
请求成功后,播放计费库存储查询
生成一个购买对象列表
注意:此列表上仅显示活动订阅。只要
应用内产品在此列表中,用户应该有权访问它。对于
有关更多信息,请参阅本手册的“保持”部分中的“手柄”子选项
“添加订阅特定功能”文档。要检索列表,
对PurchasesResult对象调用getPurchasesList()方法。你
然后可以调用Purchase对象上的各种方法进行查看
有关项目的相关信息,例如其购买状态或
时间查看以下类型的产品详细信息:
如果可用,请参阅Purchase类中的方法列表
在代码中至少调用queryPurchases()两次:
每次应用程序启动时,您都可以恢复任何购买
自应用上次停止后用户所做的更改。在你的简历中
方法,因为用户可以在您的应用处于
背景(例如,在Play Store应用程序中兑换促销代码)。
在启动和恢复时调用queryPurchases()可以保证
应用程序会发现用户可能拥有的所有购买和赎回信息
在应用程序未运行时生成。此外,如果用户
当应用程序正在运行且您的应用程序因任何原因而错过时购买
原因是,你的应用程序在下一次
活动继续并调用queryPurchases()
查询最近购买的商品
queryPurchases()方法使用缓存
在不启动网络请求的情况下启动Google Play Store应用程序。如果
您需要检查用户最近购买的每种产品
产品ID,可以使用queryPurchaseHistoryAsync()方法和
传递要处理的采购类型和PurchaseHistoryResponseListener
查询结果
queryPurchaseHistoryAsync()返回由
每个产品ID的用户,即使购买已过期,
取消或消费。无论何时使用queryPurchases()方法
可能,因为它使用本地缓存,而不是
queryPurchaseHistoryAsync()方法。你可以合并
queryPurchaseHistoryAsync(),带有一个刷新按钮,允许用户
更新他们的购买清单
下面的代码演示如何重写
onPurchaseHistoryResponse()方法:
您可以使用以下选项:
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);
}
}
}
如果您有任何问题,请继续评论。谢谢您,纳什。。。我发现这是关于onPurchaseHistoryResponse QueryPurchaseHistorySync的,它不会满足您的需要,因为它只会为您提供每个SKU的最新购买列表。它们可能已经过期、被取消或已被消费,而且无法确定。因此,此响应不能用于告诉你的应用程序中应用了哪些购买。是的,我明白了。然后,我唯一的其他建议是查看购买对象中“原始JSON”中返回的内容(这没有文档记录,因此我自己不运行测试就无法判断),或者查看琐碎的驱动器示例代码,看看是否有有用的内容。