跳到主要内容

实现

在运行下面的示例之前,请先安装插件并按安装中的说明完成 Android 和 iOS 的原生配置。

startDeviceScan 的前置条件​

startDeviceScan 方法需要一个 token。该 token 是临时的,必须在调用 SDK 方法之前,由您的后端通过服务器到服务器请求向我们的 API 生成。

Endpoint 详情:

  • Método: POST
  • Path: /device_scan/token
  • Sandbox URL: https://d.sandbox.viewpkg.com/device_scan/token
  • Production URL: https://d.viewpkg.com/device_scan/token

Headers:

{
"Authorization": "YOUR_DEVICE_SCAN_API_KEY"
}

Body:

{
"session_id": "unique_session_id"
}

该 API 成功返回的响应中包含需要传给 startDeviceScan 方法的 token。

备注

设备扫描方法可以异步执行。因此无需阻塞主线程等待该方法完成。在后台处理设备扫描期间,用户可以正常与应用交互。

备注

我们建议尽早执行设备扫描方法。由于采集全部数据可能需要更长的执行时间,提前调用可确保提取到最完整的设备信息。



import 'dart:convert';
import 'dart:io';
import 'package:http/http.dart' as http;
import 'package:qitech_device_scan/qitech_device_scan.dart';

final _qitechDeviceScanPlugin = QitechDeviceScan();

// 第 1 步:通过服务器到服务器请求生成临时 token
Future<String?> fetchDeviceScanToken(String sessionId) async {
final response = await http.post(
Uri.parse('<DEVICE_SCAN_API_URL>'),
headers: {
HttpHeaders.authorizationHeader: '<API_KEY>',
HttpHeaders.contentTypeHeader: 'application/json',
},
body: jsonEncode({'session_id': sessionId}),
);

if (response.statusCode == 200) {
final data = jsonDecode(response.body);
return data['token'] as String?;
}
return null;
}

// 第 2 步:使用获取到的 token 初始化 SDK
final sessionId = '<SESSION_ID>';
final token = await fetchDeviceScanToken(sessionId);

if (token == null) {
print('Failed to fetch device scan token');
return;
}

final result = await _qitechDeviceScanPlugin.startDeviceScan(
token: token,
environment: CaaSEnvironment.sandbox,
sessionId: sessionId,
eventType: '<EVENT_TYPE>',
eventId: '<EVENT_ID>',
);

print('Device Scan result: $result');