Розробка мобільного додатку для служби таксі (пасажир)
Поле введення адреси — найчастіше використовуване в додатку. Якщо автодоповнення працює повільніше 150 мс, користувач іде. Real-time карта з рухомими машинами — ще одна больова точка: смикані іконки викликають негативні відгуки. Платежі — третій камінь спотикання: нечитабельні помилки або довга обробка списують лояльність. На кожному проєкті ми стикаємося з цими вузькими місцями і знаємо, як їх обійти. Ми накопичили досвід на 30+ проєктах і знаємо, як уникнути цих проблем.
Як забезпечити автодоповнення адреси за 150 мс?
Google Places Autocomplete API дає якісні результати, але при великому обсязі запитів дорого. Mapbox Search API у 2-3 рази дешевший при порівнянній якості. Для СНД ефективний 2GIS Suggest API. Використовуйте sessionToken у Google Places API: один токен об'єднує серію автодоповнень + один Place Details запит в одну billing session. Без токена кожен символ — окремий запит за повною ціною. Економія може сягати $500 на місяць при 10 000 поїздок на день. Альтернатива — Mapbox, який знижує витрати на 60-70%.
| API | Швидкість | Вартість на 10 000 запитів | Регіон |
|---|---|---|---|
| Google Places Autocomplete | 150-200 мс | ~$2.83 (без sessionToken) | Весь світ |
| Mapbox Search API | 100-150 мс | ~$1.00 (з пакетом) | Весь світ |
| 2GIS Suggest API | 100-200 мс | Безкоштовно до 100 000 запитів/день | СНД |
Визначення поточного місцезнаходження як точки посадки: CLLocationManager / FusedLocationProviderClient з одноразовим запитом (requestLocation() на iOS), потім reverse geocoding для отримання читабельної адреси. Точність важлива: якщо reverse geocoding повертає «вулиця N» замість «вулиця N, 15» — користувач не зрозуміє, куди приїде машина.
Чому інтерполяція машин критична для UX?
Real-time рух машин на карті — це анімація маркерів за отриманими координатами. Наївна реалізація: отримав нову координату → переставив маркер. Результат — смикані іконки машин.
Правильна реалізація — інтерполяція між точками. На iOS: CADisplayLink з розрахунком проміжних позицій, GMSMarker.position змінюється плавно через CABasicAnimation. На Android: ValueAnimator з LatLngInterpolator — анімуємо LatLng маркера між попередньою та новою позицією за час, що дорівнює інтервалу оновлення (зазвичай 3-5 секунд). Іконка машини має також повертатися за напрямком руху: кут обчислюється через Math.atan2 за двома послідовними точками.
WebSocket або MQTT — для отримання координат водіїв у реальному часі. При переході у фон iOS відключає WebSocket. Коли користувач повертається в додаток — потрібен reconnect та запит актуального положення через REST, інакше маркер водія залишається на старому місці. Досвід показує, що без інтерполяції кількість скарг на «застиглі» машини зростає в 4 рази.
Як вирішити проблему затримки сповіщень?
Push-сповіщення: водій прийняв → водій їде → водій прибув → поїздка почалася → поїздка завершена. Кожен стан — свій текст і звук. На iOS sound custom files додаються в bundle і вказуються в APNs payload aps.sound. На Android — NotificationChannel з налаштуванням звуку через AudioAttributes.
Сповіщення «водій прибув» особливо критичне — користувач має вийти за 2-3 хвилини. Якщо push затримався через Doze mode — користувач спізниться, водій поїде, буде поганий відгук. Для цього сповіщення варто використовувати high-priority push (APNs apns-priority: 10, FCM priority: high) і продублювати через in-app WebSocket подію. Це знижує відсоток запізнень на 30%.
| Канал сповіщення | Затримка (типова) | Залежність від режимів енергозбереження |
|---|---|---|
| APNs High-Priority | 1-3 секунди | Низька |
| FCM High-Priority | 1-5 секунд | Середня (Doze) |
| In-app WebSocket | < 1 секунда | Відсутня (тільки в фореграунді) |
Оплата без головного болю
Stripe SDK (iOS, Android) — стандарт для міжнародних проєктів. PaymentSheet — готовий UI з підтримкою Apple Pay, Google Pay, карток. Інтеграція займає 1-2 дні. Для РФ/СНД — ЮКасса (Яндекс.Касса) або CloudPayments SDK.
Apple Pay вимагає окремого entitlement (com.apple.developer.in-app-payments) і registered merchant ID в Apple Developer Portal. Google Pay — декларація в AndroidManifest.xml і проходження production access review від Google.
Помилка при оплаті має давати зрозумілий текст, а не код card_declined_insufficient_funds. Stripe повертає decline_code — його потрібно мапити в людиночитабельні повідомлення всіма мовами додатку. Ми гарантуємо, що користувач не побачить технічного коду помилки.
Етапи та терміни
- Аудит вимог — 1-2 дні
- Проектування флоу пасажира — 3-5 днів
- Інтеграція карт і геокодування — 5-7 днів
- Real-time трекінг — 7-10 днів
- Платіжний модуль — 3-5 днів
- Push-сповіщення — 2-3 дні
- Тестування (включаючи edge-cases) — 5-7 днів
- Публікація в App Store і Google Play — 3-5 днів
Термін: від 8 до 14 тижнів. Вартість розраховується індивідуально після аналізу вимог.
Що входить у роботу?
- Вихідний код додатку на Swift/Kotlin/Flutter з повним стрікт-режимом
- Документація по API інтеграцій (карти, платежі, сповіщення)
- Інструкція з розгортання та публікації в сторах
- Консультація щодо проходження App Store Review Guidelines та Google Play Policy
- Гарантійна підтримка 30 днів після запуску (виправлення багів, консультації)
Отримайте консультацію — зв'яжіться з нами для обговорення вашого проєкту. Замовте розробку мобільного додатку таксі вже сьогодні.







