flutter如何实现iOS支付

在Flutter中如何实现iOS支付功能?目前项目需要接入Apple Pay,但不太清楚具体该用哪个插件或如何配置。尝试过in_app_purchase插件,但遇到沙盒环境测试不成功的问题,不知道是不是漏掉了什么步骤?另外,是否需要额外在Xcode中进行配置?求有经验的大佬分享完整的实现流程和注意事项。

2 回复

在 Flutter 中实现 iOS 支付,主要依赖苹果的 StoreKit 框架。推荐使用官方维护的 in_app_purchase 插件,它封装了 StoreKit 和 Google Play Billing,支持跨平台支付。

实现步骤:

  1. 添加依赖:在 pubspec.yaml 中添加 in_app_purchase: ^latest_version
  2. 配置 App Store Connect:在苹果开发者后台创建商品(消耗型、非消耗型等),并确保 App ID 已开启应用内购买功能。
  3. 初始化支付
    final InAppPurchase _iap = InAppPurchase.instance;
    // 监听购买状态
    StreamSubscription<List<PurchaseDetails>> _subscription = _iap.purchaseStream.listen(_handlePurchase);
    
  4. 加载商品
    Set<String> productIds = {'com.example.product1'};
    ProductDetailsResponse response = await _iap.queryProductDetails(productIds);
    
  5. 发起购买
    await _iap.buyConsumable(purchaseParam: PurchaseParam(productDetails: product));
    
  6. 处理交易结果:在 _handlePurchase 中验证收据并更新用户权益,最后调用 completePurchase

注意事项

  • 必须使用真机测试,模拟器不支持。
  • 需处理网络异常、用户取消等情况。
  • 遵守苹果审核指南,避免被拒。

建议参考官方文档和示例代码,确保流程符合苹果规范。

更多关于flutter如何实现iOS支付的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中实现 iOS 支付主要通过 应用内购买(In-App Purchase, IAP) 实现,使用 Apple 官方提供的 in_app_purchase 插件。以下是具体步骤和示例代码:

步骤:

  1. 配置 App Store Connect

    • 在 App Store Connect 中创建应用内购买项目(如消耗型、非消耗型等)。
    • 获取产品 ID(如 com.example.product1)。
  2. 添加依赖: 在 pubspec.yaml 中添加:

    dependencies:
      in_app_purchase: ^3.1.7
    
  3. 初始化并获取产品信息

    import 'package:in_app_purchase/in_app_purchase.dart';
    
    final InAppPurchase _inAppPurchase = InAppPurchase.instance;
    List<ProductDetails> _products = [];
    
    Future<void> _loadProducts() async {
      Set<String> productIds = {'com.example.product1'};
      ProductDetailsResponse response = await _inAppPurchase.queryProductDetails(productIds);
      if (response.notFoundIDs.isNotEmpty) {
        print("未找到产品: ${response.notFoundIDs}");
      }
      _products = response.productDetails;
    }
    
  4. 购买产品

    Future<void> _buyProduct(ProductDetails product) async {
      final PurchaseParam purchaseParam = PurchaseParam(productDetails: product);
      try {
        await _inAppPurchase.buyConsumable(purchaseParam: purchaseParam);
      } catch (e) {
        print("购买失败: $e");
      }
    }
    
  5. 监听购买状态

    StreamSubscription<List<PurchaseDetails>> _subscription;
    
    [@override](/user/override)
    void initState() {
      super.initState();
      _subscription = _inAppPurchase.purchaseStream.listen(
        (purchaseDetailsList) {
          _handlePurchase(purchaseDetailsList);
        },
      );
    }
    
    void _handlePurchase(List<PurchaseDetails> purchaseDetailsList) {
      for (PurchaseDetails purchaseDetails in purchaseDetailsList) {
        if (purchaseDetails.status == PurchaseStatus.purchased) {
          // 验证收据并交付商品
          _verifyAndDeliverProduct(purchaseDetails);
        }
      }
    }
    
    void _verifyAndDeliverProduct(PurchaseDetails purchaseDetails) {
      // 向服务器验证收据(推荐)
      // 本地验证(仅简单场景)
      print("购买成功: ${purchaseDetails.productID}");
      // 完成交易
      _inAppPurchase.completePurchase(purchaseDetails);
    }
    
  6. 恢复购买(适用于非消耗型商品):

    Future<void> _restorePurchases() async {
      try {
        await _inAppPurchase.restorePurchases();
      } catch (e) {
        print("恢复失败: $e");
      }
    }
    

注意事项:

  • 沙盒测试:使用 Apple 沙盒环境测试,无需真实支付。
  • 收据验证:建议通过服务器验证收据以确保安全性。
  • 遵守政策:遵循 Apple 审核指南,避免违规操作。

通过以上步骤即可在 Flutter 中集成 iOS 支付功能。

回到顶部