Flutter应用内购买插件flutter_onestore_inapp的使用
Flutter应用内购买插件flutter_onestore_inapp的使用
flutter_onestore_inapp
这是一个用于ONE store In-App Purchase的Flutter插件。
更多信息,请参阅 Developer Center。
开始使用
ONE store IAP预准备
在开始之前,您需要完成以下步骤:
安装
添加包
- 使用Flutter命令行添加依赖:
$ flutter pub add flutter_onestore_inapp
- 在
pubspec.yaml
文件中添加依赖:
dependencies:
flutter_onestore_inapp: ^0.3.0
- 点击’pub get’下载包或在命令行运行
flutter pub get
。
添加到build.gradle
- 将maven地址添加到项目的
build.gradle
中:
allprojects {
repositories {
maven { url 'https://repo.onestore.net/repository/onestore-sdk-public' }
}
}
修改AndroidManifest.xml
- 如果目标SDK版本为30(OS 11)或更高,则必须添加以下
<queries>
以确保In-App库正常工作:
<manifest>
...
<queries>
<intent>
<action android:name="com.onestore.ipc.iap.IapService.ACTION" />
</intent>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="onestore" />
</intent>
</queries>
...
<application>
...
</application>
</manifest>
使用方法
导入并使用该插件:
import 'package:flutter_onestore_inapp/flutter_onestore_inapp.dart';
您可以参考以下链接了解更多使用方法:
Android Proguard 规则
由于已经混淆并在aar中,所以需要将包添加到proguard规则中:
# Core proGuard rules
-keep class com.gaa.sdk.base.** { *; }
-keep class com.gaa.sdk.auth.** { *; }
# Purchasing proGuard rules
-keep class com.gaa.sdk.iap.** { *; }
# Licensing proGuard rules
-keep class com.onestore.extern.licensing.** { *; }
注意事项
此插件使用了json_serializable
来处理平台层与Dart之间的多个数据结构。修改任何序列化数据结构后,通过运行以下命令重新生成序列化器:
flutter packages pub run build_runner build --delete-conflicting-outputs
或者,如果您希望监视文件系统中的更改,可以运行:
flutter packages pub run build_runner watch --delete-conflicting-outputs
示例代码
以下是使用flutter_onestore_inapp
的一个简单示例应用:
import 'package:flutter/material.dart';
import 'package:provider/provider.dart';
import 'purchase_view_model.dart';
import 'res/theme.dart';
import 'view/details/subscription_detail_page.dart';
import 'view/home/home_page.dart';
import 'view/license/check_license_page.dart';
void main() {
WidgetsFlutterBinding.ensureInitialized();
runApp(
// 注册用于ChangeNotifier的Provider。
ChangeNotifierProvider(
create: (context) => PurchaseViewModel(),
child: const MyApp(),
));
}
class MyApp extends StatelessWidget {
const MyApp({Key? key}) : super(key: key);
@override
Widget build(BuildContext context) {
return MaterialApp(
theme: ThemeData(
primarySwatch: Colors.blue,
textTheme: const TextTheme(
displayLarge: AppThemes.titleTextTheme,
displayMedium: AppThemes.bodyPrimaryTextTheme,
displaySmall: AppThemes.bodyPrimaryTextTheme)),
// 主页面
home: const HomePage(),
onGenerateRoute: (settings) => generatedRoutes(settings));
}
}
Route<dynamic>? generatedRoutes(RouteSettings settings) {
switch (settings.name) {
case '/subscription/detail':
final args = settings.arguments as Map<String, dynamic>;
return MaterialPageRoute(builder: (context) {
return SubscriptionDetailPage(
productId: args['productId'],
);
});
case '/check/license':
return MaterialPageRoute(builder: (context) => const CheckLicensePage());
default:
return null;
}
}
这个示例展示了如何初始化和配置一个包含内购功能的Flutter应用,包括设置主题、主页以及路由处理。
更多关于Flutter应用内购买插件flutter_onestore_inapp的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter应用内购买插件flutter_onestore_inapp的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter应用中使用flutter_onestore_inapp
插件来实现应用内购买的代码示例。这个插件允许你轻松集成Google Play和App Store的应用内购买功能。
1. 添加依赖
首先,在你的pubspec.yaml
文件中添加flutter_onestore_inapp
依赖:
dependencies:
flutter:
sdk: flutter
flutter_onestore_inapp: ^最新版本号 # 请替换为最新版本号
然后运行flutter pub get
来安装依赖。
2. 配置iOS和Android
iOS
- 确保你的Xcode项目已经配置了应用内购买。
- 在Xcode中,选择你的项目目标,前往“Signing & Capabilities”标签页,启用“In-App Purchases”功能。
Android
- 在你的
android/app/build.gradle
文件中,确保你已经配置了Google Play服务的依赖(通常这是自动处理的,但检查一下是个好主意)。 - 你需要在Google Play Console中设置你的应用内购买商品。
3. 初始化插件并获取产品信息
在你的Flutter应用中,你需要初始化flutter_onestore_inapp
插件并获取产品信息。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:flutter_onestore_inapp/flutter_onestore_inapp.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late OneStoreInApp _oneStoreInApp;
@override
void initState() {
super.initState();
_initOneStoreInApp();
}
Future<void> _initOneStoreInApp() async {
_oneStoreInApp = OneStoreInApp();
// 初始化插件,通常在应用启动时调用一次
await _oneStoreInApp.init();
// 获取产品信息
List<String> productIds = ['your_product_id_1', 'your_product_id_2']; // 替换为你的产品ID
try {
List<Product> products = await _oneStoreInApp.getProducts(productIds);
// 处理获取到的产品信息
print('Products: $products');
} catch (e) {
print('Failed to get products: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter In-App Purchase Example'),
),
body: Center(
child: Text('Initializing...'), // 这里可以添加购买按钮和其他UI元素
),
),
);
}
}
4. 处理购买
接下来,你可以添加一个按钮来处理购买流程。以下是一个简单的购买示例:
// 在_MyAppState类中添加购买逻辑
class _MyAppState extends State<MyApp> {
// ... existing code ...
Future<void> _purchaseProduct(String productId) async {
try {
Purchase purchase = await _oneStoreInApp.buyProduct(productId);
// 处理购买结果
if (purchase.status == PurchaseStatus.purchased) {
print('Successfully purchased: ${purchase.productId}');
// 这里可以处理购买后的逻辑,比如解锁功能或更新UI
} else {
print('Purchase failed or pending: ${purchase.status}');
}
} catch (e) {
print('Purchase error: $e');
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter In-App Purchase Example'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: () => _purchaseProduct('your_product_id_1'), // 替换为你的产品ID
child: Text('Purchase Product 1'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () => _purchaseProduct('your_product_id_2'), // 替换为你的产品ID
child: Text('Purchase Product 2'),
),
],
),
),
),
);
}
}
注意事项
- 确保你已经在Google Play Console和App Store Connect中正确配置了应用内购买商品。
- 测试购买时,请使用测试账户以避免真实费用。
- 处理购买结果时,注意检查购买状态,并适当处理用户取消、购买失败等情况。
这个示例应该能帮助你开始在Flutter应用中使用flutter_onestore_inapp
插件来实现应用内购买功能。如果你有更具体的需求或遇到问题,可以进一步细化代码或查阅插件的官方文档。