API Reference
English

Flutter

仅支持Android和iOS

集成要求

中国大陆合规指导说明

请注意,在贵司的App中集成同盾提供的SDK产品时:

1.1 根据《网络安全法》《电信条例》《电信和互联网用户个人信息保护规定》等相关法律法规要求及监管实践中的标准,在贵司的最终用户首次启动App并在贵司开始采集信息之前,贵司应以交互界面或设计(如隐私政策弹窗等)向最终用户完整告知收集、使用、与第三方共享最终用户个人信息的目的、方式和范围,并征得最终用户的明示同意。
1.2 为向贵司提供业务安全和风控服务,同盾SDK将采集、处理、使用用户的手机终端唯一标志信息IDFA、Android ID、OAID(包含VAID、AAID)、MAC 地址、WIFI列表、无线路由器标识(BSSID、SSID)、设备类型、设备型号、系统类型、位置信息(粗略位置信息、精准位置信息)、应用程序列表、运行中进程信息、网络制式、设备软件版本号、传感器(光传感器、重力传感器、磁场传感器、加速度传感器、陀螺仪传感器、心率传感器)相关设备信息。为确保贵司使用相关服务的合规性,前述隐私政策应涵盖对同盾SDK提供服务并采集、处理、使用相关信息的授权,以上内容供贵司参考,具体表述可由贵司根据贵司隐私协议的整体框架和内容自行确定。

个人信息类处理规则(隐私政策)https://www.tongdun.cn/other/privacy/id=4

使用说明:合规使用指导

Google Play 的数据安全要求

对于上传到 Google Play 商店的每款应用,Google 都要求向所有用户公开应用的隐私和安全做法。因此,当应用(或新版本)上传到 Play 商店时,Google 要求应用开发者填写数据安全表单。有关详细信息,请参阅为 Google Play 的数据安全部分提供信息。

如果您的应用包含我们的Android SDK,那么您可以使用下表作为参考来填写数据安全表单:

Google Play 控制台数据安全表单中的问题回复
您的应用是否收集或共享任何所需的用户数据类型?是的
收集什么类型的数据?设备或其他标识符
这些数据是被收集、共享,还是两者兼而有之?收集
这些数据是暂时处理的吗?是的
为什么要收集这些用户数据?欺诈预防、安全和合规

环境要求

AndroidiOS
兼容版本Android 5.0及以上系统iOS9.0及以上系统
支持架构armeabi, armeabi-v7a, arm64-v8a, x86armv7,arm64,x86_64

集成步骤

安装配置

插件安装

将trustdevice_pro_plugin添加到Flutter应用程序中的pubspec.yaml

dependencies:
  flutter:
    sdk: flutter
  ...
  trustdevice_pro_plugin: ^1.4.0

Android权限申请

在应⽤module下的 AndroidManifest.xml ⽂件中声明以下权限

<manifest>
   <!--必选权限-->
   <uses-permission android:name="android.permission.INTERNET"/>
   <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
   <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
   <!--如果您的应用是面向海外市场,在google play 上发布,请添加此项-->
   <uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
   <!--以下权限是可选权限,不声明此部分权限将放弃部分设备信息的采集,对数据分析及设备指纹的精准度有一定影响-->
   <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
   <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
   <uses-permission android:name="android.permission.READ_PHONE_STATE" />
   <!-- Android11及以上获取安装包列表需要该权限,采集安装包列表涉及到⻛险合规,是否需要该权限业务⽅⾃⾏选择 -->
   <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/>
</manifest>

权限说明

权限说明
INTERNET(必选)允许程序访问网络连接,发送请求与服务器进行通信
ACCESS_NETWORK_STATE(必选)获取网络连接状态信息
ACCESS_WIFI_STATE(必选)获取当前WiFi接入的状态以及WLAN热点的信息
AD_ID(海外必选)获取google 广告ID
ACCESS_COARSE_LOCATION获取粗略位置信息,精度大概误差在30~1500米
ACCESS_FINE_LOCATION获取精确位置信息,定位精度达10米以内
READ_PHONE_STATE读取SIM卡相关信息
QUERY_ALL_PACKAGES获取应用程序列表

注意事项

  • 确保在用户同意隐私协议后,再进行SDK初始化
  • 初始化不会采集任何数据

集成示例

在应用入口调用初始化并获取设备信息(集成使用时,可以在实际业务节点调用 getDeviceInfo 获取设备信息)

import 'package:trustdevice_pro_plugin/trustdevice_se_plugin.dart';

