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
已尝试:
- 确认Bundle ID与App Store Connect一致
- 检查了Capabilities中的App Sandbox和In-App Purchase选项
- 重新生成并配置了Merchant ID
问题:
- 是否需要额外的iOS原生端配置?
- 沙盒测试是否有特殊注意事项?
- 是否有完整的iOS订阅集成流程参考?
更多关于Flutter插件in_app_purchase如何集成iOS订阅的实战教程也可以访问 https://www.itying.com/category-92-b0.html
2 回复
在Flutter项目中,集成in_app_purchase插件以支持iOS订阅:
- 在
pubspec.yaml中添加依赖:in_app_purchase: ^latest_version - 运行
flutter pub get - 在iOS项目的
Info.plist中添加应用商店连接配置 - 在Xcode中启用In-App Purchase功能
- 编写代码初始化插件并处理订阅逻辑
注意:需配置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审核指南的相关规定。

