Flutter用户引导插件at_onboarding_cli的使用

Flutter用户引导插件at_onboarding_cli的使用

简介

at_onboarding_cli 是一个用于认证和引导 atSign 的库。它允许开发者通过命令行接口对 atSign 进行认证、激活等操作。

开始使用

添加依赖

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

dependencies:
  at_onboarding_cli: ^1.3.0

然后运行以下命令以获取依赖项:

dart pub get

导入库

在你的 Dart 应用程序代码中导入库:

import 'package:at_onboarding_cli/at_onboarding_cli.dart';

使用方法

设置偏好设置

使用 AtOnboardingPreference 类来设置你的偏好设置。这些偏好设置将用于配置 AtOnboardingService。

AtOnboardingPreference atOnboardingPreference = AtOnboardingPreference()
  ..rootDomain = 'root.atsign.org'
  ..qrCodePath = 'storage/qr_code.png'
  ..hiveStoragePath = 'storage/hive'
  ..namespace = 'example'
  ..downloadPath = 'storage/files'
  ..isLocalStoreRequired = true
  ..commitLogPath = 'storage/commitLog'
  ..cramSecret = '<your cram secret>'
  ..privateKey = '<your private key here>'
  ..atKeysFilePath = 'storage/alice_key.atKeys';

认证

认证过程用于验证用户是否拥有某个 atSign。用户需要在执行任何操作之前进行认证,包括读取、写入、删除或更新 atSign 中的数据以及发送通知。

认证步骤

  1. 导入 at_onboarding_cli。
  2. 使用 AtOnboardingPreference 设置偏好设置。提供密钥或 .atKeysFile 路径以进行认证。
  3. 使用所需的 atSign 和有效的 AtOnboardingPreference 实例创建 AtOnboardingServiceImpl 实例。
  4. 调用 AtOnboardingService 上的 authenticate 方法。
  5. 使用 getAtLookup 或 getAtClient 获取经过认证的 AtLookup 和 AtClient 实例,以执行更复杂的操作。
AtOnboardingService atOnboardingService = AtOnboardingServiceImpl('[@alice](/user/alice)', atOnboardingPreference);
await atOnboardingService.authenticate();
AtClient? atClient = await atOnboardingService.atClient;
AtLookup? atLookup = atOnboardingService.atLookUp;

引导(激活)

引导过程是首次一次性认证,使用 QR 码中的 CRAM 密码进行。此过程激活 atSign,使其可以使用。

引导步骤

  1. 导入 at_onboarding_cli。
  2. 使用 AtOnboardingPreference 设置偏好设置。如果有 CRAM 密码,请提供。
  3. 如果没有 CRAM 密码,则留空。在这种情况下,将向注册的电子邮件发送验证码。
  4. 使用所需的 atSign 和有效的 AtOnboardingPreference 实例创建 AtOnboardingServiceImpl 实例。
  5. 调用 AtOnboardingServiceImpl 中的 onboard() 方法。
  6. 使用 AtOnboardingServiceImpl 实例中的已认证 atClient 和 atLookup 执行复杂操作。
AtOnboardingService atOnboardingService = AtOnboardingServiceImpl('[@alice](/user/alice)', atOnboardingPreference);
await atOnboardingService.onboard();
print('Successfully sent verification code to your registered e-mail');
print('[Action Required] Enter your verification code:');
String verificationCode = ''; // 用户输入的验证码
await atOnboardingService.atClient();
AtLookup? atLookup = atOnboardingService.atLookUp();

activate_cli

这是一个简单的命令行工具,用于通过命令行参数激活 atSign。

使用方法

使用验证码激活
dart pub global activate at_onboarding_cli
at_activate -a your_atsign
> Successfully sent verification code to your registered e-mail
> [Action Required] Enter your verification code:
<your 4 character code here>
使用 CRAM 密码激活
dart pub global activate at_onboarding_cli
at_activate -a your_atsign -c your_cram_secret

register_cli

这是一个命令行工具,用于获取免费的 atsign 并将其注册到提供的电子邮件地址。

使用方法

