Flutter身份验证插件flutter_idensic_mobile_sdk_plugin的使用
Flutter身份验证插件flutter_idensic_mobile_sdk_plugin的使用
简介
flutter_idensic_mobile_sdk_plugin
是 Sumsub Mobile SDK 的 Flutter 插件。它提供了在 Flutter 应用中集成身份验证功能的能力。您可以通过访问 Sumsub Mobile SDK 和 Flutter 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
更多关于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 应用中,你可以按照以下步骤进行身份验证:
- 导入插件:
import 'package:flutter_idensic_mobile_sdk_plugin/flutter_idensic_mobile_sdk_plugin.dart';
- 初始化插件并进行身份验证:
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 参考和使用指南。