Flutter购买管理插件purchases_flutter的使用

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

Flutter购买管理插件purchases_flutter的使用

RevenueCat

purchases_flutter简介

purchases_flutterRevenueCat订阅和购买跟踪系统的客户端。它是一个开源框架,为StoreKitGoogle Play Billing和RevenueCat后端提供了一个包装器,使在Flutter中实现应用内订阅变得容易 - 包括收据验证和状态跟踪!

特性

标识 描述
服务器端收据验证
➡️ Webhooks - 增强的服务器到服务器通信,包括购买、续订、取消等事件
🎯 订阅状态跟踪 - 知道用户是否订阅,无论他们在iOS还是Android上
📊 分析 - 自动计算转换率、月经常性收入(MRR)和流失率等指标
📝 在线文档SDK参考保持最新
🔀 集成 - 轻松发送购买数据到你需要的地方,超过十几个集成选项
💯 维护良好 - 频繁发布
📮 支持优秀 - 帮助中心

安装

要使用此插件,请将purchases_flutter作为依赖项添加到您的pubspec.yaml文件中。

要求

purchases_flutter需要Xcode 14.0+,并要求最低目标版本为iOS 13.0+/Android SDK 21+(Android 5.0+)。

SDK参考

我们的完整SDK参考可以在这里找到:SDK Reference

入门指南

更多详细信息,请访问我们的完整文档:官方文档

示例代码

我们的一些示例项目位于revenuecat_examples中。

MagicWeather

该项目是使用purchases_flutter进行订阅应用的最佳展示。

Purchase Tester

另一个展示了如何使用purchases_flutter的应用,并用于集成测试。

示例Demo

下面是一个简单的示例,展示了如何在Flutter应用程序中使用purchases_flutter来初始化RevenueCat并处理购买。

pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  purchases_flutter: ^3.1.0 # 请根据实际情况调整版本号

main.dart

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化RevenueCat
  await Purchases.setup("YOUR_API_KEY");

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @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, required this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  bool _isPurchased = false;

  void _makePurchase() async {
    try {
      // 获取可用的产品
      Offerings offerings = await Purchases.getOfferings();
      if (offerings.current != null) {
        Product product = offerings.current!.monthly!;
        // 购买产品
        await Purchases.purchasePackage(product);
        setState(() {
          _isPurchased = true;
        });
      } else {
        print("No available offerings");
      }
    } catch (e) {
      print("Error making purchase: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text(widget.title),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'You have purchased: $_isPurchased',
            ),
            ElevatedButton(
              onPressed: _makePurchase,
              child: Text('Make Purchase'),
            ),
          ],
        ),
      ),
    );
  }
}

在这个例子中,我们首先在main()函数中初始化了RevenueCat,然后在_MyHomePageState类中的_makePurchase方法中实现了购买逻辑。通过调用Purchases.getOfferings()获取当前提供的产品列表,并尝试购买其中的一个产品(例如月度订阅)。如果购买成功,则更新UI以反映购买状态。

请注意,您需要替换YOUR_API_KEY为您从RevenueCat获取的实际API密钥。


希望这能帮助您理解如何使用`purchases_flutter`插件在Flutter应用中管理购买和订阅。如果您有任何问题或需要进一步的帮助,请随时提问!

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

1 回复

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


当然,以下是如何在Flutter项目中集成和使用purchases_flutter插件的详细步骤,包括一些代码示例。purchases_flutter插件通常用于处理应用内购买(In-App Purchases, IAPs),支持多种支付平台如Apple App Store和Google Play Store。

步骤 1:添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  purchases_flutter: ^x.y.z  # 请替换为最新版本号

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

步骤 2:配置平台特定设置

iOS 配置

  1. App Store Connect: 确保你已经在App Store Connect中配置了所有你需要的应用内购买项目。

  2. Info.plist: 在你的ios/Runner/Info.plist文件中,添加以下键和值来启用应用内购买:

<key>SKPaymentQueueClientApplicationIdentifier</key>
<string>你的App的App ID</string>

你的App的App ID替换为你的实际App ID(例如com.yourcompany.yourapp)。

Android 配置

  1. Google Play Console: 确保你已经在Google Play Console中配置了所有你需要的应用内购买项目。

  2. build.gradle: 在你的android/app/build.gradle文件中,确保你有正确的签名配置,并且已经添加了Billing Library的依赖(虽然purchases_flutter可能已经包含了必要的依赖)。

android {
    ...
    defaultConfig {
        ...
        applicationId "com.yourcompany.yourapp"
        ...
    }
    ...
    signingConfigs {
        release {
            // 你的签名配置
        }
    }
    buildTypes {
        release {
            signingConfig signingConfigs.release
            ...
        }
    }
}

步骤 3:初始化Purchases SDK

在你的Flutter应用中,你需要初始化Purchases对象。这通常在应用的主入口文件中进行,比如lib/main.dart

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

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 初始化Purchases SDK
    Purchases.configure({
      key: "你的RevenueCat公钥",
      observerMode: true, // 设置为true以启用观察者模式(测试时)
      debugLogsEnabled: true, // 设置为true以启用调试日志(测试时)
    });

    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

你的RevenueCat公钥替换为你的实际RevenueCat公钥。

步骤 4:实现购买逻辑

在你的Flutter应用中实现购买逻辑。以下是一个简单的例子,展示如何获取产品信息和进行购买。

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

class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  String _productTitle = "";
  bool _isPurchased = false;

  @override
  void initState() {
    super.initState();
    _fetchProducts();
  }

  Future<void> _fetchProducts() async {
    try {
      // 获取产品信息
      List<Product> products = await Purchases.getProducts(["your_product_identifier"]);
      if (products.isNotEmpty) {
        setState(() {
          _productTitle = products.first.title;
        });
      }
    } catch (error) {
      print("Error fetching products: $error");
    }
  }

  Future<void> _purchaseProduct() async {
    try {
      // 购买产品
      PurchaserInfo purchaserInfo = await Purchases.purchaseProduct("your_product_identifier");
      if (purchaserInfo.entitlements.all["your_entitlement_key"]?.isActive == true) {
        setState(() {
          _isPurchased = true;
        });
      }
    } catch (error) {
      print("Error purchasing product: $error");
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Purchases Flutter Example"),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              "Product: $_productTitle",
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _isPurchased ? null : _purchaseProduct,
              child: Text("Purchase"),
            ),
            SizedBox(height: 20),
            Text(
              _isPurchased ? "Purchased" : "Not Purchased",
              style: TextStyle(fontSize: 20, fontWeight: FontWeight.bold),
            ),
          ],
        ),
      ),
    );
  }
}

your_product_identifieryour_entitlement_key替换为你的实际产品标识符和权益键。

这个示例展示了如何初始化Purchases SDK,获取产品信息,以及处理购买逻辑。你可以根据实际需求进一步扩展和定制这些代码。

回到顶部