flutter中如何使用in_app_purchase工具类

在Flutter项目中集成in_app_purchase插件时遇到问题,具体表现为:按照官方文档配置后,Android端始终无法获取商品列表,iOS测试正常。已确认billingClient连接状态为ready,但查询SKUDetails返回空列表。尝试过以下步骤:

  1. 在Google Play Console上传APK并发布到测试轨道
  2. 添加有效的授权测试账号
  3. 确保商品ID与后台配置完全一致
    是否需要额外处理Google Play的缓存机制?或是遗漏了某些必须的manifest配置?求完整的Android端实现示例,特别是BillingClient的初始化时机和错误处理逻辑。

更多关于flutter中如何使用in_app_purchase工具类的实战教程也可以访问 https://www.itying.com/category-92-b0.html

2 回复

在Flutter中使用in_app_purchase插件,需先添加依赖到pubspec.yaml。初始化连接,查询商品信息,然后监听购买流。处理购买逻辑并验证收据,最后完成交易。注意配置商店后台和测试账户。

更多关于flutter中如何使用in_app_purchase工具类的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用in_app_purchase插件进行应用内购买,主要步骤如下:

  1. 添加依赖
    pubspec.yaml中添加:

    dependencies:
      in_app_purchase: ^3.1.7
    
  2. 初始化连接
    在应用启动时初始化应用商店连接:

    import 'package:in_app_purchase/in_app_purchase.dart';
    
    void main() async {
      WidgetsFlutterBinding.ensureInitialized();
      await InAppPurchase.instance.isAvailable(); // 检查商店可用性
      runApp(MyApp());
    }
    
  3. 获取商品信息
    通过商品ID获取商品详情:

    final Set<String> _productIDs = {'product1', 'product2'};
    final ProductDetailsResponse response = await InAppPurchase.instance.queryProductDetails(_productIDs);
    List<ProductDetails> products = response.productDetails;
    
  4. 发起购买
    使用商品ID发起购买流程:

    final PurchaseParam purchaseParam = PurchaseParam(
      productDetails: productDetails, // 从queryProductDetails获取的商品对象
    );
    InAppPurchase.instance.buyConsumable(purchaseParam: purchaseParam); // 消耗型商品
    // 或 InAppPurchase.instance.buyNonConsumable(purchaseParam: purchaseParam); // 非消耗型商品
    
  5. 监听购买状态
    通过流监听购买结果:

    late StreamSubscription<List<PurchaseDetails>> _subscription;
    
    [@override](/user/override)
    void initState() {
      _subscription = InAppPurchase.instance.purchaseStream.listen(
        (purchaseDetailsList) {
          _handlePurchase(purchaseDetailsList);
        },
      );
      super.initState();
    }
    
    void _handlePurchase(List<PurchaseDetails> purchaseDetailsList) {
      for (var purchaseDetails in purchaseDetailsList) {
        if (purchaseDetails.status == PurchaseStatus.purchased) {
          // 处理购买成功逻辑
          _verifyPurchase(purchaseDetails); // 建议进行收据验证
        }
      }
    }
    
  6. 完成交易
    处理完成后调用completePurchase

    InAppPurchase.instance.completePurchase(purchaseDetails);
    

注意事项

  • 需要在iOS的App Store Connect和Google Play Console中配置商品
  • 建议在服务端验证购买凭证
  • 消耗型商品需在消费后调用completePurchase

完整示例可参考官方文档

回到顶部