【Flutter】App内购支付集成 Google和Apple支付和服务器验证全流程
warning:
这篇文章距离上次修改已过193天,其中的内容可能已经有所变动。
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:in_app_purchase/in_app_purchase.dart';
class InAppPurchasePage extends StatefulWidget {
@override
_InAppPurchasePageState createState() => _InAppPurchasePageState();
}
class _InAppPurchasePageState extends State<InAppPurchasePage> {
final InAppPurchase _inAppPurchase = InAppPurchase.instance;
List<ProductDetails> _products = [];
List<PurchaseDetails> _purchases = [];
bool _isLoading = false;
@override
void initState() {
super.initState();
_initProducts();
}
// 初始化产品列表
Future<void> _initProducts() async {
const List<String> productIds = ['product1', 'product2'];
Set<ProductDetails> products = await _inAppPurchase.bulkProductDetails(productIds);
_products = products.map((product) => product).toList();
}
// 处理购买
Future<void> _buyProduct(ProductDetails product) async {
PurchaseParam purchaseParam = PurchaseParam(productDetails: product);
if (_inAppPurchase.appStoreController != null) {
// 对于Apple支付,需要额外的处理步骤
final PurchaseResult result = await _inAppPurchase.buyProduct(purchaseParam);
if(result.status == PurchaseStatus.pending) {
// 处理等待状态,通常需要服务器验证
}
} else {
// Google支付流程
await _inAppPurchase.buyNonConsumable(purchaseParam: purchaseParam);
}
}
// 检查购买历史
Future<void> _fetchPurchases() async {
_purchases = await _inAppPurchase.getPurchaseHistory();
}
// 渲染UI
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('In-App Purchase'),
),
body: _isLoading ? Center(child: CircularProgressIndicator()) : ListView(
children: <Widget>[
..._products.map((product) => ListTile(
title: Text(product.title),
subtitle: Text('\$${product.price}'),
onTap: () => _buyProduct(product),
)),
..._purchases.map((purchase) => ListTile(
title: Text(purchase.productID),
subtitle: Text(purchase.transactionDate.toString()),
trailing: IconButton(
icon: Icon(Icons.delete),
onPressed: () async {
// 处理验证和服务器端的退订逻辑
},
),
)),
],
),
);
}
}
这个代码示例提供了一个简化的Flutter页面,用于展示如何使用in_app_purchase
插件来管理应用内购产
评论已关闭