Flutter智能签名插件flutter_intelligence_sign3的使用
Flutter智能签名插件flutter_intelligence_sign3的使用
Sign3 SDK集成指南
Sign3 SDK 是一个欺诈预防工具包,旨在评估设备安全性,检测潜在风险如越狱设备、VPN连接或远程访问等。通过提供有关设备安全性的见解,它增强了对欺诈活动的安全措施,并确保了强大的保护系统。
在项目中添加Sign3 SDK
添加最新版本到pubspec.yaml
文件
- 我们不断改进我们的欺诈库,增加新功能、修复错误并进行安全更新。为了应对不断发展的欺诈风险,我们建议更新到最新的SDK版本。
dependencies: flutter_intelligence_sign3: ^x.x.x (请参阅最新版本)
创建.env
文件
- 在您的Flutter项目的根目录下创建一个
.env
文件。SIGN3_USERNAME=在凭证文档中提供 SIGN3_PASSWORD=在凭证文档中提供 SIGN3_REPO_URL=https://sign3.jfrog.io/artifactory/intelligence-generic-local/
使用项目级Gradle依赖
- 将Sign3 SDK添加到依赖块
def envProperties = new Properties() def envFile = rootProject.file("../.env") if (envFile.exists()) { envFile.withInputStream { stream -> envProperties.load(stream) } println ".env file loaded successfully." } else { println "Error: .env file not found." } allprojects { repositories { def sign3RepoUrl = envProperties['SIGN3_REPO_URL'] ?: "" def sign3Username = envProperties['SIGN3_USERNAME'] ?: "" def sign3Password = envProperties['SIGN3_PASSWORD'] ?: "" if (!sign3RepoUrl.isEmpty() && sign3RepoUrl.startsWith("https://") && !sign3Username.isEmpty() && !sign3Password.isEmpty()) { maven { url sign3RepoUrl credentials { username = sign3Username password = sign3Password } } } else { println "Error: Invalid repository URL or missing credentials in .env file." } } }
初始化SDK
- 在您的Flutter项目的Android文件夹中创建一个
Application
类,在该类的onCreate()
方法中初始化Sign3 SDK,并将其添加到AndroidManifest.xml
文件中。 - 该SDK需要以下两个Android权限以实现更高的准确性:
ACCESS_FINE_LOCATION
READ_PHONE_STATE
- 使用凭证文档中共享的ClientID和Client Secret。
对于Java
public class MyApplication extends FlutterApplication {
@Override
public void onCreate() {
super.onCreate();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Sign3IntelligencePlugin sign3IntelligencePlugin = new Sign3IntelligencePlugin();
if (sign3IntelligencePlugin.stop()) return;
OptionsBuilder.INSTANCE.build(
"<SIGN3_CLIENT_ID>",
"<SIGN3_CLIENT_SECRET>",
OptionsBuilder.ENV_DEV); // For Prod: Options.ENV_PROD, For Dev: Options.ENV_DEV
sign3IntelligencePlugin.initAsync(this);
}
}
}
对于Kotlin
class MyApplication : FlutterApplication() {
override fun onCreate() {
super.onCreate()
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
val sign3IntelligencePlugin = Sign3IntelligencePlugin()
if (sign3IntelligencePlugin.stop()) return
OptionsBuilder.build(
clientId = "<SIGN3_CLIENT_ID>",
secret = "<SIGN3_CLIENT_SECRET>",
env = OptionsBuilder.ENV_DEV // For Prod: Options.ENV_PROD, For Dev: Options.ENV_DEV
)
sign3IntelligencePlugin.initAsync(this)
}
}
}
对于AndroidManifest.xml
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 如果minSdk低于23,请取消注释以下行 -->
<!-- <uses-sdk tools:overrideLibrary="com.sign3.intelligence.flutter_intelligence_sign3"/> -->
<application
android:name=".MyApplication">
<!-- 在此处添加其他组件如activity等 -->
</application>
</manifest>
获取会话ID
- 会话ID是用户应用程序会话的唯一标识符,当检索该会话的设备结果时用作参考点。
- 会话ID遵循OS生命周期管理,符合行业最佳实践。这意味着只要设备保持活动状态,用户的会话就会保持活跃,除非用户终止应用或设备内存不足需要杀死应用。
Future<void> getSessionID() async {
var sessionId = await Sign3Intelligence.getSessionId();
}
获取设备智能结果
- 要获取设备智能数据,请参考以下代码片段。
- 智能响应和智能错误模型由SDK公开。
Future<void> getIntelligence() async {
try {
var sign3IntelligenceResponse = await Sign3Intelligence.getIntelligence();
// 处理响应
} catch (e) {
// 处理错误消息
}
}
可选参数
- 您可以随时添加可选参数,如UserId、电话号码等,并更新Sign3Intelligence实例。
- 一旦选项被更新,它们会被重置。客户端需要显式更新选项才能摄入它们,否则将发送默认值OTHERS到后端。
- 每次更新选项时,都需要调用
getIntelligence()
函数。 - 要使用以下示例更新Sign3Intelligence实例及其可选参数:
UpdateOptions getUpdatedOptions() {
Map<String, String> additionalAttributes = {
"TRANSACTION_ID": "<TRANSACTION_ID>",
"DEPOSIT": "<AMOUNT>",
"WITHDRAWAL": "<AMOUNT>",
"METHOD": "UPI/CARD/NET_BANKING/WALLET",
"STATUS": "SUCCESS/FAILURE",
"CURRENCY": "USD/INR/GBP/etc.",
"TIMESTAMP": DateTime.now().millisecondsSinceEpoch.toString(),
};
UpdateOptions updateOptions = UpdateOptionsBuilder()
.setPhoneNumber("<phone_number>")
.setUserId("<user_id>")
.setPhoneInputType(PhoneInputType.GOOGLE_HINT)
.setOtpInputType(OtpInputType.AUTO_FILLED)
.setUserEventType(UserEventType.TRANSACTION)
.setMerchantId("<merchant_id>")
.setAdditionalAttributes(additionalAttributes)
.build();
return updateOptions;
}
Future<void> updateOptions() async {
await Sign3Intelligence.updateOptions(getUpdatedOptions());
}
Future<void> getIntelligence() async {
try {
var sign3IntelligenceResponse = await Sign3Intelligence.getIntelligence();
// 处理响应
} catch (e) {
// 处理错误消息
}
}
示例设备结果响应
成功的智能响应
{
"requestId": "403ad427-5018-47b9-b6e8-790e17a78201",
"newDevice": false,
"deviceId": "43fccb70-d64a-4c32-a251-f07c082d7034",
"vpn": false,
"proxy": false,
"emulator": true,
"cloned": false,
"geoSpoofed": false,
"rooted": false,
"ip": "106.219.161.71",
"remoteAppProviders": false,
"remoteAppProvidersCount": 3,
"mirroredScreen": false,
"hooking": true,
"factoryReset": true,
"appTampering": true,
"sessionRiskScore": 99.50516,
"deviceRiskScore": 99.50516,
"clientUserIds": [
"difansd23r32",
"2390ksdfaksd"
],
"sign3UserIds": [
"13asefnn324"
],
"gpsLocation": {
"address": "F2620, Block F, Sushant Lok III, Sector 57, Gurugram, Haryana 122011, India",
"adminArea": "Haryana",
"countryCode": "IN",
"countryName": "India",
"featureName": "F2620",
"latitude": "28.420385999999997",
"locality": "Gurugram",
"longitude": "77.088926",
"postalCode": "122011",
"subAdminArea": "Gurgaon Division",
"subLocality": "Sector 57"
},
"ipDetails": {
"country": "IN",
"fraudScore": 27.0,
"city": "New Delhi",
"isp": null,
"latitude": 28.60000038,
"region": "National Capital Territory of Delhi",
"asn": "",
"longitude": 77.19999695
},
"simInfo": {
"simIds": [
{
"simSlotIndex": 0,
"carrierName": "Android",
"id": 1
}
],
"totalSimUsed": 10
},
"additionalData": {}
}
错误响应
{
"requestId": "7e12d131-2d90-4529-a5c7-35f457d86ae6",
"errorMessage": "Sign3 Server Error"
}
更多关于Flutter智能签名插件flutter_intelligence_sign3的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter智能签名插件flutter_intelligence_sign3的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用flutter_intelligence_sign3
插件的一个基本示例。这个示例将展示如何初始化插件并捕获用户的签名。
首先,确保你已经在pubspec.yaml
文件中添加了flutter_intelligence_sign3
依赖:
dependencies:
flutter:
sdk: flutter
flutter_intelligence_sign3: ^最新版本号 # 请替换为实际最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤使用flutter_intelligence_sign3
插件:
- 导入插件:
在你的Dart文件中导入插件:
import 'package:flutter_intelligence_sign3/flutter_intelligence_sign3.dart';
- 初始化签名面板:
在你的UI中,你可以使用IntelligenceSign
小部件来显示签名面板。以下是一个简单的示例:
import 'package:flutter/material.dart';
import 'package:flutter_intelligence_sign3/flutter_intelligence_sign3.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter Intelligent Signature Example'),
),
body: SignaturePage(),
),
);
}
}
class SignaturePage extends StatefulWidget {
@override
_SignaturePageState createState() => _SignaturePageState();
}
class _SignaturePageState extends State<SignaturePage> {
final IntelligenceSignController _controller = IntelligenceSignController();
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Expanded(
child: IntelligenceSign(
controller: _controller,
backgroundColor: Colors.white,
penColor: Colors.black,
strokeWidth: 5.0,
clearButton: IntelligenceSignClearButton(
color: Colors.red,
),
),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: () async {
// 获取签名图片
Uint8List imageBytes = await _controller.getImage();
// 这里你可以将imageBytes保存到服务器或本地文件
print('Signature image bytes: $imageBytes');
},
child: Text('Get Signature'),
),
],
),
);
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
}
在这个示例中,我们创建了一个简单的Flutter应用,其中包含一个签名面板和一个按钮。用户可以在签名面板上绘制签名,然后点击按钮获取签名的图像数据。
IntelligenceSign
小部件用于显示签名面板。IntelligenceSignController
用于控制签名面板,如获取签名图像。clearButton
属性用于自定义清除按钮的样式。
当用户点击“Get Signature”按钮时,将调用_controller.getImage()
方法来获取签名的图像数据,并将其打印到控制台。你可以根据需要处理这些图像数据,例如将其保存到服务器或本地文件。
请确保在实际应用中处理错误和异常,并根据需要自定义UI和交互。