Flutter身份验证插件flutter_idensic_mobile_sdk_plugin的使用

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

Flutter身份验证插件flutter_idensic_mobile_sdk_plugin的使用

简介

flutter_idensic_mobile_sdk_plugin 是 Sumsub Mobile SDK 的 Flutter 插件。它提供了在 Flutter 应用中集成身份验证功能的能力。您可以通过访问 Sumsub Mobile SDKFlutter Plugin 获取更多信息。

示例代码

以下是一个完整的示例,展示了如何使用 flutter_idensic_mobile_sdk_plugin 来启动身份验证流程。

主文件 (main.dart)

import 'dart:async';
import 'package:flutter/material.dart';
import 'package:flutter_idensic_mobile_sdk_plugin/flutter_idensic_mobile_sdk_plugin.dart';
import 'dart:developer' as D;

SNSMobileSDK? snsMobileSDK;

void launchSDK() async {
  // 从您的后端获取用于验证申请人的访问令牌。
  // 访问令牌必须包含 `levelName` 和 `userId`,
  // 其中 `levelName` 是您在仪表板中配置的级别名称。
  final String accessToken = "your access token";

  // 访问令牌有有限的生命周期,当它过期时,您必须提供一个新的令牌。
  // 因此,请准备好从您的后端获取新的访问令牌。
  final onTokenExpiration = () async {
    D.log('_onTokenExpiration');
    // 调用您的后端以获取新的访问令牌(这只是示例)
    return Future<String>.delayed(Duration(seconds: 2), () => accessToken);
  };

  final builder = SNSMobileSDK.init(accessToken, onTokenExpiration);

  setupOptionalHandlers(builder);
  setupTheme(builder);

  snsMobileSDK = builder
    .withLocale(Locale("en")) // 设置语言环境
    .withDebug(false) // 设置调试模式
    .build();

  final result = await snsMobileSDK!.launch();

  D.log("Completed with result: $result");
}

void setupOptionalHandlers(SNSMobileSDKBuilder builder) {
  if (useApplicantConf) {
    builder.withApplicantConf({
      "email": "test@test.com",
      "phone": "123456789"
    });
  }

  if (usePreferredDocumentDefinitions) {
    builder.withPreferredDocumentDefinitions({
      "IDENTITY": {
        "idDocType": "PASSPORT",
        "country": "USA"
      },
      "IDENTITY2": {
          "idDocType": "DRIVERS",
          "country": "FRA"
      }
    });
  }

  if (useDisableAnalytics) {
    builder.withAnalyticsEnabled(false);
  }

  if (useCustomStrings) {
    builder.withStrings({
      "sns_general_poweredBy": "Custom watermark"
    });
  }

  if (useDisableAutoCloseOnApprove) {
    builder.withAutoCloseOnApprove(0);
  }

  final SNSStatusChangedHandler onStatusChanged = (SNSMobileSDKStatus newStatus, SNSMobileSDKStatus prevStatus) {
    D.log('onStatusChanged: $prevStatus -> $newStatus');

    // 仅为了展示 dismiss() 方法的工作原理
    if (useDismissTimer && prevStatus == SNSMobileSDKStatus.Ready) {
      Timer(Duration(seconds: 10), () {
        snsMobileSDK?.dismiss();
      });
    }
  };

  final SNSEventHandler onEvent = (SNSMobileSDKEvent event) {
    D.log("onEvent: $event");
  };

  final SNSActionResultHandler onActionResult = (SNSMobileSDKActionResult result) {
    D.log("onActionResult: $result");

    // 返回一个 `Future`,该 `Future` 应完成为 `SNSActionResultHandlerReaction` 类型的值
    // 您可以传递 `.Cancel` 强制用户界面关闭,或传递 `.Continue` 继续正常流程
    return Future.value(SNSActionResultHandlerReaction.Continue);
  };

  builder.withHandlers(
    onStatusChanged: onStatusChanged,
    onActionResult: onActionResult,
    onEvent: onEvent
  );

  void onLog(SNSLogLevel level, String message) {
    D.log('onLog: \'$level\' - $message');
  }

  builder.withLogHandler(onLog);
}

