Flutter应用内购买插件flutter_onestore_inapp的使用

发布于 1周前 作者 vueper 来自 Flutter

Flutter应用内购买插件flutter_onestore_inapp的使用

flutter_onestore_inapp

GitHub CI GitHub release (with filter) Pub Version (including pre-releases) Pub Points

这是一个用于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

1 回复

更多关于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插件来实现应用内购买功能。如果你有更具体的需求或遇到问题,可以进一步细化代码或查阅插件的官方文档。

回到顶部