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

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
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

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

Велосипедні додатки — конкурентний ринок зі 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. Кінцева точка підтримує multipart/form-data з полями data_type, name, activity_type.

Розробка велосипедного додатку з GPS-трекингом, BLE-датчиками, картою та Strava-експортом: 8-12 тижнів на одну платформу. Вартість розраховується індивідуально.