Flutter插件in_app_purchase如何集成iOS订阅

在Flutter项目中集成in_app_purchase插件时,iOS订阅功能始终无法正常工作。已按照官方文档配置了沙盒测试账号和App Store Connect中的商品,但调用queryProductDetails始终返回空列表。

具体环境:

  • Flutter 3.7.0
  • in_app_purchase 5.1.0
  • Xcode 14.2

已尝试:

  1. 确认Bundle ID与App Store Connect一致
  2. 检查了Capabilities中的App Sandbox和In-App Purchase选项
  3. 重新生成并配置了Merchant ID

问题:

  • 是否需要额外的iOS原生端配置?
  • 沙盒测试是否有特殊注意事项?
  • 是否有完整的iOS订阅集成流程参考?

更多关于Flutter插件in_app_purchase如何集成iOS订阅的实战教程也可以访问 https://www.itying.com/category-92-b0.html

2 回复

在Flutter项目中,集成in_app_purchase插件以支持iOS订阅:

  1. pubspec.yaml中添加依赖:in_app_purchase: ^latest_version
  2. 运行flutter pub get
  3. 在iOS项目的Info.plist中添加应用商店连接配置
  4. 在Xcode中启用In-App Purchase功能
  5. 编写代码初始化插件并处理订阅逻辑

注意:需配置App Store Connect中的订阅商品,并遵循苹果审核指南。

更多关于Flutter插件in_app_purchase如何集成iOS订阅的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter应用中集成in_app_purchase插件处理iOS订阅,步骤如下:

1. 添加依赖

pubspec.yaml 中添加:

dependencies:
  in_app_purchase: ^3.1.7

运行 flutter pub get

2. iOS配置

  • 在Xcode中启用In-App Purchase功能(Target → Signing & Capabilities → +Capability → In-App Purchase)
  • 在App Store Connect中创建订阅商品(需填写产品ID、价格、订阅周期等)

3. 初始化与连接

import 'package:in_app_purchase/in_app_purchase.dart';

// 检查可用性
final bool available = await InAppPurchase.instance.isAvailable();
if (!available) {
  // 处理不支持应用内购买的情况
}

// 监听购买更新
final Stream<List<PurchaseDetails>> purchaseUpdates = 
    InAppPurchase.instance.purchaseStream;

StreamSubscription<List<PurchaseDetails>> _subscription = 
    purchaseUpdates.listen(_handlePurchaseUpdate);

4. 获取商品信息

// 使用在App Store Connect中设置的产品ID
const Set<String> _productIds = {'subscription_monthly', 'subscription_yearly'};

// 查询商品
ProductDetailsResponse response = 
    await InAppPurchase.instance.queryProductDetails(_productIds);

if (response.notFoundIDs.isNotEmpty) {
  print('未找到商品: ${response.notFoundIDs}');
}

List<ProductDetails> products = response.productDetails;

5. 发起购买

// 购买订阅(自动处理订阅替换)
final PurchaseParam purchaseParam = PurchaseParam(
  productDetails: productDetails,
);

InAppPurchase.instance.buyConsumable(
  purchaseParam: purchaseParam,
);

6. 处理购买结果

void _handlePurchaseUpdate(List<PurchaseDetails> purchaseDetailsList) {
  for (PurchaseDetails purchaseDetails in purchaseDetailsList) {
    if (purchaseDetails.status == PurchaseStatus.purchased) {
      // 验证收据并解锁内容
      _verifyPurchase(purchaseDetails);
    } else if (purchaseDetails.status == PurchaseStatus.error) {
      // 处理错误
      _handleError(purchaseDetails.error!);
    }
    
    // 完成交易(重要!)
    if (purchaseDetails.pendingCompletePurchase) {
      InAppPurchase.instance.completePurchase(purchaseDetails);
    }
  }
}

7. 恢复购买

// 用于用户切换设备时恢复订阅
InAppPurchase.instance.restorePurchases();

重要提示:

  • 在App Store Connect中正确配置订阅商品和定价
  • 服务器端验证收据以确保交易安全
  • 测试时使用Sandbox环境,不要使用真实账户
  • 处理订阅状态变化和续期逻辑

完成以上步骤后,即可在iOS应用中实现订阅功能。记得遵循App Store审核指南的相关规定。

回到顶部