如何在Flutter中验证应用内购买?

r1wp621o  于 2023-03-13  发布在  Flutter
关注(0)|答案(1)|浏览(149)

我在Flutter应用中使用的是in_app_purchase,产品是消耗品。
我已经遵循了官方的 Package 示例。但是验证购买没有逻辑。现在我正在使用以下检查来验证产品。

bool _verifyPurchase(PurchaseDetails purchaseDetails)  {
if (purchaseDetails.status == PurchaseStatus.purchased &&
    _productIDs.contains(purchaseDetails.productID) &&
    purchaseDetails.transactionDate != null) {
  return true;
} else {
  _handleInvalidPurchase(purchaseDetails);
  return false;
}
}

但由于验证购买是一件非常重要的事情。所以我对此表示怀疑。我在网上查了一下,但没有发现任何关于如何在Flutter中验证产品的好方法。唯一的解决办法是使用RevenueCart。但这对订阅或非消耗性产品更重要。是否有任何逻辑可以让我们在应用程序中轻松验证购买

tcomlyy6

tcomlyy61#

验证购买的逻辑特定于你的应用。你应在验证之前检查内容是否已交付给用户。这是一种故障保护措施,可确保用户不会因因未知(可能是特定于设计的)问题而未交付的购买请求退款。
例如,如果您有一个产品可以删除广告,那么在验证之前,您应该检查该广告是否已被删除。
侦听器的示例代码:

void __updatePurchases(List<PurchaseDetails> data) async {

if (data.isNotEmpty) {
  // Add purchase data
  _purchases.addAll(data);

  // Handle any new purchases
  for (PurchaseDetails purchaseDetails in data) {
    if (purchaseDetails.status == PurchaseStatus.purchased ||
        purchaseDetails.status == PurchaseStatus.restored) {
      // Success, check delivery and complete purchase if purchase is not complete.
      if (purchaseDetails.pendingCompletePurchase && *your content delivery check here*) {
        _log.d("Completing purchase '${purchaseDetails.productID}'.");
        _iap.completePurchase(purchaseDetails);
      }
    } else if (purchaseDetails.status == PurchaseStatus.error) {
      // Failed, log error.
      _log.i("Purchase of '${purchaseDetails.productID}' failed.");
    }
  }

  // Query all products to get the details.
  ProductDetailsResponse response =
  await _iap.queryProductDetails(_availableProducts);

  _products = response.productDetails;

  // Notify listeners.
  notifyListeners();
}

} }

相关问题