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

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

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

Рынок беговых приложений перенасыщен: Nike Run Club, Runkeeper, Adidas Running. Новый продукт выживает за счёт специализации: корпоративные беговые клубы, приложения для конкретных событий (марафоны, трейлы), интеграция с тренерскими платформами, локальные сообщества. Технически разработка беговых приложений хорошо изучена, но детали реализации HealthKit/Health Connect и работы с GPS в фоне регулярно вызывают вопросы.

GPS-трекинг в фоне: разные ограничения на iOS и Android

На Android foreground service с уведомлением — единственный надёжный способ писать GPS в фоне. С Android 10+ нужен FOREGROUND_SERVICE_TYPE_LOCATION в манифесте. Fused Location Provider с PRIORITY_HIGH_ACCURACY и interval = 1000 мс:

class RunTrackingService : Service() {
    private lateinit var fusedLocationClient: FusedLocationProviderClient
    private val locationCallback = object : LocationCallback() {
        override fun onLocationResult(result: LocationResult) {
            result.lastLocation?.let { location ->
                if (location.accuracy < 20f) { // отбрасываем неточные точки
                    processLocation(location)
                }
            }
        }
    }

    override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int {
        startForeground(NOTIFICATION_ID, buildNotification())

        val request = LocationRequest.Builder(1000L)
            .setPriority(Priority.PRIORITY_HIGH_ACCURACY)
            .setMinUpdateDistanceMeters(3f)
            .build()

        fusedLocationClient.requestLocationUpdates(request, locationCallback, mainLooper)
        return START_STICKY
    }
}

На iOS — CLLocationManager с allowsBackgroundLocationUpdates = true и capability Background Modes → Location updates. Важно: pausesLocationUpdatesAutomatically = false, иначе iOS остановит трекинг если телефон лежит без движения больше нескольких минут. Это критично при пробежке в гору медленным темпом — iOS думает, что пользователь остановился.

HealthKit и Health Connect: интеграция с платформенным здоровьем

На iOS данные пробежки пишем в HealthKit через HKWorkout:

func saveRun(distance: Double, duration: TimeInterval, route: [CLLocation]) async throws {
    let workoutBuilder = HKWorkoutBuilder(healthStore: healthStore,
                                          configuration: HKWorkoutConfiguration().apply {
                                              $0.activityType = .running
                                              $0.locationType = .outdoor
                                          },
                                          device: .local())

    try await workoutBuilder.beginCollection(at: Date().addingTimeInterval(-duration))

    let distanceSample = HKQuantitySample(
        type: HKQuantityType(.distanceWalkingRunning),
        quantity: HKQuantity(unit: .meter(), doubleValue: distance),
        start: workoutBuilder.startDate!, end: Date()
    )

    try await workoutBuilder.addSamples([distanceSample])
    let workout = try await workoutBuilder.finishWorkout()

    // Сохраняем маршрут
    let routeBuilder = HKWorkoutRouteBuilder(healthStore: healthStore, device: .local())
    try await routeBuilder.insertRouteData(route)
    try await routeBuilder.finishRoute(with: workout, metadata: nil)
}

На Android — Health Connect API (заменил Google Fit в 2023). ExerciseSessionRecord + DistanceRecord + RouteRecord. Требует androidx.health.connect:connect-client и разрешений WRITE_EXERCISE, WRITE_DISTANCE, WRITE_EXERCISE_ROUTE.

Темп, дистанция и автопаузировка

Темп (мин/км) — производная скорости: pace = 1000 / speed_ms_in_mps. Усредняем по скользящему окну 5-10 секунд, иначе темп скачет при каждом GPS-обновлении.

Автопауза при остановке: если скорость < 0.5 м/с в течение 5 секунд — пауза. Возобновление — при скорости > 1.5 м/с. Эти пороги нужно делать настраиваемыми — бегуны в горах на крутом подъёме могут идти пешком.

Анонс темпа голосом (каждый километр): AVSpeechSynthesizer / TextToSpeech с шаблоном «Километр {N}, темп {M} минут {S} секунд, всего {T}». Важно озвучивать при заблокированном экране — AVAudioSession.Category.playback (iOS).

Пульсометр и мощность бега

Bluetooth LE Heart Rate Profile (0x180D, 0x2A37) — стандарт для всех пульсометров (Polar, Wahoo TICKR, Garmin HRM). Разбор фрейма измерения пульса:

fun parseHeartRateMeasurement(value: ByteArray): Int {
    val flags = value[0].toInt()
    return if (flags and 0x01 == 0) {
        value[1].toInt() and 0xFF // 8-bit value
    } else {
        (value[1].toInt() and 0xFF) + ((value[2].toInt() and 0xFF) shl 8) // 16-bit
    }
}

Мощность бега — нишевая метрика. Stryd Pod (нагрудный датчик, BLE) отдаёт Running Power через Cycling Power Profile (0x1818). Тот же GATT-профиль, что у велосипедных ваттметров — удобно если в приложении уже есть поддержка CP.

Разработка беговое приложения с GPS-трекингом в фоне, HealthKit/Health Connect, BLE пульсометром и голосовыми анонсами: 7-10 недель на одну платформу. Кросс-платформа Flutter: 10-14 недель. Стоимость рассчитывается индивидуально.