Flutter如何实现应用内购
在Flutter中实现应用内购时,具体需要哪些步骤?是否必须使用官方插件(如in_app_purchase)?如何处理不同平台(iOS/Android)的支付差异?测试阶段如何模拟交易流程?遇到支付状态不一致或回调失败时该如何排查?希望有经验的开发者能分享完整流程和常见坑点。
2 回复
Flutter应用内购可通过in_app_purchase插件实现。步骤包括:配置商店后台、添加依赖、初始化插件、查询商品、发起购买并处理交易结果。需注意iOS和Android平台差异,并遵循各自审核规则。
更多关于Flutter如何实现应用内购的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中实现应用内购,主要使用官方推荐的 in_app_purchase 插件。以下是实现步骤和关键代码示例:
1. 添加依赖
在 pubspec.yaml 中添加:
dependencies:
in_app_purchase: ^3.1.7
2. 配置应用商店
- Android:在Google Play Console中添加商品,并在应用中配置结算权限。
- iOS:在App Store Connect中创建应用内购买项目,并在Xcode中启用In-App Purchase功能。
3. 初始化连接
import 'package:in_app_purchase/in_app_purchase.dart';
final InAppPurchase _inAppPurchase = InAppPurchase.instance;
void initInAppPurchase() {
_inAppPurchase.isAvailable().then((available) {
if (available) {
// 连接应用商店成功
}
});
}
4. 获取商品信息
Future<void> loadProducts() async {
const Set<String> _kProductIds = {'product1', 'product2'};
final ProductDetailsResponse response =
await _inAppPurchase.queryProductDetails(_kProductIds);
if (response.notFoundIDs.isNotEmpty) {
// 处理未找到的商品
}
List<ProductDetails> products = response.productDetails;
}
5. 发起购买
Future<void> buyProduct(ProductDetails product) async {
final PurchaseParam purchaseParam = PurchaseParam(
productDetails: product,
);
await _inAppPurchase.buyConsumable(purchaseParam: purchaseParam);
}
6. 监听购买状态
StreamSubscription<List<PurchaseDetails>> _subscription;
void listenToPurchase() {
_subscription = _inAppPurchase.purchaseStream.listen(
(purchaseDetailsList) {
for (var purchaseDetails in purchaseDetailsList) {
if (purchaseDetails.status == PurchaseStatus.purchased) {
// 验证收据并发放商品
_verifyPurchase(purchaseDetails);
}
}
},
);
}
void _verifyPurchase(PurchaseDetails purchaseDetails) {
// 验证交易(建议通过服务器验证)
// 验证成功后调用 completePurchase
_inAppPurchase.completePurchase(purchaseDetails);
}
7. 恢复购买(iOS)
_inAppPurchase.restorePurchases();
注意事项:
- 务必在服务器端验证交易收据,防止欺诈
- 正确处理网络中断和购买失败情况
- 遵循各平台的设计指南
- 测试时使用沙盒环境
建议参考官方文档获取最新实现细节和最佳实践。

