flutter如何实现inapppurchase内购

在Flutter中如何正确实现In-App Purchase(应用内购)功能?我在集成in_app_purchase插件时遇到了配置问题,特别是Google Play和App Store的凭证设置不太清楚。想请教:

  1. 如何配置iOS的沙盒测试环境和Android的License Key?
  2. 如何处理订阅类型的商品和一次性购买商品?
  3. 有没有完整的购买流程代码示例(包括监听购买状态和验证凭证)?
  4. 测试时常见的"无法连接商店"错误该如何排查?

目前按照官方文档操作总在商品加载环节失败,希望能分享具体的实现经验。

2 回复

Flutter实现应用内购可使用官方插件in_app_purchase。步骤:

  1. 添加依赖到pubspec.yaml
  2. 配置iOS和Android的商店设置。
  3. 初始化连接并获取商品列表。
  4. 监听购买流程,处理购买结果。
  5. 验证收据并交付商品。

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


在 Flutter 中实现应用内购买(In-App Purchase, IAP)可以使用 in_app_purchase 官方插件。以下是实现步骤和示例代码:

步骤

  1. 添加依赖
    pubspec.yaml 中添加:

    dependencies:
      in_app_purchase: ^3.1.16
    
  2. 配置应用商店

    • Android:在 Google Play Console 中创建商品并上传签名的 APK。
    • iOS:在 App Store Connect 中设置商品,并在 Xcode 中启用 IAP 功能。
  3. 初始化并监听购买流
    使用 InAppPurchase.instance 监听购买状态和商品详情。

示例代码

import 'package:in_app_purchase/in_app_purchase.dart';

class InAppPurchaseService {
  final InAppPurchase _inAppPurchase = InAppPurchase.instance;
  late StreamSubscription<List<PurchaseDetails>> _subscription;

  void initialize() {
    // 监听购买状态
    _subscription = _inAppPurchase.purchaseStream.listen(
      _handlePurchaseUpdate,
      onDone: () => _subscription.cancel(),
      onError: (error) => print("购买流错误: $error"),
    );
  }

  // 获取商品信息
  Future<void> loadProducts() async {
    const Set<String> productIds = {'product1', 'product2'};
    ProductDetailsResponse response = await _inAppPurchase.queryProductDetails(productIds);
    if (response.notFoundIDs.isNotEmpty) {
      print("未找到商品: ${response.notFoundIDs}");
    }
    List<ProductDetails> products = response.productDetails;
    // 显示商品列表(例如更新UI)
  }

  // 处理购买
  void purchase(ProductDetails product) {
    final PurchaseParam purchaseParam = PurchaseParam(productDetails: product);
    _inAppPurchase.buyConsumable(purchaseParam: purchaseParam); // 消耗型商品
  }

  // 处理购买结果
  void _handlePurchaseUpdate(List<PurchaseDetails> purchases) {
    for (PurchaseDetails purchase in purchases) {
      if (purchase.status == PurchaseStatus.purchased) {
        // 验证收据(推荐通过后端验证)
        _deliverProduct(purchase); // 发放商品
        _inAppPurchase.completePurchase(purchase); // 确认完成
      }
    }
  }

  void _deliverProduct(PurchaseDetails purchase) {
    // 根据 purchase.productID 发放商品(如解锁功能、增加金币等)
    print("已购买: ${purchase.productID}");
  }

  void dispose() {
    _subscription.cancel();
  }
}

注意事项

  • 验证收据:为防止欺诈,应在服务器端验证购买凭证(Android 使用 Google API,iOS 使用 App Store 验证)。
  • 商品类型:区分消耗型(如金币)、非消耗型(如永久功能)和订阅型商品。
  • UI 集成:结合 Flutter 界面展示商品列表和购买按钮。
  • 测试:使用沙盒环境(iOS)和内部测试(Android)进行购买测试。

通过以上步骤,即可在 Flutter 应用中实现内购功能。

回到顶部