Flutter插件in_app_purchase如何集成storekit

在Flutter项目中集成in_app_purchase插件时,如何正确配置iOS端的StoreKit?具体步骤是什么?是否需要额外设置Entitlements文件?遇到"StoreKit configuration file not found"错误该如何解决?

2 回复

集成in_app_purchase插件的StoreKit步骤:

  1. 在pubspec.yaml添加依赖:
dependencies:
  in_app_purchase: ^3.1.7
  1. iOS配置:
  • 在Xcode中启用In-App Purchase功能
  • 配置App Store Connect中的商品
  1. 初始化:
final InAppPurchase _inAppPurchase = InAppPurchase.instance;
  1. 监听购买状态和恢复购买功能

注意:需要真机测试,模拟器不支持StoreKit。

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


在Flutter中集成in_app_purchase插件以支持iOS StoreKit,请按照以下步骤操作:

1. 添加依赖

pubspec.yaml文件中添加依赖:

dependencies:
  in_app_purchase: ^3.1.10

运行 flutter pub get 安装。

2. iOS配置

  • 启用应用内购买:在Xcode中,选择项目 → Signing & Capabilities → 点击“+ Capability” → 添加 In-App Purchase
  • 设置App Store Connect:在App Store Connect中创建应用内购买项目(如消耗型、非消耗型、订阅等),并确保状态为“已批准”。

3. 初始化与连接

在Flutter代码中初始化并连接到App Store:

import 'package:in_app_purchase/in_app_purchase.dart';

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

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

// 开始监听
StreamSubscription<List<PurchaseDetails>> subscription = 
    purchaseUpdates.listen((purchaseDetailsList) {
  _handlePurchases(purchaseDetailsList);
});

4. 获取商品信息

加载商品列表:

const Set<String> productIds = {'product1', 'product2'}; // 替换为你的商品ID
ProductDetailsResponse response = 
    await InAppPurchase.instance.queryProductDetails(productIds);
if (response.notFoundIDs.isNotEmpty) {
  // 处理未找到的商品
}
List<ProductDetails> products = response.productDetails;

5. 发起购买

使用buyConsumablebuyNonConsumable方法(根据商品类型):

final PurchaseParam purchaseParam = PurchaseParam(
  productDetails: productDetails, // 从queryProductDetails获取
);
// 对于消耗型商品
InAppPurchase.instance.buyConsumable(purchaseParam: purchaseParam);
// 对于非消耗型商品
InAppPurchase.instance.buyNonConsumable(purchaseParam: purchaseParam);

6. 处理购买结果

在监听器中验证购买:

void _handlePurchases(List<PurchaseDetails> purchases) {
  for (var purchase in purchases) {
    if (purchase.status == PurchaseStatus.purchased) {
      // 验证收据(建议通过服务器验证)
      _verifyPurchase(purchase);
    }
    if (purchase.pendingCompletePurchase) {
      await InAppPurchase.instance.completePurchase(purchase);
    }
  }
}

7. 恢复购买

对于非消耗型商品或订阅,提供恢复功能:

InAppPurchase.instance.restorePurchases();

注意事项

  • 沙盒测试:使用iOS沙盒环境测试,确保使用测试账号。
  • 收据验证:在生产环境中,通过后端服务器验证收据以确保安全性。
  • 配置商品:确保App Store Connect中的商品状态正确,且与代码中的ID匹配。

完成以上步骤后,即可在Flutter应用中通过StoreKit处理应用内购买。

回到顶部