使用全局命令
dart pub global activate at_onboarding_cli
at_register -e your_email
克隆仓库并本地运行
  1. 从 GitHub 克隆代码。
  2. 切换到 at_libraries/at_onboarding_cli 目录。
  3. 运行 dart pub get。
  4. 运行以下命令:
dart run bin/register.dart -e email@email.com
  1. 输入发送到提供的电子邮件的验证码。
  2. register_cli 获取 CRAM 密钥并自动调用 activate_cli 激活获取的 atsign。
  3. 成功激活后,可以在 at_onboarding_cli/keys 目录中找到 .atKeysFile。

示例代码

以下是完整的示例代码,展示了如何使用 at_onboarding_cli 进行认证和引导:

示例:认证和引导

import 'package:at_onboarding_cli/at_onboarding_cli.dart';

void main() async {
  // 设置偏好设置
  AtOnboardingPreference atOnboardingPreference = AtOnboardingPreference()
    ..rootDomain = 'root.atsign.org'
    ..qrCodePath = 'storage/qr_code.png'
    ..hiveStoragePath = 'storage/hive'
    ..namespace = 'example'
    ..downloadPath = 'storage/files'
    ..isLocalStoreRequired = true
    ..commitLogPath = 'storage/commitLog'
    ..cramSecret = '<your cram secret>'
    ..privateKey = '<your private key here>'
    ..atKeysFilePath = 'storage/alice_key.atKeys';

  // 创建 AtOnboardingService 实例
  AtOnboardingService atOnboardingService = AtOnboardingServiceImpl('[@alice](/user/alice)', atOnboardingPreference);

  // 认证
  try {
    await atOnboardingService.authenticate();
    print('Authentication successful');
  } catch (e) {
    print('Authentication failed: $e');
  }

  // 引导
  try {
    await atOnboardingService.onboard();
    print('Onboarding successful');
  } catch (e) {
    print('Onboarding failed: $e');
  }

  // 获取认证后的实例
  AtClient? atClient = await atOnboardingService.atClient;
  AtLookup? atLookup = atOnboardingService.atLookUp;

  if (atClient != null && atLookup != null) {
    print('Authenticated AtClient and AtLookup instances obtained');
  } else {
    print('Failed to obtain authenticated instances');
  }
}

APKAM 注册示例

以下是 APKAM 注册的完整示例步骤:

  1. 引导具有批准/拒绝注册权限的 atsign

    dart example/onboard.dart -a <atsign> -c <CRAM secret> -k <path_store_keys_file>
    

    例如:

    dart example/onboard.dart -a [@alice](/user/alice) -k /home/alice/.atsign/@alice_wavikey.atKeys -c b26455a907582760ebf35bc4847de549bc41c24b25c8b1c58d5964f7b4f8a43bc55b0e9a601c9a9657d9a8b8bbc32f88b4e38ffaca03c8710ebae1b14ca9f364
    
  2. 使用已引导的 atsign 进行认证

    dart example/apkam_examples/apkam_authenticate.dart -a <atsign> -k <path_of_keys_file_from_#1>
    

    例如:

    dart example/apkam_examples/apkam_authenticate.dart -a [@alice](/user/alice) -k /home/alice/.atsign/@alice_wavikey.atKeys
    
  3. 运行客户端以批准注册

    dart example/apkam_examples/enroll_app_listen.dart -a <atsign> -k <path_of_keys_file_from_#1>
    

    例如:

    dart example/apkam_examples/enroll_app_listen.dart -a [@alice](/user/alice) -k /home/alice/.atsign/@alice_wavikey.atKeys
    
  4. 获取 OTP 用于注册

    • 通过 SSL 客户端执行 PKAM 认证
      • 获取挑战字符串
        from:<@atsign> e.g. from:[@alice](/user/alice)
        
      • 创建 pkamSignature
        • 克隆 at_tools 仓库:
          git clone https://github.com/atsign-foundation/at_tools.git
          cd at_tools/packages/at_pkam
          dart bin/main.dart -p <keys_file_path> <from_response>
          
          例如:
          dart bin/main.dart -p /home/alice/.atsign/@alice_wavikey.atKeys -r _70138292-07b5-4e47-8c94-e02e38220775[@alice](/user/alice):883ea0aa-c526-400a-926e-48cae9281de9
          
      • 使用 pkamSignature 进行认证
        pkam:enrollmentId:<enrollmentId>:<pkamSignature>
        
      • 获取 OTP
        otp:get
        
  5. 请求注册

    • 从新客户端提交注册
      dart example/apkam_examples/apkam_enroll.dart -a <atsign> -k <path_to_store_keys_file> -o <otp>
      
      注意:这个路径必须与第一步中提供的路径不同。 例如:
      dart example/apkam_examples/apkam_enroll.dart -a [@alice](/user/alice) -k /home/alice/.atsign/@alice_buzzkey.atKeys -o DY4UT4
      
    • 从第三步的客户端批准注册 输入 yes 并按回车键。
    • 注册成功,atKeys 文件存储在指定路径中
  6. 使用注册的 keys 文件进行认证

    dart example/apkam_examples/apkam_authenticate.dart -a <atsign> -k <path_of_keys_file_from_#5.1>
    

    注意:这个 keys 文件与第一步生成的 keys 文件不同。这个新的文件只能访问与此注册 ID 允许访问的数据。

