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

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

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

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Разработка мобильного приложения для велосипедистов
Средняя
от 2 недель до 3 месяцев
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • 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

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

Велосипедные приложения — конкурентный рынок с Strava, Komoot, Wahoo. Выживают либо нишевые продукты (треккинг для конкретного региона, клубные функции, интеграция с конкретным железом), либо приложения с уникальной моделью данных. Разработка начинается с понимания, зачем пользователю ещё одно приложение и что конкретно оно делает лучше.

GPS-трекинг: качество данных важнее частоты

CLLocationManager на iOS с desiredAccuracy = kCLLocationAccuracyBestForNavigation и distanceFilter = 5 (обновление каждые 5 метров) — стандартная конфигурация для трекинга активности. На Android — Fused Location Provider с PRIORITY_HIGH_ACCURACY и интервалом 1-2 секунды.

Проблема GPS на велосипеде — не точность в чистом поле, а тоннели, путепроводы, плотная городская застройка. Точки «прыгают» на 50-100 метров. Сырой трек без фильтрации — это дерганая линия на карте и завышенный пробег.

Фильтрация Калмана — стандартный подход. Простой алгоритм сглаживания для GPS:

class GPSKalmanFilter {
    private var latitude: Double = 0
    private var longitude: Double = 0
    private var variance: Double = -1
    private let minAccuracy: Double = 1.0

    mutating func process(lat: Double, lon: Double, accuracy: Double, timestamp: TimeInterval) -> CLLocationCoordinate2D {
        let accuracy = max(accuracy, minAccuracy)

        if variance < 0 {
            latitude = lat; longitude = lon
            variance = accuracy * accuracy
        } else {
            let timeStep = timestamp - lastTimestamp
            if timeStep > 0 {
                variance += timeStep * 3.0 // Q: process noise
            }
            let K = variance / (variance + accuracy * accuracy)
            latitude += K * (lat - latitude)
            longitude += K * (lon - longitude)
            variance = (1 - K) * variance
        }
        lastTimestamp = timestamp
        return CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
    }
}

Дополнительно: точки с horizontalAccuracy > 50 метров отбрасываем полностью. Скачок более 10 м/с (36 км/ч) при ожидаемой скорости 25 км/ч — тоже выброс.

Bluetooth-датчики по протоколу ANT+/BLE

Велосипедисты используют внешние датчики: датчик каденса (обороты педалей), датчик мощности (ваттметр), пульсометр, датчик скорости. Протоколы — Bluetooth LE с профилями из GATT Cycling Profile (CP, CSC, HR) и проприетарный ANT+.

ANT+ на iOS недоступен из App Store (только через MFi-аксессуары). На Android — библиотека ant-android-sdk-stub через Ant+ Plugin Service. Реалистичная альтернатива — BLE-датчики с двойной трансляцией ANT+/BLE (Garmin, Wahoo, большинство современных датчиков).

// Android: подписка на Cycling Speed and Cadence (CSC) GATT
val CSC_SERVICE = UUID.fromString("00001816-0000-1000-8000-00805f9b34fb")
val CSC_MEASUREMENT = UUID.fromString("00002a5b-0000-1000-8000-00805f9b34fb")

fun parseCscMeasurement(value: ByteArray): CscData {
    val flags = value[0].toInt()
    var offset = 1
    var wheelRevolutions = 0L
    var wheelEventTime = 0

    if (flags and 0x01 != 0) { // Wheel Revolution Data present
        wheelRevolutions = value.getLong32(offset)
        wheelEventTime = value.getUInt16(offset + 4)
        offset += 6
    }
    var crankRevolutions = 0
    var crankEventTime = 0
    if (flags and 0x02 != 0) { // Crank Revolution Data present
        crankRevolutions = value.getUInt16(offset)
        crankEventTime = value.getUInt16(offset + 2)
    }
    return CscData(wheelRevolutions, wheelEventTime, crankRevolutions, crankEventTime)
}

Скорость из CSC считается по дельте оборотов колеса и дельте времени события. Длина окружности колеса — настройка пользователя или автовычисление по размеру шины.

Навигация по маршруту

Построение маршрута по велодорожкам — OpenStreetMap через OSRM или GraphHopper с велосипедным профилем. Отображение — MapLibre GL (открытый) или Mapbox SDK. Пошаговая навигация голосом: AVSpeechSynthesizer на iOS, TextToSpeech на Android — триггер за 150-200 метров до поворота.

Офлайн-карты критичны для велотуризма в горах. Mbtiles или PMTiles формат, загрузка региона заранее. MapLibre поддерживает офлайн из коробки.

Статистика и интеграция

После поездки: пробег, время, набор высоты (из CLLocationManager.altitude с барометрической коррекцией на iOS, аналогично через SensorManager на Android), средняя/максимальная скорость, мощность, каденс. Экспорт в .fit (формат Garmin/Strava) или GPX.

Интеграция со Strava через OAuth2 + Strava API v3: загрузка активности через POST /uploads с файлом .fit или .gpx. Koнечная точка поддерживает multipart/form-data с полями data_type, name, activity_type.

Разработка велосипедного приложения с GPS-трекингом, BLE-датчиками, картой и Strava-экспортом: 8-12 недель на одну платформу. Стоимость рассчитывается индивидуально.