Flutter苹果应用内购买插件storekit2helper的使用

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

Flutter 苹果应用内购买插件 storekit2helper 的使用

storekit2

这是一个新的 Flutter 插件项目。

Getting Started(入门)

这个项目是 iOS Storekit 2 的实现。

USAGE(使用方法)

// 获取产品列表
var products = await Storekit2Helper.fetchProducts(["app_weekly", "app_yearly", "app_lifetime"]);

for (var p in products) {
  print(p.productId + " - " + p.periodUnit + " " + p.periodValue.toString() + " " + p.type);
}

// 检查用户是否有有效的订阅
var hasActiveSubscription = await Storekit2Helper.hasActiveSubscription();

// 使用产品ID购买产品
Storekit2Helper.buyProduct("app_weekly", (success, transaction, errorMessage) {
  print(success);
  print(errorMessage);
  print(transaction);
});

完整示例 Demo

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

import 'package:flutter/services.dart';
import 'package:storekit2helper/storekit2helper.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> {
  String _platformVersion = 'Unknown';
  final _storekit2Plugin = Storekit2Helper();

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

  Future<void> testPlugin() async {
    // 获取产品列表
    var products = await Storekit2Helper.fetchProducts(
        ["app_weekly", "app_yearly", "app_lifetime"]);

    for (var p in products) {
      print(p.productId + 
            " - " + 
            p.periodUnit + 
            " " + 
            p.periodValue.toString() + 
            " " + 
            p.type);
    }

    // 检查用户是否有有效的订阅
    var hasActiveSubscription = await Storekit2Helper.hasActiveSubscription();

    // 初始化插件
    Storekit2Helper.initialize();

    // 打印是否拥有有效订阅
    print(await Storekit2Helper.hasActiveSubscription());
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),
        ),
        body: Center(
          child: Text('运行在: $_platformVersion'),
        ),
        floatingActionButton: FloatingActionButton(
          onPressed: () {
            // 购买产品
            Storekit2Helper.buyProduct(
                "app_yearly", (success, transaction, errorMessage) {
              print(success);
              print(errorMessage);
              print(transaction);
            });
          },
          tooltip: '增加',
          child: const Icon(Icons.add),
        ),
      ),
    );
  }
}

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

1 回复

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


当然,以下是如何在Flutter应用中使用storekit2helper插件来实现苹果应用内购买的代码示例。storekit2helper是一个帮助处理StoreKit 2 API的Flutter插件,适用于iOS应用内购买。

步骤 1: 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  storekit2helper: ^最新版本号  # 请替换为当前最新版本号

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

步骤 2: 配置iOS项目

确保你的iOS项目已正确配置应用内购买。在Xcode中,你需要:

  1. 前往Targets -> Capabilities,启用In-App Purchase
  2. 在iTunes Connect中设置你的应用内购买产品。

步骤 3: 使用storekit2helper进行购买

下面是一个简单的Flutter代码示例,展示如何使用storekit2helper进行购买:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late StoreKit2Helper _storeKit2Helper;
  late List<SKProduct> _products;

  @override
  void initState() {
    super.initState();
    _storeKit2Helper = StoreKit2Helper();

    // 请求产品信息
    _requestProducts();
  }

  Future<void> _requestProducts() async {
    try {
      final List<String> productIdentifiers = [
        'com.example.app.product1', // 替换为你的产品标识符
        'com.example.app.product2', // 替换为你的产品标识符
      ];

      _products = await _storeKit2Helper.fetchProducts(productIdentifiers);
      setState(() {}); // 更新UI
    } catch (e) {
      print('Error fetching products: $e');
    }
  }

  Future<void> _purchaseProduct(SKProduct product) async {
    try {
      final SKPaymentTransaction? transaction = await _storeKit2Helper.purchaseProduct(product);
      if (transaction != null && transaction.transactionState == SKPaymentTransactionState.purchased) {
        print('Product purchased successfully: ${product.productIdentifier}');
        // 处理购买成功逻辑,例如解锁内容或发送服务器验证收据
      } else if (transaction.transactionState == SKPaymentTransactionState.failed) {
        print('Purchase failed: ${transaction.error?.localizedDescription ?? 'Unknown error'}');
      } else if (transaction.transactionState == SKPaymentTransactionState.restored) {
        print('Product restored successfully: ${product.productIdentifier}');
        // 处理恢复购买逻辑
      }
    } catch (e) {
      print('Error purchasing product: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('In-App Purchases'),
        ),
        body: _products.isEmpty
            ? Center(child: CircularProgressIndicator())
            : ListView.builder(
                itemCount: _products.length,
                itemBuilder: (context, index) {
                  final SKProduct product = _products[index];
                  return ListTile(
                    title: Text(product.localizedTitle),
                    subtitle: Text('\$${product.price.doubleValue}'),
                    trailing: ElevatedButton(
                      onPressed: () => _purchaseProduct(product),
                      child: Text('Buy'),
                    ),
                  );
                },
              ),
      ),
    );
  }
}

说明

  1. 请求产品信息:在_requestProducts方法中,我们使用产品标识符列表调用fetchProducts方法来获取产品信息。
  2. 购买产品:在_purchaseProduct方法中,我们调用purchaseProduct方法来购买指定的产品,并根据交易状态处理购买结果。
  3. UI展示:在build方法中,我们展示了一个简单的列表,其中每个列表项都是一个可购买的产品。点击“Buy”按钮将触发购买流程。

请确保替换示例代码中的产品标识符为你自己的产品标识符,并根据需要调整UI和逻辑。

注意事项

  • 在实际应用中,你可能需要在服务器端验证购买收据,以确保购买的安全性和有效性。
  • 对于恢复购买功能,你可以调用_storeKit2Helper.restoreCompletedTransactions()方法,并在处理交易状态时检查SKPaymentTransactionState.restored状态。

希望这个示例对你有所帮助!

回到顶部