Flutter如何实现应用内购

在Flutter中实现应用内购时,具体需要哪些步骤?是否必须使用官方插件(如in_app_purchase)?如何处理不同平台(iOS/Android)的支付差异?测试阶段如何模拟交易流程?遇到支付状态不一致或回调失败时该如何排查?希望有经验的开发者能分享完整流程和常见坑点。

2 回复

Flutter应用内购可通过in_app_purchase插件实现。步骤包括:配置商店后台、添加依赖、初始化插件、查询商品、发起购买并处理交易结果。需注意iOS和Android平台差异,并遵循各自审核规则。

更多关于Flutter如何实现应用内购的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中实现应用内购,主要使用官方推荐的 in_app_purchase 插件。以下是实现步骤和关键代码示例:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  in_app_purchase: ^3.1.7

2. 配置应用商店

  • Android:在Google Play Console中添加商品,并在应用中配置结算权限。
  • iOS:在App Store Connect中创建应用内购买项目,并在Xcode中启用In-App Purchase功能。

3. 初始化连接

import 'package:in_app_purchase/in_app_purchase.dart';

final InAppPurchase _inAppPurchase = InAppPurchase.instance;

void initInAppPurchase() {
  _inAppPurchase.isAvailable().then((available) {
    if (available) {
      // 连接应用商店成功
    }
  });
}

4. 获取商品信息

Future<void> loadProducts() async {
  const Set<String> _kProductIds = {'product1', 'product2'};
  final ProductDetailsResponse response = 
      await _inAppPurchase.queryProductDetails(_kProductIds);
  if (response.notFoundIDs.isNotEmpty) {
    // 处理未找到的商品
  }
  List<ProductDetails> products = response.productDetails;
}

5. 发起购买

Future<void> buyProduct(ProductDetails product) async {
  final PurchaseParam purchaseParam = PurchaseParam(
    productDetails: product,
  );
  await _inAppPurchase.buyConsumable(purchaseParam: purchaseParam);
}

6. 监听购买状态

StreamSubscription<List<PurchaseDetails>> _subscription;

void listenToPurchase() {
  _subscription = _inAppPurchase.purchaseStream.listen(
    (purchaseDetailsList) {
      for (var purchaseDetails in purchaseDetailsList) {
        if (purchaseDetails.status == PurchaseStatus.purchased) {
          // 验证收据并发放商品
          _verifyPurchase(purchaseDetails);
        }
      }
    },
  );
}

void _verifyPurchase(PurchaseDetails purchaseDetails) {
  // 验证交易(建议通过服务器验证)
  // 验证成功后调用 completePurchase
  _inAppPurchase.completePurchase(purchaseDetails);
}

7. 恢复购买(iOS)

_inAppPurchase.restorePurchases();

注意事项:

  1. 务必在服务器端验证交易收据,防止欺诈
  2. 正确处理网络中断和购买失败情况
  3. 遵循各平台的设计指南
  4. 测试时使用沙盒环境

建议参考官方文档获取最新实现细节和最佳实践。

回到顶部