Flutter中如何使用in_app_purchase插件实现iOS和Android支付
我在Flutter项目中需要集成应用内支付功能,尝试使用in_app_purchase插件时遇到几个问题:1) 如何正确配置iOS的App Store Connect和Android的Google Play Console?2) 能否提供完整的订阅型商品购买代码示例?3) 处理支付结果时如何区分沙盒环境和生产环境?4) 遇到"无法连接到iTunes Store"的错误该如何排查?目前文档比较分散,希望有经验的朋友能分享具体实现步骤和注意事项。
2 回复
在Flutter中使用in_app_purchase插件实现支付:
- 添加依赖:
in_app_purchase: ^5.0.0 - 初始化:
InAppPurchase.instance.isAvailable() - 获取商品:
queryProductDetails() - 购买:
buyConsumable()或buyNonConsumable() - 监听购买状态:
purchaseStream
iOS需配置App Store Connect,Android需配置Google Play Console。
更多关于Flutter中如何使用in_app_purchase插件实现iOS和Android支付的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用in_app_purchase插件实现跨平台支付(iOS和Android)的步骤如下:
1. 添加依赖
在pubspec.yaml中添加:
dependencies:
in_app_purchase: ^3.1.15
运行flutter pub get。
2. 配置平台
Android
- 在Google Play Console中设置应用内商品。
- 在
android/app/src/main/AndroidManifest.xml中添加权限(通常自动添加)。
iOS
- 在App Store Connect中创建商品。
- 在Xcode中启用应用内购买功能:Signing & Capabilities → + Capability → In-App Purchase。
3. 初始化支付连接
import 'package:in_app_purchase/in_app_purchase.dart';
// 检查支付是否可用
bool available = await InAppPurchase.instance.isAvailable();
if (!available) {
// 处理设备不支持支付的情况
}
4. 获取商品信息
// 定义商品ID
const Set<String> _productIds = {'com.example.product1', 'com.example.product2'};
// 获取商品详情
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, // 从queryProductDetails获取
);
InAppPurchase.instance.buyConsumable(purchaseParam: purchaseParam);
// 监听购买结果
StreamSubscription<List<PurchaseDetails>> subscription = InAppPurchase.instance.purchaseStream.listen(
(purchaseDetailsList) {
for (var purchaseDetails in purchaseDetailsList) {
_verifyPurchase(purchaseDetails); // 验证购买
}
},
);
6. 验证和完成交易
void _verifyPurchase(PurchaseDetails purchaseDetails) async {
if (purchaseDetails.status == PurchaseStatus.purchased) {
// 向服务器验证收据(推荐)
bool valid = await _validateWithServer(purchaseDetails.verificationData);
if (valid) {
// 交付商品
_deliverProduct(purchaseDetails.productID);
// 完成交易
InAppPurchase.instance.completePurchase(purchaseDetails);
}
}
}
7. 恢复购买(仅iOS)
InAppPurchase.instance.restorePurchases();
注意事项
- 测试:
- Android使用内部测试轨道,iOS使用Sandbox环境。
- 安全:务必通过服务器验证收据,防止伪造。
- 订阅商品:使用
buyNonConsumable处理非消耗型商品。
通过以上步骤,即可在Flutter中实现iOS和Android的支付功能。

