代码之家  ›  专栏  ›  技术社区  ›  Jack

如何检查用户是否购买了IAP提供的产品

  •  0
  • Jack  · 技术社区  · 7 年前

    当我的应用程序加载时,我想检查用户是否捐款,如何通过代码做到这一点 在用户捐赠之后,我将调用下面的代码以允许用户在需要时进行将来的捐赠。

    所以,我想让用户进一步捐款,如果需要的话,但我想知道,如果(s)他已经作出了捐款,以禁用广告和解锁高级功能。

    BillingProcessor bp;
    bp.consumePurchase(productId);
    

    注意,我的问题是关于IAP联机过程,而不是脱机保存值并稍后检查。

    1 回复  |  直到 7 年前
        1
  •  5
  •   nasch    7 年前

    我认为这本指南应该帮助您了解如何做到这一点:

    https://developer.android.com/google/play/billing/billing_library_overview

    查询缓存的购买

    检索 播放账单上的购买类型(SkuType.INAPP或SkuType.SUBS) 图书馆客户端。例如:

    PurchasesResult purchasesResult = mBillingClient.queryPurchases(SkuType.INAPP);

    由登录到设备的用户帐户进行的购买。如果 请求成功,播放计费库存储查询 生成购买对象列表。

    更多信息,请参阅 对PurchasesResult对象调用getPurchasesList()方法。你呢 有关项目的相关信息,例如其购买状态或 时间。要查看以下类型的产品详细信息:

    在代码中至少调用queryPurchases()两次:

    每次应用程序启动时,您都可以恢复任何购买 应用程序上次停止后用户所做的更改。在你的简历中() 背景(例如,在Play Store应用程序中兑换促销代码)。 在启动和恢复时调用queryPurchases()可以保证 应用程序会发现用户可能拥有的所有购买和赎回信息 在应用程序运行时购买,而您的应用程序会因任何原因错过它 原因是,你的应用程序在下次 活动继续并调用queryPurchases()。

    查询最近购买

    在不启动网络请求的情况下,对Google Play Store应用程序进行访问。如果 您需要检查用户最近购买的产品 产品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.
                 }
              }
         } });
    
        2
  •  1
  •   AlexBSC    5 年前

    您可以使用:

    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);
                }
            }
        }
    

    推荐文章