Flutter应用签名信息获取插件package_signature的使用

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

Flutter应用签名信息获取插件 package_signature 的使用

package_signature 是一个用于在Flutter应用中轻松获取Android包签名的插件。本文将介绍如何使用该插件,并提供完整的示例代码。

使用方法

获取平台签名对象

首先,您需要导入package_signature插件并调用其signature方法来获取签名对象:

Signature? signature = await PackageSignature().signature;

获取SHA1或SHA256签名

从签名对象中,您可以获取不同格式的SHA1和SHA256签名:

String sha256base64 = signature.sha256base64;
String sha256hex = signature.sha256hex;
Uint8List sha256bytes = signature.sha256byte;

String sha1base64 = signature.sha1base64;
String sha1hex = signature.sha1hex;
Uint8List sha1bytes = signature.sha1bytes;

示例Demo

以下是一个完整的Flutter应用程序示例,展示如何使用package_signature插件来获取并显示应用的签名信息。

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

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

class MyApp extends StatefulWidget {
  const MyApp({Key? key}) : super(key: key);

  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  String _signatureSha256 = 'Unknown';
  String _signatureSha256Hex = 'Unknown';
  String _signatureSha1 = 'Unknown';
  String _signatureSha1Hex = 'Unknown';
  int _cost = 0;

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

  Future<void> initPlatformState() async {
    final n = DateTime.now();
    Signature? signature = await PackageSignature().signature;
    if (!mounted) return;

    setState(() {
      _cost = DateTime.now().difference(n).inMilliseconds;
      _signatureSha256 = signature?.sha256base64 ?? '';
      _signatureSha256Hex = signature?.sha256hex ?? '';
      _signatureSha1 = signature?.sha1base64 ?? '';
      _signatureSha1Hex = signature?.sha1hex ?? '';
    });
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      theme: ThemeData.light(useMaterial3: true),
      darkTheme: ThemeData.dark(useMaterial3: true),
      home: Scaffold(
        appBar: AppBar(
          title: const Text("App Signature"),
          actions: [
            IconButton(
              onPressed: initPlatformState,
              icon: const Icon(Icons.refresh),
            ),
          ],
        ),
        body: Padding(
          padding: const EdgeInsets.all(16),
          child: Column(
            crossAxisAlignment: CrossAxisAlignment.start,
            mainAxisSize: MainAxisSize.max,
            mainAxisAlignment: MainAxisAlignment.center,
            children: [
              Chip(label: Text("cost: $_cost ms")),
              const Chip(label: Text("SHA256")),
              Text(_signatureSha256),
              const SizedBox(height: 12),
              const Chip(label: Text("SHA256Hex")),
              Text(_signatureSha256Hex),
              const SizedBox(height: 12),
              const Chip(label: Text("SHA1")),
              Text(_signatureSha1),
              const SizedBox(height: 12),
              const Chip(label: Text("SHA1 Hex")),
              Text(_signatureSha1Hex),
            ],
          ),
        ),
      ),
    );
  }
}

此示例创建了一个简单的Flutter应用程序,通过点击刷新按钮可以重新获取并显示当前应用的签名信息。签名信息包括SHA256和SHA1的不同格式(Base64、Hex和Bytes)。

贡献者

感谢以下贡献者的辛勤工作:

希望这个指南能帮助您在Flutter应用中成功集成和使用package_signature插件!


更多关于Flutter应用签名信息获取插件package_signature的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter应用签名信息获取插件package_signature的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter应用中使用package_signature插件来获取签名信息的代码示例。package_signature插件允许你获取应用的签名证书信息,这在一些需要验证应用完整性的场景中非常有用。

步骤 1: 添加依赖

首先,你需要在pubspec.yaml文件中添加package_signature依赖:

dependencies:
  flutter:
    sdk: flutter
  package_signature: ^latest_version  # 请替换为最新的版本号

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

步骤 2: 请求权限(如果需要)

在Android上,获取签名信息通常不需要额外的权限,但在iOS上,你可能需要在Info.plist中添加一些权限声明(尽管对于签名信息通常不需要)。不过,为了完整性,这里是一个标准的权限请求示例(如果后续需要其他权限):

<!-- 在 Info.plist 中添加 -->
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

步骤 3: 使用package_signature插件

下面是一个完整的Flutter代码示例,展示了如何使用package_signature插件来获取签名信息:

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

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

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

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

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

  Future<void> _getSignatureInfo() async {
    try {
      // 获取签名信息
      SignatureResult result = await PackageSignature.getSignature();
      setState(() {
        signatureInfo = 'SHA1: ${result.sha1}\nSHA256: ${result.sha256}\nMD5: ${result.md5}';
      });
    } catch (e) {
      setState(() {
        signatureInfo = 'Error: ${e.toString()}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Signature Info Example'),
        ),
        body: Center(
          child: Text(signatureInfo ?? 'Loading...'),
        ),
      ),
    );
  }
}

解释

  1. 依赖添加:在pubspec.yaml中添加package_signature依赖。
  2. 初始化状态:在_MyAppStateinitState方法中调用_getSignatureInfo函数来获取签名信息。
  3. 获取签名信息:使用PackageSignature.getSignature()方法异步获取签名信息,该方法返回一个SignatureResult对象,包含SHA1、SHA256和MD5哈希值。
  4. 显示信息:将获取到的签名信息显示在屏幕上。

这个示例展示了如何使用package_signature插件来获取并显示Flutter应用的签名信息。你可以根据需要进一步处理这些信息,比如将它们发送到服务器进行验证。

回到顶部