flutter中如何处理in_app_purchase的restored状态

在Flutter中使用in_app_purchase插件时,如何处理已购买商品的restored状态?我发现在用户恢复购买后,无法正确识别已恢复的订单状态,导致商品重复解锁或无法正确显示。请问应该如何监听并处理PurchaseDetails.status == PurchaseStatus.restored的情况?有没有完整的示例代码可以参考?

2 回复

在Flutter的in_app_purchase中,处理restored状态需监听purchaseStream,使用queryPastPurchases()查询已恢复购买,并通过PurchaseStatus.restored状态更新UI。

更多关于flutter中如何处理in_app_purchase的restored状态的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中处理 in_app_purchase 的 restored 状态(恢复购买)时,主要依赖 InAppPurchase 平台的 queryPastPurchases() 方法。以下是处理步骤和示例代码:

处理步骤:

  1. 初始化插件:确保 InAppPurchase 已正确配置。
  2. 查询历史购买:调用 queryPastPurchases() 获取用户已恢复的购买记录。
  3. 验证购买状态:检查购买详情并更新应用状态(如解锁功能)。

示例代码:

import 'package:in_app_purchase/in_app_purchase.dart';

Future<void> checkRestoredPurchases() async {
  // 检查购买功能是否可用
  final bool available = await InAppPurchase.instance.isAvailable();
  if (!available) return;

  // 查询历史购买记录
  final QueryPurchaseDetailsResponse response = 
      await InAppPurchase.instance.queryPastPurchases();

  // 处理恢复的购买
  for (PurchaseDetails purchase in response.pastPurchases) {
    if (purchase.status == PurchaseStatus.restored) {
      // 根据产品ID处理恢复逻辑(例如解锁内容)
      if (purchase.productID == 'your_product_id') {
        _enablePremiumFeatures(); // 自定义方法
      }
    }
  }
}

void _enablePremiumFeatures() {
  // 实现解锁高级功能的逻辑
  print("Premium features restored");
}

注意事项:

  • 平台差异:iOS 自动触发恢复,Android 需手动调用 queryPastPurchases()
  • 错误处理:添加 try-catch 块处理可能的异常。
  • UI 更新:在购买恢复后更新界面状态(如使用 setState 或状态管理工具)。

通过以上方法,可有效处理应用内购买的恢复状态。

回到顶部