Flutter iOS密码管理插件passkeys_ios_capsule的使用

Flutter iOS 密码管理插件 passkeys_ios 的使用

passkeys_iospasskeys 在 iOS 平台上的实现。

使用

这个包是被官方推荐的,这意味着你可以像使用普通的包一样直接使用 passkeys。当你这样做时,此包会自动包含在你的应用中。

以下是一个完整的示例,演示如何在 Flutter 应用程序中使用 passkeys_ios 插件:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Passkeys iOS 示例'),
        ),
        body: Center(
          child: PasskeyButton(),
        ),
      ),
    );
  }
}

class PasskeyButton extends StatefulWidget {
  @override
  _PasskeyButtonState createState() => _PasskeyButtonState();
}

class _PasskeyButtonState extends State<PasskeyButton> {
  String _message = '';

  Future<void> _registerPasskey() async {
    try {
      final result = await Passkeys.registerPasskey();
      setState(() {
        _message = '注册成功: ${result}';
      });
    } catch (e) {
      setState(() {
        _message = '注册失败: $e';
      });
    }
  }

  Future<void> _authenticatePasskey() async {
    try {
      final result = await Passkeys.authenticatePasskey();
      setState(() {
        _message = '验证成功: ${result}';
      });
    } catch (e) {
      setState(() {
        _message = '验证失败: $e';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Column(
      mainAxisAlignment: MainAxisAlignment.center,
      children: [
        ElevatedButton(
          onPressed: _registerPasskey,
          child: Text('注册 Passkey'),
        ),
        SizedBox(height: 20),
        ElevatedButton(
          onPressed: _authenticatePasskey,
          child: Text('验证 Passkey'),
        ),
        SizedBox(height: 20),
        Text(_message),
      ],
    );
  }
}

说明

  • 导入必要的库

    import 'package:flutter/material.dart';
    import 'package:passkeys/passkeys.dart';
    
  • 创建主应用

    void main() {
      runApp(MyApp());
    }
    
    class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          home: Scaffold(
            appBar: AppBar(
              title: Text('Passkeys iOS 示例'),
            ),
            body: Center(
              child: PasskeyButton(),
            ),
          ),
        );
      }
    }
    
  • 定义 Passkey 按钮组件

    class PasskeyButton extends StatefulWidget {
      @override
      _PasskeyButtonState createState() => _PasskeyButtonState();
    }
    
    class _PasskeyButtonState extends State<PasskeyButton> {
      String _message = '';
    
      // 注册 Passkey
      Future<void> _registerPasskey() async {
        try {
          final result = await Passkeys.registerPasskey();
          setState(() {
            _message = '注册成功: ${result}';
          });
        } catch (e) {
          setState(() {
            _message = '注册失败: $e';
          });
        }
      }
    
      // 验证 Passkey
      Future<void> _authenticatePasskey() async {
        try {
          final result = await Passkeys.authenticatePasskey();
          setState(() {
            _message = '验证成功: ${result}';
          });
        } catch (e) {
          setState(() {
            _message = '验证失败: $e';
          });
        }
      }
    
      @override
      Widget build(BuildContext context) {
        return Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _registerPasskey,
              child: Text('注册 Passkey'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _authenticatePasskey,
              child: Text('验证 Passkey'),
            ),
            SizedBox(height: 20),
            Text(_message),
          ],
        );
      }
    }
    

更多关于Flutter iOS密码管理插件passkeys_ios_capsule的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter iOS密码管理插件passkeys_ios_capsule的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中使用 passkeys_ios_capsule 插件来管理 iOS 密码(Passkeys)可以帮助你轻松集成 Apple 的 Passkeys 功能。Passkeys 是一种基于 WebAuthn 的密码替代方案,提供了更安全的身份验证方式。以下是使用 passkeys_ios_capsule 插件的基本步骤:

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  passkeys_ios_capsule: ^1.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

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

import 'package:passkeys_ios_capsule/passkeys_ios_capsule.dart';

3. 初始化插件

在使用插件之前,需要先初始化它:

final passkeys = PasskeysIOSCapsule();

4. 创建 Passkey

你可以使用 createPasskey 方法来创建一个新的 Passkey。你需要提供一个 challenge(通常是一个随机字符串)和一个 relyingParty(通常是你的域名):

final challenge = 'random_challenge_string';
final relyingParty = 'yourdomain.com';

final result = await passkeys.createPasskey(
  challenge: challenge,
  relyingParty: relyingParty,
);

if (result != null) {
  print('Passkey created successfully: $result');
} else {
  print('Failed to create Passkey');
}

5. 验证 Passkey

你可以使用 verifyPasskey 方法来验证一个 Passkey。同样,你需要提供一个 challenge 和一个 relyingParty

final challenge = 'random_challenge_string';
final relyingParty = 'yourdomain.com';

final result = await passkeys.verifyPasskey(
  challenge: challenge,
  relyingParty: relyingParty,
);

if (result != null) {
  print('Passkey verified successfully: $result');
} else {
  print('Failed to verify Passkey');
}

6. 处理错误

在使用 createPasskeyverifyPasskey 时,可能会抛出异常。你可以使用 try-catch 块来捕获并处理这些异常:

try {
  final result = await passkeys.createPasskey(
    challenge: challenge,
    relyingParty: relyingParty,
  );
  print('Passkey created successfully: $result');
} catch (e) {
  print('Failed to create Passkey: $e');
}

7. 配置 iOS 项目

确保你的 iOS 项目已经正确配置了 Passkeys 所需的权限和设置。你需要在 Info.plist 文件中添加以下内容:

<key>NSFaceIDUsageDescription</key>
<string>We need to use Face ID to authenticate you.</string>

8. 测试

确保在真实的 iOS 设备上测试你的应用,因为 Passkeys 功能在模拟器上可能无法正常工作。

9. 处理用户取消

用户可能会取消 Passkey 的创建或验证操作。你需要在代码中处理这种情况,并给用户适当的反馈。

10. 进一步优化

根据你的应用需求,你可能需要进一步优化 Passkeys 的使用,比如处理不同的错误状态、提供用户指导等。

示例代码

以下是一个完整的示例代码,展示了如何使用 passkeys_ios_capsule 插件来创建和验证 Passkey:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: PasskeysDemo(),
    );
  }
}

class PasskeysDemo extends StatefulWidget {
  [@override](/user/override)
  _PasskeysDemoState createState() => _PasskeysDemoState();
}

class _PasskeysDemoState extends State<PasskeysDemo> {
  final passkeys = PasskeysIOSCapsule();
  final challenge = 'random_challenge_string';
  final relyingParty = 'yourdomain.com';

  Future<void> _createPasskey() async {
    try {
      final result = await passkeys.createPasskey(
        challenge: challenge,
        relyingParty: relyingParty,
      );
      print('Passkey created successfully: $result');
    } catch (e) {
      print('Failed to create Passkey: $e');
    }
  }

  Future<void> _verifyPasskey() async {
    try {
      final result = await passkeys.verifyPasskey(
        challenge: challenge,
        relyingParty: relyingParty,
      );
      print('Passkey verified successfully: $result');
    } catch (e) {
      print('Failed to verify Passkey: $e');
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Passkeys Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _createPasskey,
              child: Text('Create Passkey'),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _verifyPasskey,
              child: Text('Verify Passkey'),
            ),
          ],
        ),
      ),
    );
  }
}
回到顶部