flutter如何实现苹果支付

在Flutter应用中如何正确集成苹果支付(IAP)功能?我尝试使用in_app_purchase插件,但遇到以下问题:1) 如何配置沙盒测试环境?2) 如何处理购买验证和收据?3) 如何实现订阅型商品和非续订订阅?4) 国内应用上架App Store是否需要特殊资质?希望能得到详细的实现步骤和常见坑点解决方案。

2 回复

在Flutter中实现苹果支付,主要使用in_app_purchase插件。步骤如下:

  1. 添加依赖:在pubspec.yaml中添加in_app_purchase: ^latest_version

  2. 配置App Store Connect:在苹果开发者后台创建商品,并确保App ID已开启应用内购买功能。

  3. 初始化支付

    final bool available = await InAppPurchase.instance.isAvailable();
    if (!available) {
      // 处理不支持的情况
    }
    
  4. 获取商品信息

    const Set<String> productIds = {'product1', 'product2'};
    final ProductDetailsResponse response = await InAppPurchase.instance.queryProductDetails(productIds);
    List<ProductDetails> products = response.productDetails;
    
  5. 发起购买

    final PurchaseParam purchaseParam = PurchaseParam(productDetails: products[0]);
    InAppPurchase.instance.buyNonConsumable(purchaseParam: purchaseParam);
    
  6. 监听交易状态

    final Stream<List<PurchaseDetails>> purchaseUpdates = InAppPurchase.instance.purchaseStream;
    purchaseUpdates.listen((List<PurchaseDetails> purchaseDetailsList) {
      // 处理交易状态(pending、purchased、error等)
    });
    
  7. 完成交易:在购买成功后调用InAppPurchase.instance.completePurchase(purchaseDetails)

注意:需在iOS真机上测试,并处理错误状态和恢复购买逻辑。

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


在Flutter中实现苹果支付(Apple Pay/In-App Purchase)主要通过以下步骤完成:

1. 配置苹果开发者账号

  • Apple Developer启用App内购买功能
  • 创建商品ID(Product Identifiers)并配置沙盒测试账号

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;

// 检查是否可用
bool available = await _inAppPurchase.isAvailable();
if (!available) {
  // 处理设备不支持的情况
}

4. 获取商品信息

const Set<String> _productIds = {'com.example.product1'};
final ProductDetailsResponse response = await _inAppPurchase.queryProductDetails(_productIds);
if (response.notFoundIDs.isNotEmpty) {
  // 处理未找到的商品
}
List<ProductDetails> products = response.productDetails;

5. 发起购买

final PurchaseParam purchaseParam = PurchaseParam(
  productDetails: products[0],
);
await _inAppPurchase.buyNonConsumable(purchaseParam: purchaseParam);

6. 监听交易状态

final Stream<List<PurchaseDetails>> purchaseUpdates = _inAppPurchase.purchaseStream;
StreamSubscription<List<PurchaseDetails>> _subscription = purchaseUpdates.listen((purchases) {
  for (var purchase in purchases) {
    if (purchase.status == PurchaseStatus.purchased) {
      // 验证收据并交付商品
      _verifyPurchase(purchase);
    }
  }
});

7. 验证交易(重要)

  • 在服务器端验证苹果收据
  • 防止伪造交易

注意事项:

  1. 必须使用真实iOS设备测试
  2. 沙盒环境测试不需真实扣款
  3. 需处理网络中断、支付取消等异常情况
  4. 遵守苹果审核指南

建议参考官方文档和苹果的[App Store审核指南]确保合规实现。

回到顶部