Налаштування OkHttp для мережевих запитів в Android-додатку

Налаштування OkHttp для мережевих запитів в Android-додатку Уявіть: додаток гальмує на 3G, відповіді API приходять через 10 секунд, а трафік летить марно. Ми стикалися з десятками таких проектів, де корінь проблеми — в конфігурації OkHttp. Правильне налаштування цього HTTP-клієнта прискорює запит

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Налаштування OkHttp для мережевих запитів в Android-додатку
Середній
від 1 дня до 3 днів

Наші компетенції:

Часті запитання

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    894
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    782
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    1002
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    597

Налаштування OkHttp для мережевих запитів в Android-додатку

Уявіть: додаток гальмує на 3G, відповіді API приходять через 10 секунд, а трафік летить марно. Ми стикалися з десятками таких проектів, де корінь проблеми — в конфігурації OkHttp. Правильне налаштування цього HTTP-клієнта прискорює запити на 30–50% і скорочує обсяг переданих даних до 40%. Порівняно з HttpURLConnection, OkHttp з правильним налаштуванням працює у 2 рази швидше. OkHttp — основа для Retrofit, Coil та Glide, але напряму його використовують, коли потрібен повний контроль: WebSocket-з'єднання, кастомні протоколи, завантаження файлів з прогресом. За 5 років ми налаштували OkHttp у 50+ проектах і знаємо, як уникнути типових помилок.

Наші інженери сертифіковані з Android і регулярно оновлюють знання відповідно до останніх стандартів. Отримайте надійну мережеву підсистему — зв'яжіться з нами для безкоштовної консультації.

Коли необхідний OkHttp напряму, а не Retrofit?

WebSocket – нативна підтримка без додаткових залежностей. OkHttpClient.newWebSocket(request, listener) з колбеками onOpen, onMessage, onFailure, onClosed. Для автоматичного реконнекту додаємо exponential backoff з множником 2 і максимальною затримкою 30 секунд.

Завантаження та вивантаження файлів з прогресом. Retrofit дозволяє @Multipart, але відстежити прогрес можна лише через кастомний RequestBody, який обгортає джерело та викликає callback при записі байтів. Це OkHttp-рівень.

Кастомна аутентифікація — Authenticator OkHttp викликається при 401, дозволяє синхронно отримати новий токен і повторити запит. З Retrofit це також працює через OkHttpClient.

Як налаштувати OkHttpClient для максимальної продуктивності?

val okHttpClient = OkHttpClient.Builder() .connectTimeout(30, TimeUnit.SECONDS) .readTimeout(30, TimeUnit.SECONDS) .writeTimeout(30, TimeUnit.SECONDS) .cache(Cache(cacheDir, 10 * 1024 * 1024)) // 10 MB кеш .addInterceptor(authInterceptor) .addInterceptor(loggingInterceptor) .addNetworkInterceptor(networkMonitorInterceptor) .authenticator(tokenRefreshAuthenticator) .connectionPool(ConnectionPool(5, 5, TimeUnit.MINUTES)) .build() 
Тип перехоплювача Особливості Коли використовувати
addInterceptor Застосовується завжди, навіть для кешованих відповідей Додавання заголовків аутентифікації, стиснення
addNetworkInterceptor Викликається лише для реальних мережевих запитів Логування байтів трафіку, моніторинг помилок

Налаштування таймаутів для різних сценаріїв

Сценарій connectTimeout readTimeout writeTimeout
Звичайні REST-запити 15 с 15 с 15 с
WebSocket 10 с 60 с 10 с
Завантаження/вивантаження файлів 30 с 30 с 120 с

HTTP-кеш з Cache прискорює повторні запити в 1.5 рази і працює в офлайні, якщо сервер віддає Cache-Control. Якщо не віддає – використовуємо ForceCacheInterceptor з примусовим FORCE_CACHE. Як налаштувати кешування:

  1. Встановіть Cache в OkHttpClient.Builder із зазначенням директорії та максимального розміру.
  2. Додайте ForceCacheInterceptor, якщо сервер не віддає Cache-Control.
  3. Налаштуйте таймаути під сценарії.

Для досягнення максимальної продуктивності налаштуйте таймаути під сценарії.

Як налаштувати certificate pinning?

