Flutter如何接入苹果支付
在Flutter项目中如何正确接入苹果支付(IAP)?需要哪些配置步骤和依赖库?有没有详细的实现示例或常见问题解决方案?
2 回复
Flutter接入苹果支付需使用in_app_purchase插件。步骤如下:
- 配置App Store Connect,添加内购项目。
- 在Flutter项目中引入插件并初始化。
- 查询商品、发起购买并处理交易结果。
- 在iOS项目中开启In-App Purchase功能。
注意遵守苹果审核规则。
更多关于Flutter如何接入苹果支付的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中接入苹果支付(In-App Purchase)主要通过 in_app_purchase 官方插件实现。以下是详细步骤和示例代码:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
in_app_purchase: ^3.1.7
2. 配置iOS项目
- 在苹果开发者后台创建App ID并启用In-App Purchase功能
- 在Xcode中为项目添加支付能力:
Signing & Capabilities→+ Capability→In-App Purchase
3. 创建商品
在App Store Connect中添加商品:
- 进入App Store Connect → 我的App → 功能 → App内购买项目
- 创建消耗型/非消耗型/订阅型商品,记录商品ID
4. 实现支付逻辑
import 'package:in_app_purchase/in_app_purchase.dart';
class IAPManager {
final InAppPurchase _iap = InAppPurchase.instance;
late StreamSubscription<List<PurchaseDetails>> _subscription;
void initialize() {
// 监听购买状态
_subscription = _iap.purchaseStream.listen(
_handlePurchaseUpdate,
onDone: () => _subscription.cancel(),
);
}
Future<void> loadProducts() async {
const Set<String> _kIds = {'your_product_id'}; // 替换为你的商品ID
final ProductDetailsResponse response =
await _iap.queryProductDetails(_kIds);
if (response.notFoundIDs.isNotEmpty) {
print('未找到商品: ${response.notFoundIDs}');
}
List<ProductDetails> products = response.productDetails;
// 显示商品列表
}
Future<void> buyProduct(ProductDetails product) async {
final PurchaseParam purchaseParam = PurchaseParam(
productDetails: product,
);
await _iap.buyConsumable(purchaseParam: purchaseParam);
}
void _handlePurchaseUpdate(List<PurchaseDetails> purchases) {
for (PurchaseDetails purchase in purchases) {
if (purchase.status == PurchaseStatus.purchased) {
// 验证收据并发放商品
_verifyAndDeliver(purchase);
}
}
}
void _verifyAndDeliver(PurchaseDetails purchase) async {
// 向服务器验证收据(推荐)
// 本地验证(仅基础验证)
if (purchase.pendingCompletePurchase) {
await _iap.completePurchase(purchase);
}
}
void dispose() {
_subscription.cancel();
}
}
5. 服务器端验证(推荐)
- 获取收据数据:
purchase.verificationData.serverVerificationData - 发送到服务器验证真实性
- 苹果验证接口:
https://buy.itunes.apple.com/verifyReceipt
6. 测试注意事项
- 使用沙盒环境测试
- 创建测试账号时不要使用真实邮箱
- 在真机上测试,模拟器不支持支付
关键点:
- 商品状态需要先在App Store Connect配置为"准备提交"
- 必须使用真机测试
- 建议实现服务器端收据验证
- 正确处理各种购买状态(成功/失败/待处理)
完整实现建议参考官方文档:https://pub.dev/packages/in_app_purchase

