Flutter用户引导插件at_onboarding_cli的使用

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

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. 使用 getAtLookupgetAtClient 获取经过认证的 AtLookupAtClient 实例,以执行更复杂的操作。
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 实例中的已认证 atClientatLookup 执行复杂操作。
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. 配置参数:确保 rootDomainappIdnamespaceatsign 等参数配置正确。
  3. 错误处理:在实际应用中,应该添加更多的错误处理和用户反馈机制。

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

回到顶部