Flutter内购管理插件purchases的使用

Flutter内购管理插件purchases的使用

简介

purchases 是一个扩展插件,基于 purchases_flutter 插件,允许获取每个平台上的购买信息。

Purchases.apiKey = '添加你的API密钥';
Purchases.userId = '添加用户ID';

Purchases.purchasesInfo.addListener((info) {
    // 对于支持Revenue Cat原生SDK(Android、iOS 和 macOS)的平台,
    // 每当有新的更改时,此信息将被更新。
    // 对于不支持官方插件的平台,此信息仅在设置用户ID后检索一次。
});

要使用原生SDK端点,可以检查:

if(Purchases.sdkSupported) {
    ///...
}

完整示例代码

以下是一个完整的示例代码,展示了如何在Flutter应用中使用purchases插件进行内购管理。

import 'package:flutter/material.dart';
import 'package:purchases/purchases.dart';
import '.env.dart'; // 导入环境变量文件

void main() async {
  WidgetsFlutterBinding.ensureInitialized(); // 确保Flutter绑定初始化
  Purchases.apiKey = kRevenueCatApiKey; // 设置API密钥
  runApp(MyApp()); // 运行应用
}

class MyApp extends StatelessWidget {
  // 这个小部件是你的应用的根
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo', // 应用标题
      theme: ThemeData(
        // 应用主题
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(title: 'Flutter Demo Home Page'), // 主页
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title; // 页面标题

  [@override](/user/override)
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  int _counter = 0; // 计数器

  void _incrementCounter() {
    setState(() {
      // 更新计数器并重新构建UI
      _counter++;
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title), // 设置标题
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center, // 垂直居中对齐
          children: [
            ValueListenableBuilder(
                valueListenable: Purchases.purchaserInfo, // 监听购买信息
                builder: (context, value, widget) {
                  return Text(
                    value.toString(), // 显示购买信息
                  );
                }),
            Text(
              '你已经点击了按钮这么多次:', // 提示文本
            ),
            Text(
              '$_counter', // 显示计数器值
              style: Theme.of(context).textTheme.headline4,
            ),
          ],
        ),
      ),
      floatingActionButton: FloatingActionButton(
        onPressed: _incrementCounter, // 按钮点击事件
        tooltip: '增加', // 提示文本
        child: Icon(Icons.add), // 图标
      ),
    );
  }
}

更多关于Flutter内购管理插件purchases的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter内购管理插件purchases的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


purchases_flutter 是一个用于管理应用内购买(In-App Purchases)的 Flutter 插件,它是由 RevenueCat 公司开发和维护的。RevenueCat 是一个提供应用内购买和订阅管理的平台,可以帮助开发者简化应用内购买和订阅的管理流程。

1. 集成 purchases_flutter 插件

首先,你需要在 pubspec.yaml 文件中添加 purchases_flutter 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  purchases_flutter: ^4.0.0

然后运行 flutter pub get 来安装依赖。

2. 初始化 purchases_flutter

在使用 purchases_flutter 之前,你需要在应用的启动时初始化它。通常,你可以在 main.dart 文件中进行初始化:

import 'package:flutter/material.dart';
import 'package:purchases_flutter/purchases_flutter.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Purchases
  await Purchases.setup('your_revenuecat_api_key');
  
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter In-App Purchases',
      home: HomeScreen(),
    );
  }
}

在这里,your_revenuecat_api_key 是你在 RevenueCat 平台上获取的 API 密钥。

3. 获取产品信息

你可以使用 Purchases.getOfferings() 方法来获取应用内购买的产品信息:

Future<void> fetchOfferings() async {
  try {
    final offerings = await Purchases.getOfferings();
    if (offerings.current != null) {
      // 显示当前可用的产品
      print(offerings.current!.availablePackages);
    }
  } catch (e) {
    print('Error fetching offerings: $e');
  }
}

4. 购买产品

用户可以选择购买某个产品。你可以使用 Purchases.purchasePackage() 方法来实现购买:

Future<void> purchasePackage(Package package) async {
  try {
    final purchaserInfo = await Purchases.purchasePackage(package);
    if (purchaserInfo.entitlements.active.isNotEmpty) {
      // 购买成功
      print('Purchase successful!');
    }
  } catch (e) {
    print('Error purchasing package: $e');
  }
}

5. 恢复购买

如果用户更换了设备或重新安装了应用,你可以使用 Purchases.restoreTransactions() 方法来恢复他们的购买:

Future<void> restorePurchases() async {
  try {
    final purchaserInfo = await Purchases.restoreTransactions();
    if (purchaserInfo.entitlements.active.isNotEmpty) {
      // 恢复购买成功
      print('Purchases restored!');
    }
  } catch (e) {
    print('Error restoring purchases: $e');
  }
}

6. 处理订阅状态

你可以通过 Purchases.addCustomerInfoUpdateListener() 来监听用户订阅状态的变化:

void listenToCustomerInfoUpdates() {
  Purchases.addCustomerInfoUpdateListener((purchaserInfo) {
    if (purchaserInfo.entitlements.active.isNotEmpty) {
      // 用户有有效的订阅
      print('User has active subscription');
    } else {
      // 用户没有有效的订阅
      print('User does not have active subscription');
    }
  });
}
回到顶部