Реализация удалённого запуска двигателя через мобильное приложение

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация удалённого запуска двигателя через мобильное приложение
Сложная
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация удалённого запуска двигателя через мобильное приложение

Удалённый запуск двигателя — одна из самых технически ответственных функций в автомобильном приложении. Случайный или несанкционированный старт двигателя — это угроза безопасности людей рядом с машиной. Это не CRUD-операция, это команда с серьёзными последствиями, и архитектура должна это отражать.

Стек: телематический блок + GSM + защищённая команда

Удалённый старт реализуется через телематический блок управления (ТБУ) с реле, подключёнными к цепи запуска автомобиля. Бюджетные варианты — Pandora, StarLine, Scher-Khan с GSM-модулем и API производителя. Кастомные решения для автопарков — Teltonika FMB003/FMB125 с DOUT-выходами и командами через MQTT или SMS.

Pandora/StarLine предоставляют облачный API. Команда запуска:

suspend fun remoteStart(carId: Long): EngineStartResult {
    // 1. Проверить предусловия через API
    val status = api.getVehicleStatus(carId)
    check(!status.isMoving) { "Автомобиль в движении" }
    check(status.doorsLocked) { "Двери не заперты" }
    check(status.hoodClosed) { "Капот открыт" }

    // 2. Запрос с TOTP-подтверждением (или биометрией)
    val otp = totpManager.generateOtp(currentUser.secret)

    // 3. Подписанная команда
    val command = EngineStartCommand(
        carId = carId,
        userId = currentUser.id,
        timestamp = Instant.now().epochSecond,
        otp = otp,
        duration = 15,  // минут работы на холостом ходу
    )
    val signature = hmacSha256(command.serialize(), currentUser.commandSecret)

    return api.sendCommand(command.copy(signature = signature))
}

Биометрическое подтверждение на устройстве

Перед отправкой команды — обязательное подтверждение через BiometricPrompt (Android) или LocalAuthentication (iOS). Не PIN, не пароль — именно биометрия или device credential:

suspend fun confirmWithBiometrics(context: FragmentActivity): Boolean {
    val executor = ContextCompat.getMainExecutor(context)
    val prompt = BiometricPrompt(context, executor, object : BiometricPrompt.AuthenticationCallback() {
        override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
            continuation.resume(true)
        }
        override fun onAuthenticationFailed() {
            continuation.resume(false)
        }
        override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
            continuation.resumeWithException(BiometricException(errString.toString()))
        }
    })

    val info = BiometricPrompt.PromptInfo.Builder()
        .setTitle("Подтвердите запуск двигателя")
        .setSubtitle("Toyota Camry · ${car.plateNumber}")
        .setAllowedAuthenticators(BiometricManager.Authenticators.BIOMETRIC_STRONG
                or BiometricManager.Authenticators.DEVICE_CREDENTIAL)
        .build()

    return suspendCoroutine { continuation = it.also { prompt.authenticate(info) } }
}

На iOS аналог — LAContext.evaluatePolicy(.deviceOwnerAuthenticationWithBiometrics).

Статус выполнения команды и timeout

Команда на запуск отправлена — двигатель не стартует мгновенно. GSM-команда доходит за 2-15 секунд, запуск занимает ещё 3-5 секунд. В UI — прогресс-индикатор с этапами:

enum EngineStartStage {
  sending,        // команда уходит на сервер
  delivered,      // сервер подтвердил доставку на ТБУ
  cranking,       // ТБУ подал сигнал стартеру
  running,        // двигатель запустился (ignition = on, rpm > 400)
  failed,         // не запустился за отведённое время
}

Состояние обновляем через WebSocket или polling статуса устройства. Таймаут 60 секунд — если двигатель не запустился, показываем ошибку и отключаем реле стартера (безопасная остановка попытки).

Ограничения безопасности

Команда не выполняется если:

  • автомобиль уже движется (скорость > 0 из GPS)
  • капот открыт (DINPUT из ТБУ)
  • прошло менее 30 секунд с последней попытки запуска
  • пользователь сменил пароль или устройство за последние 24 часа (защита от угона аккаунта)

Каждая попытка — в аудит-лог с координатами автомобиля, ID пользователя, устройства, IP и результатом.

Разработка функции удалённого запуска двигателя с биометрическим подтверждением и контролем статуса: 5–8 недель (в составе более широкого приложения). Стоимость рассчитывается индивидуально после анализа API телематического блока.