flutter如何实现inapppurchase内购
在Flutter中如何正确实现In-App Purchase(应用内购)功能?我在集成in_app_purchase插件时遇到了配置问题,特别是Google Play和App Store的凭证设置不太清楚。想请教:
- 如何配置iOS的沙盒测试环境和Android的License Key?
- 如何处理订阅类型的商品和一次性购买商品?
- 有没有完整的购买流程代码示例(包括监听购买状态和验证凭证)?
- 测试时常见的"无法连接商店"错误该如何排查?
目前按照官方文档操作总在商品加载环节失败,希望能分享具体的实现经验。
2 回复
Flutter实现应用内购可使用官方插件in_app_purchase。步骤:
- 添加依赖到
pubspec.yaml。 - 配置iOS和Android的商店设置。
- 初始化连接并获取商品列表。
- 监听购买流程,处理购买结果。
- 验证收据并交付商品。
更多关于flutter如何实现inapppurchase内购的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在 Flutter 中实现应用内购买(In-App Purchase, IAP)可以使用 in_app_purchase 官方插件。以下是实现步骤和示例代码:
步骤
-
添加依赖
在pubspec.yaml中添加:dependencies: in_app_purchase: ^3.1.16 -
配置应用商店
- Android:在 Google Play Console 中创建商品并上传签名的 APK。
- iOS:在 App Store Connect 中设置商品,并在 Xcode 中启用 IAP 功能。
-
初始化并监听购买流
使用InAppPurchase.instance监听购买状态和商品详情。
示例代码
import 'package:in_app_purchase/in_app_purchase.dart';
class InAppPurchaseService {
final InAppPurchase _inAppPurchase = InAppPurchase.instance;
late StreamSubscription<List<PurchaseDetails>> _subscription;
void initialize() {
// 监听购买状态
_subscription = _inAppPurchase.purchaseStream.listen(
_handlePurchaseUpdate,
onDone: () => _subscription.cancel(),
onError: (error) => print("购买流错误: $error"),
);
}
// 获取商品信息
Future<void> loadProducts() async {
const Set<String> productIds = {'product1', 'product2'};
ProductDetailsResponse response = await _inAppPurchase.queryProductDetails(productIds);
if (response.notFoundIDs.isNotEmpty) {
print("未找到商品: ${response.notFoundIDs}");
}
List<ProductDetails> products = response.productDetails;
// 显示商品列表(例如更新UI)
}
// 处理购买
void purchase(ProductDetails product) {
final PurchaseParam purchaseParam = PurchaseParam(productDetails: product);
_inAppPurchase.buyConsumable(purchaseParam: purchaseParam); // 消耗型商品
}
// 处理购买结果
void _handlePurchaseUpdate(List<PurchaseDetails> purchases) {
for (PurchaseDetails purchase in purchases) {
if (purchase.status == PurchaseStatus.purchased) {
// 验证收据(推荐通过后端验证)
_deliverProduct(purchase); // 发放商品
_inAppPurchase.completePurchase(purchase); // 确认完成
}
}
}
void _deliverProduct(PurchaseDetails purchase) {
// 根据 purchase.productID 发放商品(如解锁功能、增加金币等)
print("已购买: ${purchase.productID}");
}
void dispose() {
_subscription.cancel();
}
}
注意事项
- 验证收据:为防止欺诈,应在服务器端验证购买凭证(Android 使用 Google API,iOS 使用 App Store 验证)。
- 商品类型:区分消耗型(如金币)、非消耗型(如永久功能)和订阅型商品。
- UI 集成:结合 Flutter 界面展示商品列表和购买按钮。
- 测试:使用沙盒环境(iOS)和内部测试(Android)进行购买测试。
通过以上步骤,即可在 Flutter 应用中实现内购功能。