class _MyAppState extends State<MyApp> {
  final _trustdeviceSePlugin = TrustdeviceSePlugin();
  
  @override
  void initState() {
    super.initState
    _initWithOptions();
  }
  
  Future<void> _initWithOptions() async {
     try {
      var options = {
        "partner": "demo",
        "appKey": "appKey",
        "channel": "channel",
        "country": "cn",
      };
      
      // 初始化插件
      await _trustdeviceSePlugin.initWithOptions(options);
      
      // 获取设备信息
      final resultData = await _trustdeviceSePlugin.getDeviceInfo();
      
      // 解析返回的数据
      final fpVersion = resultData['fpVersion'] as String? ?? '';
      final blackBox = resultData['blackBox'] as String? ?? '';
      final anonymousId = resultData['anonymousId'] as String? ?? '';
      final deviceRiskScore = resultData['deviceRiskScore'] as int? ?? 0;
      final sealedResult = resultData['sealedResult'] as String? ?? '';
      final apiStatus = resultData['apiStatus'] as Map<String, dynamic>? ?? {};

      final statusCode = apiStatus['code'] as int? ?? -1;
      final statusMessage = apiStatus['message'] as String? ?? '';
      
     } on PlatformException catch (e) {
        // 获取失败
        print("e.code: ${e.code}");
        print("e.message: ${e.message}");  
      
     } catch (e) {
      	print(“获取错误: ${e}”);
     }
  }
  
}

响应结果

当 apiStatus['code'] == 0 时即代表获取设备信息成功,getDeviceInfo() 函数返回响应数据,包含以下信息。sealedResult 仅在启用了客户端密封结果时返回该信息。

字段描述
anonymousId设备匿名ID,设备标识
blackBox调用日志查询标识
fpVersionSDK版本号
deviceRiskScore当前设备风险分
sealedResult加密的设备信息,二进制 Base64 编码字符串,仅在客户端密封结果开启时返回

获取失败可以捕获 PlatformException ,code和message对应值如下表:

codemessage备注
0Success.成功
1000Invalid parameters.传入的参数无效
1001SDK error.SDK 发生异常,可能原因: 未调用初始化函数
1002Network error.网络错误
1003API error.后端接口返回错误
1004Traffic limit.网关限流返回
1100Unknown error未知错误

其他说明

获取版本号

_trustdeviceSePlugin.getSDKVersion();

混淆打包

如果 Android 需要使用 proguard 进行混淆打包,请在 proguard 配置文件添加如下代码:

-keep class com.trustdecision.**{*;}

全部配置

配置 key说明平台示例代码移除字段
partner(必须)合作方编码,请联系运营获取Alloptions["partner"] = "请输入您的合作方编码"
appKey(必须)应用标识,参考如何申请appKeyAlloptions["appKey"] = "请输入您的appKey"
country(必须)cn代表中国,sg代表新加坡,us代表北美,fra代表欧洲,idna代表印尼Alloptions["country"] = "请输入您所在的国家地区"
channel请联系运营获取Alloptions["channel"] = "请输入您的channel"
debug反调试功能,默认关闭,开发阶段请打开,发布时关闭Alloptions["debug"] = true
timeLimit网络请求回调的超时时间,单位秒,默认为15sAlloptions["timeLimit"] = 5
location是否采集地理位置信息,默认开启Alloptions["location"] = true
IDFA是否采集广告标识符,默认开启iOSoptions["IDFA"] = trueidfa
deviceName是否采集设备名称,默认开启iOSoptions["deviceName"] = truedevice_name
runningTasks是否获取正在运行的任务,默认开启Androidoptions["runningTasks"] = truerunning_packages
sensor是否采集传感器信息,默认采集Androidoptions["sensor"] = truemangetic_field_sensor、gyroscope_sensor、light_sensor、accelerator_data、gravity_data
readPhone是否采集READ_PHONE_STATE权限相关信息,默认采集Androidoptions["readPhone"] = truecountry_iso、carrier、network_operator、sim_operator、phone_type、radio_type、device_svn
installPackageList是否采集安装包列表,默认采集Androidoptions["installPackageList"] = trueinstalled_packages
OAID是否采集oaid,默认采集Androidoptions["OAID"] = falseoaid
AID是否采集aid,默认采集Androidoptions["AID"] = falseaid
ANDROID_ID是否采集androidid,默认采集Androidoptions["ANDROID_ID"] = falseandroidid
customMessage自定义消息,sdk支持透传和存储Alloptions["customMessage"] = ""