Flutter驾驶核心功能插件flutter_drivekit_core的使用
Flutter驾驶核心功能插件flutter_drivekit_core的使用
flutter_drivekit_core
插件为 Flutter 提供了对 DriveKit Core
的接口。DriveKit
是一个用于分析驾驶员行为和车辆数据的平台。要了解更多关于 DriveKit
的信息,请访问我们的DriveKit 文档。
安装
要使用此插件,可以在项目中运行以下命令:
flutter pub add drivekit_core
现在,你可以导入 package:flutter_drivekit_core/flutter_drivekit_core.dart
并在 Dart 代码中使用 DriveKitCore
。
权限
我们推荐使用 permission_handler
插件来处理权限问题。你可以在示例应用中找到实现示例。
蓝牙授权
即使你的应用不使用蓝牙,你必须在 iOS 端包含使用描述。有关更多详细信息,请参阅原生文档。
手动初始化
如果你已禁用了 DriveKit
自动初始化:
- 在 Android 项目中,在
MainApplication
类内调用initialize
方法。
// MainApplication.kt
// …
override fun onCreate() {
super.onCreate()
DriveKit.initialize(this)
// …
}
- 在 iOS 项目中,在
AppDelegate
内调用initialize
方法。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
DriveKit.shared.initialize()
(…)
}
使用
为了完成模块的初始化,你需要:
- 指定你的 API 密钥;
- 识别驾驶员的唯一 ID。
await DriveKitCore.instance.setApiKey(apiKey);
await DriveKitCore.instance.setUserId(userId);
现在,你可以根据需要配置 DriveKit Core
,并使用其他 DriveKit
插件来开始分析行程。
API
以下是 DriveKitCore
的 API 列表:
方法 | 返回类型 | iOS | Android |
---|---|---|---|
getApiKey | Future<String?> |
✅ | ✅ |
setApiKey | Future<void> |
✅ | ✅ |
getUserId | Future<String?> |
✅ | ✅ |
setUserId | Future<void> |
✅ | ✅ |
updateUserId | Future<void> |
✅ | ✅ |
getUserInfo | Future<void> |
✅ | ✅ |
updateUserInfo | Future<void> |
✅ | ✅ |
addDriveKitListener | Future<void> |
✅ | ✅ |
removeDriveKitListener | Future<void> |
✅ | ✅ |
removeAllDriveKitListeners | Future<void> |
✅ | ✅ |
addDeviceConfigurationListener | Future<void> |
✅ | ✅ |
removeDeviceConfigurationListener | Future<void> |
✅ | ✅ |
removeAllDeviceConfigurationListeners | Future<void> |
✅ | ✅ |
deleteAccount | Future<void> |
✅ | ✅ |
enableLogging | Future<void> |
✅ | ✅ |
disableLogging | Future<void> |
✅ | ✅ |
getLogUriFile | Future<Uri?> |
✅ | ✅ |
isTokenValid | Future<bool> |
✅ | ✅ |
reset | Future<void> |
✅ | ✅ |
getApiKey
Future<String?> getApiKey()
该方法可用于检查在 SDK 中设置的 DriveKit
API 密钥。
final apiKey = await DriveKitCore.instance.getApiKey();
setApiKey
Future<void> setApiKey()
要使用 DriveKit
模块,你需要从 DriveQuant
获取一个 API 密钥。如果没有 API 密钥,请联系 contact@drivequant.com
。
一旦你在应用中安全地存储了你的 API 密钥,你可以通过调用以下方法来配置 DriveKit
:
await DriveKitCore.instance.setApiKey('MyAPIKey');
getUserId
Future<String?> getUserId()
该方法可用于检索当前用户 ID。
final userId = await DriveKitCore.instance.getUserId();
setUserId
Future<void> setUserId()
每个驾驶员都必须被分配一个唯一的标识符。一旦你有了这个标识符,可以通过调用以下方法来配置 DriveKit
:
await DriveKitCore.instance.setUserId('MyUniqueUserId');
ℹ️
你可以随时在代码中调用这两个配置方法。
DriveKit
会将值本地保存。如果应用被杀死并重新启动,DriveKit
将会自动重新配置。
⚠️
我们建议不要使用电子邮件地址或电话号码来定义唯一的用户 ID。建议设置一个唯一的、通用且匿名的用户 ID。例如,你可以为每个用户生成一个全局唯一标识符(GUID)。
⚠️
除非设置了 API 密钥和用户 ID,否则
DriveKit SDK
将无法工作。
updateUserId
Future<void> updateUserId()
可以调用以下方法更新用户 ID:
await DriveKitCore.instance.updateUserId('MyNewUniqueUserId');
ℹ️
若要能够检查
userId
是否更新以及捕获更新状态,必须使用DriveKitListener
监听器。
getUserInfo
Future<GetUserInfoResponse> getUserInfo({
SynchronizationType synchronizationType = SynchronizationType.defaultSync,
});
可以通过调用以下方法获取用户的详细信息(如名字、姓氏和昵称):
final userInfo = await DriveKitCore.instance.getUserInfo();
updateUserInfo
Future<bool> updateUserInfo(UserInfo userInfo)
可以添加用户账户的详细信息,如名字、姓氏和昵称。
这些细节是可选的,并且可以选择使用户账户匿名。
const userInfo = UserInfo(
firstname: 'yourFirstname',
lastname: 'yourLastname',
pseudo: 'yourPseudo',
);
final success = await DriveKitCore.instance.updateUserInfo(userInfo);
addDriveKitListener
void addDriveKitListener(DriveKitListener listener)
DriveKitListener
是一个接口,提供了有用的事件关于用户生命周期。你可以通过调用以下代码注册到这个监听器:
DriveKitCore.instance.addDriveKitListener(
DriveKitListener(
onConnected: () {
(…)
},
onDisconnected: () {
(…)
},
userIdUpdateStatus: (status, userId) {
(…)
},
onAuthenticationError: (errorType) {
(…)
},
onAccountDeleted: (status) {
(…)
},
onBackgroundFetchStatusChanged: (status) {
(…)
},
),
);
方法 | 描述 |
---|---|
onConnected | 用户成功登录。 |
onDisconnected | 用户断开连接(手动登出或账户被禁用/删除)。 |
userIdUpdateStatus | 更新用户 ID 请求已处理,具有 <code>UpdateUserIdStatus</code> 状态值。 |
onAuthenticationError | 登录失败,因为 <code>RequestError</code> 。 |
onAccountDeleted | 删除账户请求已处理,具有 <code>DeleteAccountStatus</code> 状态值。 |
onBackgroundFetchStatusChanged | 后台抓取状态已更改,具有 <code>BackgroundFetchStatus</code> 状态值。 |
removeDriveKitListener
void removeDriveKitListener(DriveKitListener listener)
可以通过调用以下方法移除特定的 DriveKitListener
:
DriveKitCore.instance.removeDriveKitListener(listener);
removeAllDriveKitListeners
void removeAllDriveKitListeners()
可以通过调用以下方法移除所有 DriveKitListener
:
DriveKitCore.instance.removeAllDriveKitListeners();
addDeviceConfigurationListener
void addDeviceConfigurationListener(DKDeviceConfigurationListener listener)
DKDeviceConfigurationListener
是一个接口,用于获取设备配置更改时的回调。可以通过调用以下方法添加监听器并获取设备配置事件的通知:
DriveKitCore.instance.addDeviceConfigurationListener(
DKDeviceConfigurationListener(
onDeviceConfigurationChanged: (event) => {
// …
},
),
);
方法 | 描述 |
---|---|
locationPermissionValid | 位置权限状态更改并且已授予。 |
locationPermissionInvalid | 位置权限状态更改并且已撤销。 |
activityPermissionValid | 活动权限状态更改并且已授予。 |
activityPermissionInvalid | 活动权限状态更改并且已撤销。 |
notificationPermissionValid | 通知权限状态更改并且已授予。 |
notificationPermissionInvalid | 通知权限状态更改并且已撤销。 |
appBatteryOptimisationValid | Android 专用。应用程序电池优化设置更改并且有效。 |
appBatteryOptimisationInvalid | Android 专用。应用程序电池优化设置更改并且无效。 |
lowPowerModeValid | iOS 专用。低功耗模式设置更改并且有效。 |
lowPowerModeInvalid | iOS 专用。低功耗模式设置更改并且无效。 |
autoResetPermissionValid | Android 专用。自动重置设置状态更改并且已授予。 |
autoResetPermissionInvalid | Android 专用。自动重置设置状态更改并且已撤销。 |
nearbyDevicesPermissionValid | Android 专用。附近设备权限状态更改并且已授予。 |
nearbyDevicesPermissionInvalid | Android 专用。附近设备权限状态更改并且已撤销。 |
bluetoothPermissionValid | iOS 专用。蓝牙权限状态更改并且已授予。 |
bluetoothPermissionInvalid | iOS 专用。蓝牙权限状态更改并且已撤销。 |
locationSensorValid | 位置传感器状态更改并且已打开。 |
locationSensorInvalid | 位置传感器状态更改并且已关闭。 |
bluetoothSensorValid | 蓝牙传感器状态更改并且已打开。 |
bluetoothSensorInvalid | 蓝牙传感器状态更改并且已关闭。 |
removeDeviceConfigurationListener
void removeDeviceConfigurationListener(DKDeviceConfigurationListener listener)
可以通过调用以下方法移除特定的 DKDeviceConfigurationListener
:
DriveKitCore.instance.removeDeviceConfigurationListener(listener);
removeAllDeviceConfigurationListeners
void removeAllDeviceConfigurationListeners()
可以通过调用以下方法移除所有 DKDeviceConfigurationListener
:
DriveKitCore.instance.removeAllDeviceConfigurationListeners();
deleteAccount
Future<void> deleteAccount({bool instantDeletion = false});
你可以删除 DriveKit
中的驾驶员账户。这个操作会删除与账户相关的所有数据。
删除可以立即执行或延迟执行。
- 在第一种情况下,当方法被调用时,账户会被立即删除。
- 在第二种情况下,驾驶员有 30 天的时间重新登录应用并恢复账户。
要删除驾驶员账户,可以使用以下方法:
await DriveKitCore.instance.deleteAccount(instantDeletion: true);
instantDeletion
可以有两个值:
false
: 默认值,允许用户通过使用相同的凭据重新登录来恢复已删除的账户。用户从账户被删除之日起有 30 天时间。true
: 允许立即删除账户。账户及相关数据将被立即删除,且无法回滚。
ℹ️
需要您的团队激活删除功能才能使用此方法。如有需要,请联系
DriveQuant
。
ℹ️
若要能够检查账户删除是否完成,必须使用
DriveKitListener
接口。
⚠️
仅在
onAccountDeleted()
回调中的状态值为SUCCESS
时才应恢复DriveKit
API 密钥。
日志
Future<void> enableLogging({
String androidLogPath = '/DriveKit',
bool showInConsole = true,
});
Future<void> disableLogging({bool showInConsole = true});
选项 | 默认值 | 描述 |
---|---|---|
bool showInConsole |
true |
设置为 false 如果不想在控制台上显示日志 |
String androidLogPath |
'/DriveKit' |
仅限 Android - 日志文件将保存的路径 |
DriveKit
带有一个默认启用的日志功能。这个功能可以帮助你快速识别问题的原因。我们建议保持日志开启,因为它不会消耗内存空间且在支持阶段很有用。但是,如果不想要它,也可以禁用。
⚠️ Android
如果你的设备版本在 Android 10 或以下,可以直接在 Android/data/ 中找到日志文件。
ℹ️ iOS
日志将写入应用程序目录。每月将写入一个日志文件,文件名为
log-<YEAR>-<MONTH>.txt
(例如:log-2019-8.txt
)。所有DriveKit
模块的日志都会写入此文件。
⚠️ iOS
若要在用户智能手机上写入日志文件,必须在
info.plist
文件中添加以下条目:UIFileSharingEnabled
和LSSupportsOpeningDocumentsInPlace
,并将它们设置为true
。
通过调用以下方法禁用日志:
await DriveKitCore.instance.disableLogging();
要启用日志,可以调用以下方法指定日志目录的路径:
await DriveKitCore.instance.enableLogging(showInConsole: true, androidLogPath: '/YourDriveKitFolder');
getLogUriFile
Future<Uri?> getLogUriFile();
可以通过调用以下方法检索日志文件的 URI:
final logFile = await DriveKitCore.instance.getLogUriFile();
isTokenValid
Future<bool> isTokenValid();
一旦你使用密钥和用户 ID 连接到 SDK,可以通过调用以下方法检查生成的令牌的有效性:
final isTokenValid = await DriveKitCore.instance.isTokenValid();
reset
Future<void> reset();
如果需要重置 DriveKit
配置(例如用户登出),可以通过调用以下方法:
await DriveKitCore.instance.reset();
示例代码
示例代码位于以下位置:
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
[@override](/user/override)
Widget build(BuildContext context) {
return const MaterialApp(home: HomePage());
}
}
class HomePage extends StatefulWidget {
const HomePage({super.key});
[@override](/user/override)
State<HomePage> createState() => _HomePageState();
}
class _HomePageState extends State<HomePage> {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: const Text('DriveKitCore Example')),
body: const Column(
children: [
Text('Please refer to the main flutter example SDK'),
Text(
'https://github.com/DriveQuantPublic/flutter-drivekit/tree/main/example',
),
],
),
);
}
}
更多关于Flutter驾驶核心功能插件flutter_drivekit_core的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter驾驶核心功能插件flutter_drivekit_core的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是一个关于如何使用 flutter_drivekit_core
插件的简单示例代码。请注意,这个插件可能是一个假设的插件名称,因为具体的插件实现和API可能会有所不同。不过,我会根据常见的Flutter插件使用模式给出一个示例。
首先,确保你已经在 pubspec.yaml
文件中添加了 flutter_drivekit_core
依赖:
dependencies:
flutter:
sdk: flutter
flutter_drivekit_core: ^x.y.z # 替换为实际的版本号
然后,运行 flutter pub get
来获取依赖。
接下来,在你的 Flutter 应用中使用这个插件。假设 flutter_drivekit_core
提供了一些核心驾驶功能,比如启动引擎、加速、减速和停车等。以下是一个简单的示例代码:
import 'package:flutter/material.dart';
import 'package:flutter_drivekit_core/flutter_drivekit_core.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter DriveKit Demo',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: DriveKitScreen(),
);
}
}
class DriveKitScreen extends StatefulWidget {
@override
_DriveKitScreenState createState() => _DriveKitScreenState();
}
class _DriveKitScreenState extends State<DriveKitScreen> {
DriveKitController? _driveKitController;
@override
void initState() {
super.initState();
// 初始化 DriveKit 控制器
_driveKitController = DriveKitController();
// 假设需要初始化引擎等准备工作
_driveKitController!.startEngine();
}
@override
void dispose() {
// 释放资源,停止引擎
_driveKitController?.stopEngine();
_driveKitController = null;
super.dispose();
}
void _accelerate() {
_driveKitController?.accelerate(speed: 50); // 加速到50km/h
}
void _decelerate() {
_driveKitController?.decelerate(speed: 20); // 减速到20km/h
}
void _stop() {
_driveKitController?.stop(); // 停车
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Flutter DriveKit Demo'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
ElevatedButton(
onPressed: _accelerate,
child: Text('加速'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _decelerate,
child: Text('减速'),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _stop,
child: Text('停车'),
),
],
),
),
);
}
}
// 假设 DriveKitController 类如下(实际上这个类应该由 flutter_drivekit_core 插件提供)
class DriveKitController {
void startEngine() {
// 启动引擎的逻辑
print('引擎已启动');
}
void stopEngine() {
// 停止引擎的逻辑
print('引擎已停止');
}
void accelerate({required double speed}) {
// 加速的逻辑
print('加速到 $speed km/h');
}
void decelerate({required double speed}) {
// 减速的逻辑
print('减速到 $speed km/h');
}
void stop() {
// 停车的逻辑
print('车辆已停车');
}
}
请注意,上面的 DriveKitController
类是一个假设的实现,实际的 flutter_drivekit_core
插件应该会提供类似的接口来控制驾驶功能。你需要参考插件的官方文档来了解具体的API和使用方法。
另外,由于 flutter_drivekit_core
可能是一个假设的插件名称,因此在实际使用时,你需要替换为真实的插件名称和版本号,并根据插件的文档进行相应的调整。