Flutter谷歌内购插件purchasely_google的使用

Flutter 谷歌内购插件 Purchasely 的使用

[Purchasely]

Purchasely

Purchasely 是一个解决方案,可以简化在 App Store、Google Play Store 和 Huawei App Gallery 上集成和提升您的应用内购买和订阅功能。

安装

pubspec.yaml 文件中添加以下依赖项:

dependencies:
  purchasely_flutter: ^5.0.0

使用

以下是一个简单的示例,展示如何使用 Purchasely 插件进行谷歌内购:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomeScreen(),
    );
  }
}

class HomeScreen extends StatefulWidget {
  [@override](/user/override)
  _HomeScreenState createState() => _HomeScreenState();
}

class _HomeScreenState extends State<HomeScreen> {
  bool _configured = false;

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化 Purchasely
    _configurePurchasely();
  }

  Future<void> _configurePurchasely() async {
    // 启动 Purchasely
    _configured = await Purchasely.start(
      apiKey: '<YOUR_API_KEY>', // 替换为你的 API 密钥
      androidStores: ['Google'], // 指定安卓商店
      storeKit1: false, // 设置是否使用 StoreKit1
      logLevel: PLYLogLevel.error, // 设置日志级别
      runningMode: PLYRunningMode.full, // 设置运行模式
      userId: null, // 可以设置用户 ID
    );

    if (_configured) {
      // 显示内购界面
      _showInAppPurchase();
    } else {
      print("Purchasely 配置失败");
    }
  }

  Future<void> _showInAppPurchase() async {
    // 展示内购界面
    var result = await Purchasely.presentPresentationForPlacement(
        "<YOUR_PLACEMENT_ID>", // 替换为你的放置 ID
        isFullscreen: true); // 是否全屏显示

    // 处理结果
    switch (result.result) {
      case PLYPurchaseResult.cancelled:
        {
          print("用户取消了购买");
        }
        break;
      case PLYPurchaseResult.purchased:
        {
          print("用户购买了 ${result.plan?.name}"); // 打印购买计划名称
        }
        break;
      case PLYPurchaseResult.restored:
        {
          print("用户恢复了 ${result.plan?.name}"); // 打印恢复的计划名称
        }
        break;
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Purchasely 示例'),
      ),
      body: Center(
        child: Text(_configured ? "已配置 Purchasely" : "未配置 Purchasely"),
      ),
    );
  }
}

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

1 回复

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


purchasely_google 是一个用于在 Flutter 应用中实现 Google Play 内购的插件。它提供了简单易用的 API,帮助开发者快速集成和管理应用内购买功能。以下是使用 purchasely_google 插件的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  purchasely_google: ^latest_version

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

2. 初始化插件

在应用启动时,初始化 purchasely_google 插件。通常可以在 main.dartmain 函数中进行初始化。

import 'package:purchasely_google/purchasely_google.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Purchasely
  await PurchaselyGoogle.init(
    apiKey: 'YOUR_API_KEY',
    userId: 'USER_ID', // 可选
    logLevel: PurchaselyLogLevel.debug, // 可选
  );

  runApp(MyApp());
}

3. 获取产品信息

在应用内展示可购买的产品时,首先需要获取产品信息。

Future<void> fetchProducts() async {
  try {
    List<PurchaselyProduct> products = await PurchaselyGoogle.getProducts();
    // 处理产品信息
    products.forEach((product) {
      print('Product ID: ${product.productId}, Price: ${product.price}');
    });
  } catch (e) {
    print('Failed to fetch products: $e');
  }
}

4. 发起购买

当用户选择购买某个产品时,可以使用 purchaseProduct 方法发起购买。

Future<void> purchaseProduct(String productId) async {
  try {
    PurchaselyPurchaseResult result = await PurchaselyGoogle.purchaseProduct(productId);
    if (result.status == PurchaselyPurchaseStatus.purchased) {
      // 购买成功
      print('Purchase successful: ${result.purchaseDetails}');
    } else {
      // 购买失败或取消
      print('Purchase failed or cancelled: ${result.status}');
    }
  } catch (e) {
    print('Failed to purchase product: $e');
  }
}

5. 处理购买结果

购买完成后,可以根据购买结果更新应用状态或向用户展示相关信息。

6. 恢复购买

如果用户重新安装应用或更换设备,可能需要恢复之前的购买。

Future<void> restorePurchases() async {
  try {
    List<PurchaselyPurchaseDetails> purchases = await PurchaselyGoogle.restorePurchases();
    if (purchases.isNotEmpty) {
      // 恢复成功,处理购买信息
      purchases.forEach((purchase) {
        print('Restored purchase: ${purchase.productId}');
      });
    } else {
      // 没有可恢复的购买
      print('No purchases to restore');
    }
  } catch (e) {
    print('Failed to restore purchases: $e');
  }
}

7. 订阅管理

对于订阅产品,你可能需要检查订阅状态或处理订阅续订。

Future<void> checkSubscriptionStatus(String productId) async {
  try {
    PurchaselySubscriptionStatus status = await PurchaselyGoogle.getSubscriptionStatus(productId);
    if (status == PurchaselySubscriptionStatus.active) {
      // 订阅有效
      print('Subscription is active');
    } else {
      // 订阅无效或已过期
      print('Subscription is not active');
    }
  } catch (e) {
    print('Failed to check subscription status: $e');
  }
}

8. 处理生命周期

确保在应用生命周期中正确处理 purchasely_google 插件的生命周期事件。

class MyApp extends StatefulWidget {
  [@override](/user/override)
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
  [@override](/user/override)
  void initState() {
    super.initState();
    WidgetsBinding.instance.addObserver(this);
  }

  [@override](/user/override)
  void dispose() {
    WidgetsBinding.instance.removeObserver(this);
    super.dispose();
  }

  [@override](/user/override)
  void didChangeAppLifecycleState(AppLifecycleState state) {
    if (state == AppLifecycleState.resumed) {
      // 应用恢复时检查购买状态
      restorePurchases();
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Purchasely Google Example'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () => purchaseProduct('your_product_id'),
            child: Text('Purchase Product'),
          ),
        ),
      ),
    );
  }
}
回到顶部