Flutter应用内购买消费插件consume_inapp_purchase的使用

Flutter应用内购买消费插件consume_inapp_purchase的使用

consume_inapp_purchase 是一个为 Flutter 应用程序提供简单方法来处理应用内购买消费的插件。它简化了对可消耗购买的处理,确保在购买被确认后能够正确消费。

特性

  • 处理可消耗的应用内购买。
  • 支持 Android 和 iOS 平台。
  • 简单且直观的 API 供 Flutter 开发者使用。

安装

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

dependencies:
  consume_inapp_purchase: ^1.0.0

然后运行以下命令:

flutter pub get

使用

导入插件

import 'package:consume_inapp_purchase/consume_inapp_purchase.dart';

消费购买

要消费一个购买,调用带有购买令牌的 consumePurchase 方法。

Future<void> consumePurchase() async {
    String consumeStatus;
    try {
      consumeStatus = await _consumeInappPurchasePlugin.consumePurchase() ??
          'No purchase found.';
    } on PlatformException {
      consumeStatus = 'Failed to consume purchase.';
    }
    debugPrint(consumeStatus);
    if (!mounted) return;
}

示例

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

import 'package:flutter/services.dart';
import 'package:consume_inapp_purchase/consume_inapp_purchase.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _consumeInappPurchasePlugin = ConsumeInappPurchase();

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  Future<void> consumePurchase() async {
    String consumeStatus;
    try {
      consumeStatus = await _consumeInappPurchasePlugin.consumePurchase() ??
          'No purchase found.';
    } on PlatformException {
      consumeStatus = 'Failed to consume purchase.';
    }
    debugPrint(consumeStatus);
    if (!mounted) return;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Column(
          children: [
            ElevatedButton(
              onPressed: consumePurchase,
              child: const Text('消费购买'),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


在Flutter中,consume_inapp_purchase 并不是一个官方或广泛使用的插件。实际上,Flutter 官方推荐的插件是 in_app_purchase,它提供了对应用内购买的支持,包括消费型和非消费型商品的处理。

如果你需要在应用内购买中处理消费型商品(即可重复购买的商品),你可以使用 in_app_purchase 插件来实现。以下是如何使用 in_app_purchase 插件来处理消费型商品的步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  in_app_purchase: ^3.0.6  # 请使用最新版本

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

2. 初始化插件

在你的应用启动时,初始化 in_app_purchase 插件:

import 'package:in_app_purchase/in_app_purchase.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await InAppPurchase.instance.isAvailable();  // 检查应用内购买是否可用
  runApp(MyApp());
}

3. 查询商品信息

在应用内购买之前,你需要查询商品信息:

final Set<String> _kProductIds = {'com.example.product1', 'com.example.product2'};

Future<void> _fetchProducts() async {
  ProductDetailsResponse response = await InAppPurchase.instance.queryProductDetails(_kProductIds);
  if (response.notFoundIDs.isNotEmpty) {
    print('未找到的商品: ${response.notFoundIDs}');
  }
  List<ProductDetails> products = response.productDetails;
  // 显示商品信息
}

4. 发起购买

当用户选择购买某个商品时,你可以发起购买请求:

Future<void> _buyProduct(ProductDetails product) async {
  final PurchaseParam purchaseParam = PurchaseParam(productDetails: product);
  await InAppPurchase.instance.buyConsumable(purchaseParam: purchaseParam);
}

5. 处理购买结果

你需要监听购买结果,并在购买成功后消费商品:

StreamSubscription<List<PurchaseDetails>> _subscription;

@override
void initState() {
  super.initState();
  _subscription = InAppPurchase.instance.purchaseStream.listen((purchaseDetailsList) {
    _handlePurchase(purchaseDetailsList);
  });
}

void _handlePurchase(List<PurchaseDetails> purchaseDetailsList) {
  purchaseDetailsList.forEach((purchaseDetails) async {
    if (purchaseDetails.status == PurchaseStatus.purchased) {
      // 购买成功,消费商品
      await InAppPurchase.instance.consumePurchase(purchaseDetails);
      // 处理购买逻辑,例如给用户发放奖励
    } else if (purchaseDetails.status == PurchaseStatus.error) {
      // 处理购买失败的情况
    }
  });
}

@override
void dispose() {
  _subscription.cancel();
  super.dispose();
}

6. 消费商品

对于消费型商品,你需要在购买成功后调用 consumePurchase 方法,以便用户可以再次购买该商品:

await InAppPurchase.instance.consumePurchase(purchaseDetails);
回到顶部