Flutter苹果应用内购买插件storekit2helper的使用
Flutter 苹果应用内购买插件 storekit2helper 的使用
storekit2
这是一个新的 Flutter 插件项目。
Getting Started(入门)
这个项目是 iOS Storekit 2 的实现。
USAGE(使用方法)
// 获取产品列表
var products = await Storekit2Helper.fetchProducts(["app_weekly", "app_yearly", "app_lifetime"]);
for (var p in products) {
print(p.productId + " - " + p.periodUnit + " " + p.periodValue.toString() + " " + p.type);
}
// 检查用户是否有有效的订阅
var hasActiveSubscription = await Storekit2Helper.hasActiveSubscription();
// 使用产品ID购买产品
Storekit2Helper.buyProduct("app_weekly", (success, transaction, errorMessage) {
print(success);
print(errorMessage);
print(transaction);
});
完整示例 Demo
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:storekit2helper/storekit2helper.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
final _storekit2Plugin = Storekit2Helper();
[@override](/user/override)
void initState() {
super.initState();
testPlugin();
}
Future<void> testPlugin() async {
// 获取产品列表
var products = await Storekit2Helper.fetchProducts(
["app_weekly", "app_yearly", "app_lifetime"]);
for (var p in products) {
print(p.productId +
" - " +
p.periodUnit +
" " +
p.periodValue.toString() +
" " +
p.type);
}
// 检查用户是否有有效的订阅
var hasActiveSubscription = await Storekit2Helper.hasActiveSubscription();
// 初始化插件
Storekit2Helper.initialize();
// 打印是否拥有有效订阅
print(await Storekit2Helper.hasActiveSubscription());
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('插件示例应用'),
),
body: Center(
child: Text('运行在: $_platformVersion'),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// 购买产品
Storekit2Helper.buyProduct(
"app_yearly", (success, transaction, errorMessage) {
print(success);
print(errorMessage);
print(transaction);
});
},
tooltip: '增加',
child: const Icon(Icons.add),
),
),
);
}
}
更多关于Flutter苹果应用内购买插件storekit2helper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
1 回复
更多关于Flutter苹果应用内购买插件storekit2helper的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用storekit2helper
插件来实现苹果应用内购买的代码示例。storekit2helper
是一个帮助处理StoreKit 2 API的Flutter插件,适用于iOS应用内购买。
步骤 1: 添加依赖
首先,在你的pubspec.yaml
文件中添加storekit2helper
依赖:
dependencies:
flutter:
sdk: flutter
storekit2helper: ^最新版本号 # 请替换为当前最新版本号
然后运行flutter pub get
来安装依赖。
步骤 2: 配置iOS项目
确保你的iOS项目已正确配置应用内购买。在Xcode中,你需要:
- 前往
Targets
->Capabilities
,启用In-App Purchase
。 - 在iTunes Connect中设置你的应用内购买产品。
步骤 3: 使用storekit2helper
进行购买
下面是一个简单的Flutter代码示例,展示如何使用storekit2helper
进行购买:
import 'package:flutter/material.dart';
import 'package:storekit2helper/storekit2helper.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late StoreKit2Helper _storeKit2Helper;
late List<SKProduct> _products;
@override
void initState() {
super.initState();
_storeKit2Helper = StoreKit2Helper();
// 请求产品信息
_requestProducts();
}
Future<void> _requestProducts() async {
try {
final List<String> productIdentifiers = [
'com.example.app.product1', // 替换为你的产品标识符
'com.example.app.product2', // 替换为你的产品标识符
];
_products = await _storeKit2Helper.fetchProducts(productIdentifiers);
setState(() {}); // 更新UI
} catch (e) {
print('Error fetching products: $e');
}
}
Future<void> _purchaseProduct(SKProduct product) async {
try {
final SKPaymentTransaction? transaction = await _storeKit2Helper.purchaseProduct(product);
if (transaction != null && transaction.transactionState == SKPaymentTransactionState.purchased) {
print('Product purchased successfully: ${product.productIdentifier}');
// 处理购买成功逻辑,例如解锁内容或发送服务器验证收据
} else if (transaction.transactionState == SKPaymentTransactionState.failed) {
print('Purchase failed: ${transaction.error?.localizedDescription ?? 'Unknown error'}');
} else if (transaction.transactionState == SKPaymentTransactionState.restored) {
print('Product restored successfully: ${product.productIdentifier}');
// 处理恢复购买逻辑
}
} catch (e) {
print('Error purchasing product: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('In-App Purchases'),
),
body: _products.isEmpty
? Center(child: CircularProgressIndicator())
: ListView.builder(
itemCount: _products.length,
itemBuilder: (context, index) {
final SKProduct product = _products[index];
return ListTile(
title: Text(product.localizedTitle),
subtitle: Text('\$${product.price.doubleValue}'),
trailing: ElevatedButton(
onPressed: () => _purchaseProduct(product),
child: Text('Buy'),
),
);
},
),
),
);
}
}
说明
- 请求产品信息:在
_requestProducts
方法中,我们使用产品标识符列表调用fetchProducts
方法来获取产品信息。 - 购买产品:在
_purchaseProduct
方法中,我们调用purchaseProduct
方法来购买指定的产品,并根据交易状态处理购买结果。 - UI展示:在
build
方法中,我们展示了一个简单的列表,其中每个列表项都是一个可购买的产品。点击“Buy”按钮将触发购买流程。
请确保替换示例代码中的产品标识符为你自己的产品标识符,并根据需要调整UI和逻辑。
注意事项
- 在实际应用中,你可能需要在服务器端验证购买收据,以确保购买的安全性和有效性。
- 对于恢复购买功能,你可以调用
_storeKit2Helper.restoreCompletedTransactions()
方法,并在处理交易状态时检查SKPaymentTransactionState.restored
状态。
希望这个示例对你有所帮助!