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()
    (…)
}

使用

为了完成模块的初始化,你需要:

  1. 指定你的 API 密钥;
  2. 识别驾驶员的唯一 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 文件中添加以下条目:UIFileSharingEnabledLSSupportsOpeningDocumentsInPlace,并将它们设置为 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

1 回复

更多关于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 可能是一个假设的插件名称,因此在实际使用时,你需要替换为真实的插件名称和版本号,并根据插件的文档进行相应的调整。

回到顶部