void setupTheme(SNSMobileSDKBuilder builder) {
  if (!useCustomTheme) {
    return;
  }

  builder.withTheme({
    // 自定义主题设置
    // 详细配置请参考完整代码示例
  });
}

// ------------------------------------------------------

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

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

var useDismissTimer = false;
var useApplicantConf = false;
var usePreferredDocumentDefinitions = false;
var useDisableAnalytics = false;
var useCustomStrings = false;
var useCustomTheme = false;
var useDisableAutoCloseOnApprove = false;

class _MyAppState extends State<MyApp> {

  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
      appBar: AppBar(
        title: const Text('IdensicMobileSDK Plugin'),
      ),
      body: Container(
        alignment: Alignment.center,
        child: IntrinsicWidth(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            crossAxisAlignment: CrossAxisAlignment.stretch,
            children: [
              Row(
                mainAxisSize: MainAxisSize.min,
                mainAxisAlignment: MainAxisAlignment.center,
                crossAxisAlignment: CrossAxisAlignment.center,
                children: [
                  ElevatedButton(
                    onPressed: () => launchSDK(),
                    child: Text("Launch Sumsub SDK"),
                  ),
                ]
              ),
              SizedBox(height: 16),
              // 其他UI组件和逻辑...
            ],
          ),
        ),
      ),
    ));
  }
}

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

1 回复

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


当然,以下是一个关于如何使用 flutter_idensic_mobile_sdk_plugin 进行身份验证的示例代码。请注意,由于 flutter_idensic_mobile_sdk_plugin 并不是一个广为人知的插件(可能是特定公司或项目专用的),我将基于一般的 Flutter 插件使用方法来提供一个示例框架。如果实际插件的 API 有所不同,请查阅相应的官方文档进行调整。

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

dependencies:
  flutter:
    sdk: flutter
  flutter_idensic_mobile_sdk_plugin: ^x.y.z  # 替换为实际的版本号

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

接下来,在你的 Flutter 应用中,你可以按照以下步骤进行身份验证:

  1. 导入插件
import 'package:flutter_idensic_mobile_sdk_plugin/flutter_idensic_mobile_sdk_plugin.dart';
  1. 初始化插件并进行身份验证
void main() {
  runApp(MyApp());
}

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

class _MyAppState extends State<MyApp> {
  final FlutterIdensicMobileSdkPlugin _idensicPlugin = FlutterIdensicMobileSdkPlugin();

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

  Future<void> _authenticateUser() async {
    try {
      // 假设插件提供了一个 `authenticate` 方法,该方法接受必要的认证参数
      Map<String, dynamic> authParams = {
        'username': 'your_username',
        'password': 'your_password',
        // 其他必要的参数,根据插件文档添加
      };

      var result = await _idensicPlugin.authenticate(authParams);

      if (result['success']) {
        // 认证成功,处理成功逻辑
        print('Authentication successful: ${result['data']}');
        // 例如,导航到主屏幕
        Navigator.pushReplacement(
          context,
          MaterialPageRoute(builder: (context) => HomeScreen()),
        );
      } else {
        // 认证失败,处理失败逻辑
        print('Authentication failed: ${result['error']}');
      }
    } catch (e) {
      // 处理异常
      print('An error occurred: $e');
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter Idensic Authentication Example'),
        ),
        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!'),
      ),
    );
  }
}

注意

  • 上面的代码假设 FlutterIdensicMobileSdkPlugin 类有一个名为 authenticate 的方法,该方法接受一个包含认证参数的 Map 并返回一个包含认证结果(成功或失败)的 Map。实际情况可能有所不同,请查阅插件的官方文档以了解具体的 API。
  • 在真实的应用中,你可能需要更复杂的错误处理和用户反馈机制。
  • 不要在代码中硬编码用户名和密码,应该使用安全的方式来存储和检索这些敏感信息,例如使用 Flutter Secure Storage 插件。

如果你没有该插件的官方文档,建议联系插件的开发者或维护者以获取详细的 API 参考和使用指南。

回到顶部