Certificate pinning прив'язує додаток до конкретного сертифіката сервера через SHA-256 відбиток. Кроки:

  1. Отримайте SHA-256 відбиток сертифіката сервера (наприклад, командою openssl s_client).
  2. Додайте його в CertificatePinner.Builder: add("host", "sha256/...").
  3. Підключіть CertificatePinner до OkHttpClient.Builder.

Без pinning будь-який перехоплювач із самопідписаним сертифікатом може читати трафік. При ротації сертифіката додавайте новий відбиток за місяць до заміни. Для тестів використовуйте CERTIFICATE_PINNER у Debug-конфігу з послабленою перевіркою.

Тестування: MockWebServer з com.squareup.okhttp3:mockwebserver піднімає локальний сервер і повертає заготовлені відповіді – standard для unit-тестів. Для інтеграційних тестів використовуйте RecordingHostnameVerifier.

Переваги використання одного OkHttpClient для всіх бібліотек

Coil приймає OkHttpClient в ImageLoader.Builder, Retrofit – в Retrofit.Builder. Один налаштований клієнт зі спільним connection pool і кешем замість кількох – знижує витрати пам'яті в 1.5 рази і спрощує моніторинг. Наприклад, додаток з трьома Retrofit-сервісами та двома ImageLoader-об'єктами без синглтону споживає до 50% більше потоків. Порівняйте: single-pool обслуговує до 5 одночасних з'єднань, а кожен новий клієнт створює свій пул, що веде до деградації на Huawei та Samsung при 200+ запитах.

Типові помилки при налаштуванні OkHttp
  • Створення OkHttpClient на кожен запит – клієнт має бути синглтоном. В Hilt – @Singleton.
  • Блокуючі операції всередині Interceptor – для refresh токена використовуйте Authenticator, який синхронний за контрактом.
  • Ігнорування certificate pinning – захищаємося від MITM, але пам'ятайте: при ротації сертифіката потрібно заздалегідь додавати новий fingerprint.
  • Відсутність обробки Background fetch і targetSdk стандартів — OkHttp повинен коректно обробляти Suspension на Android 10+.

Захист від MITM за допомогою certificate pinning

val certificatePinner = CertificatePinner.Builder() .add("api.github.com", "sha256/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=") .build() 

Без pinning будь-який перехоплювач із самопідписаним сертифікатом може читати трафік. При ротації сертифіката додавайте новий відбиток за місяць до заміни. Для тестів використовуйте CERTIFICATE_PINNER у Debug-конфігу з послабленою перевіркою.

Тестування: MockWebServer з com.squareup.okhttp3:mockwebserver піднімає локальний сервер і повертає заготовлені відповіді – standard для unit-тестів. Для інтеграційних тестів використовуйте RecordingHostnameVerifier.

Кейс з нашої практики: оптимізація OkHttp для сервісу доставки

В одному з проектів для нашого клієнта — сервісу доставки їжі — ми виявили, що середній час відповіді API становить 8 секунд через неправильні таймаути та відсутність кешу. Після налаштування OkHttp з connection pool на 10 з'єднань, кешем 20 МБ та перехоплювачем стиснення gzip, час відповіді скоротився до 1.2 секунди, а трафік зменшився на 35%. Додаток почав стабільно працювати навіть на 3G. За оцінками, це заощадило клієнту $500 на місяць на трафіку. Джерело: дані власного проекту з доставки їжі

Що входить в роботу з налаштування OkHttp

  • Аудит поточної мережевої підсистеми
  • Конфігурація OkHttpClient: таймаути, кеш, пул з'єднань
  • Інтеграція перехоплювачів (логування, аутентифікація, моніторинг)
  • Налаштування WebSocket з автоматичним реконнектом
  • Certificate pinning для безпечних API
  • Підготовка документації та код-рев'ю
  • Тестування з MockWebServer
  • Підтримка після впровадження – 1 місяць

Строки та вартість

Налаштування OkHttp з інтерсепторами, кешем, WebSocket або завантаженням файлів займає від 1 до 3 днів. Орієнтовна вартість: від $200 до $500 залежно від складності. Вартість розраховується індивідуально – оцінимо ваш проект безкоштовно після брифу. Замовте консультацію, і ми запропонуємо оптимальну конфігурацію.

Ми гарантуємо якість налаштувань та надаємо підтримку після впровадження.

Для отримання точної оцінки зв'яжіться з нами — ми проаналізуємо ваш проект і запропонуємо конфігурацію, яка вирішить проблему повільних або нестабільних запитів уже на етапі прототипу.