Flutter iOS收据验证插件ios_receipt的使用

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

Flutter iOS收据验证插件ios_receipt的使用

安装

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

dependencies:
  ios_receipt: ^0.0.1  # 使用最新版本的包

然后运行flutter pub get来安装该插件。

使用

要获取App Store收据,可以使用以下代码:

final receiptInBase64 = await IosReceipt.getAppleReceipt();

基于

此插件基于官方苹果文档中的appStoreReceiptURL

注意事项

  • 如果你使用AppTransaction来验证应用下载,或者使用Transaction来验证应用内购买,则无需收据。
  • 如果在你的应用中收据无效或丢失,可以使用SKReceiptRefreshRequest请求新的收据。

测试环境

请注意,在iOS和iPadOS应用的沙盒环境以及Xcode中,收据最初并不存在。应用程序会在测试者完成第一次应用内购买后收到收据。

许可证

该项目采用MIT许可证。

完整示例Demo

以下是完整的示例代码,演示如何在Flutter应用中使用ios_receipt插件获取收据。

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

import 'package:flutter/services.dart';
import 'package:ios_receipt/ios_receipt.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> {
  [@override](/user/override)
  void initState() {
    super.initState();
  }

  // 获取收据的方法
  Future<void> _getReceipt() async {
    try {
      final receiptInBase64 = await IosReceipt.getAppleReceipt();  // 调用插件方法获取收据
      print(receiptInBase64);  // 打印收据信息
    } on PlatformException {
      print('PlatformException');  // 捕获平台异常
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('插件示例应用'),  // 应用标题
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: _getReceipt,  // 设置按钮点击事件
            child: const Text('获取收据'),  // 按钮文本
          ),
        ),
      ),
    );
  }
}

更多关于Flutter iOS收据验证插件ios_receipt的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter iOS收据验证插件ios_receipt的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter应用中,进行iOS收据验证时,ios_receipt 插件是一个非常有用的工具。这个插件允许你轻松地从iOS设备获取收据数据,并将其发送到你的服务器进行验证。以下是一个如何使用 ios_receipt 插件的基本代码示例。

首先,确保你已经在你的 pubspec.yaml 文件中添加了 ios_receipt 依赖:

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

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

获取并处理iOS收据

在你的 Flutter 项目中,你可以按照以下步骤来获取并处理iOS收据:

1. 导入插件

在你的 Dart 文件中导入 ios_receipt 插件:

import 'package:ios_receipt/ios_receipt.dart';

2. 请求并获取收据数据

你可以使用 IosReceipt.appStoreReceipt 方法来获取收据数据。这里是一个简单的示例,展示如何获取收据并将其转换为JSON格式以便后续处理:

import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:ios_receipt/ios_receipt.dart';

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

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

class _MyAppState extends State<MyApp> {
  String? receiptData;

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

  Future<void> _getReceipt() async {
    try {
      // 获取收据数据
      String? appStoreReceipt = await IosReceipt.appStoreReceipt;
      if (appStoreReceipt != null) {
        // 将收据数据转换为JSON格式
        Map<String, dynamic> receiptJson = jsonDecode(appStoreReceipt!);
        
        // 更新UI
        setState(() {
          receiptData = jsonEncode(receiptJson, prettyPrint: true);
        });
        
        // 在这里你可以将receiptJson发送到你的服务器进行验证
      } else {
        print("无法获取收据数据");
      }
    } catch (e) {
      print("获取收据数据时出错: $e");
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('iOS 收据验证示例'),
        ),
        body: Center(
          child: Text(receiptData ?? '加载中...'),
        ),
      ),
    );
  }
}

服务器验证

获取收据数据后,你通常需要将数据发送到你的服务器进行验证。验证过程涉及与Apple的验证服务器通信,这通常在你的后端完成。以下是一个简化的服务器验证流程示例(假设你使用的是Node.js作为后端):

const axios = require('axios');

async function validateReceipt(receiptData) {
  const url = 'https://buy.itunes.apple.com/verifyReceipt';
  const response = await axios.post(url, {
    'receipt-data': receiptData,
    'password': 'your-shared-secret',  // 替换为你的App Store Connect中的共享密钥
  }, {
    headers: {
      'Content-Type': 'application/json'
    }
  });

  return response.data;
}

// 示例调用
const receiptDataFromClient = '...';  // 从客户端接收的收据数据
validateReceipt(receiptDataFromClient)
  .then(data => console.log(data))
  .catch(error => console.error(error));

请注意,上述代码仅用于说明目的,并假设你已经有了一个能够处理HTTPS请求的后端服务。在实际应用中,你需要根据你的后端技术栈进行适当的调整。

通过以上步骤,你可以在Flutter应用中成功获取iOS收据,并将其发送到服务器进行验证。

回到顶部