希望这些信息能帮助你更好地理解和使用 at_onboarding_cli 插件。如果你有任何问题或需要进一步的帮助,请随时提问!


更多关于Flutter用户引导插件at_onboarding_cli的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter用户引导插件at_onboarding_cli的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何使用Flutter用户引导插件 at_onboarding_cli 的示例代码案例。假设你已经有一个Flutter项目,并且希望集成该插件来引导用户。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  at_onboarding_cli: ^最新版本号  # 请替换为实际的最新版本号

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

2. 导入插件

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

import 'package:at_onboarding_cli/at_onboarding_cli.dart';

3. 配置和启动引导流程

下面是一个完整的示例代码,展示如何使用 at_onboarding_cli 插件进行用户引导:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Onboarding Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: OnboardingScreen(),
    );
  }
}

class OnboardingScreen extends StatefulWidget {
  @override
  _OnboardingScreenState createState() => _OnboardingScreenState();
}

class _OnboardingScreenState extends State<OnboardingScreen> {
  final AtOnboardingService _onboardingService = AtOnboardingServiceImpl();

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

  Future<void> _startOnboarding() async {
    try {
      // 配置引导流程所需的参数
      final OnboardingConfig config = OnboardingConfig(
        rootDomain: 'root.atsign.me',
        appId: 'your_app_id',
        namespace: 'your_namespace',
        privateKey: 'your_private_key',  // 注意:不要在客户端硬编码私钥,这里仅作示例
        atsign: '@youratsign',
        onboardingCallback: (OnboardingStatus status) {
          // 根据引导状态执行相应操作
          print('Onboarding status: $status');
          if (status == OnboardingStatus.COMPLETED) {
            // 引导完成后跳转至主应用界面
            Navigator.pushReplacement(
              context,
              MaterialPageRoute(builder: (context) => HomeScreen()),
            );
          }
        },
      );

      // 启动引导流程
      await _onboardingService.start(config);
    } catch (e) {
      // 处理错误
      print('Onboarding error: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('User Onboarding'),
      ),
      body: Center(
        child: CircularProgressIndicator(), // 显示加载指示器,直到引导流程完成
      ),
    );
  }
}

class HomeScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Home Screen'),
      ),
      body: Center(
        child: Text('Welcome to the Home Screen!'),
      ),
    );
  }
}

注意事项

  1. 私钥管理:不要在客户端代码中硬编码私钥。应该使用安全的存储方式管理私钥,例如使用密钥管理服务(KMS)。
  2. 配置参数:确保 rootDomain、appId、namespace 和 atsign 等参数配置正确。
  3. 错误处理:在实际应用中,应该添加更多的错误处理和用户反馈机制。

这个示例代码展示了如何使用 at_onboarding_cli 插件启动用户引导流程,并在引导完成后跳转到主应用界面。你可以根据自己的需求进一步定制和扩展这个示例。

回到顶部