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

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Налаштування OkHttp для мережевих запитів в Android-додатку
Середній
від 1 дня до 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

Налаштування OkHttp для сітьових запитів в Android-додатку

OkHttp — HTTP-клієнт, на якому побудовані Retrofit, Coil, Glide та більшість Android-бібліотек, що працюють з мережею. Використовуйте OkHttp напрямку, коли потрібен повний контроль: WebSocket-з'єднання, кастомні протоколи, загрузка файлів з прогресом, специфічна обробка заголовків — те, що у Retrofit або неможливо, або потребує обходних шляхів.

Коли OkHttp напрямку, а не через Retrofit

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

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

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

Спільний HTTP-клієнт для кількох бібліотек. Coil приймає OkHttpClient у ImageLoader.Builder, Retrofit — у Retrofit.Builder. Один налаштований клієнт зі спільним connection pool та кешем — замість кількох окремих клієнтів з дублюючою логікою.

Конфігурація OkHttpClient

val okHttpClient = OkHttpClient.Builder()
    .connectTimeout(30, TimeUnit.SECONDS)
    .readTimeout(30, TimeUnit.SECONDS)
    .writeTimeout(30, TimeUnit.SECONDS)
    .cache(Cache(cacheDir, 10 * 1024 * 1024)) // 10 МБ кеш
    .addInterceptor(authInterceptor)
    .addInterceptor(loggingInterceptor)
    .addNetworkInterceptor(networkMonitorInterceptor)
    .authenticator(tokenRefreshAuthenticator)
    .connectionPool(ConnectionPool(5, 5, TimeUnit.MINUTES))
    .build()

addInterceptor vs addNetworkInterceptor: application-інтерсептори викликаються один раз та видять кешовані відповіді. Network-інтерсептори — тільки для реальних сітьових запитів. Для логування byte трафіку — network interceptor. Для додавання заголовків аутентифікації — application interceptor.

HTTP-кеш: Cache з правильним cache-dir (зазвичай context.cacheDir) прискорює повторні запитання та працює в offline, якщо сервер відправляє Cache-Control заголовки. Якщо не відправляє — ForceCacheInterceptor з примусовим FORCE_CACHE для offline.

Certificate pinning: CertificatePinner.Builder().add("api.example.com", "sha256/AAAA...").build(). SHA-256 fingerprint отримується з сертифіката через openssl x509 -in cert.pem -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | base64. Pinning ломає з'єднання при ротації сертифіката — потрібно заздалегідь додавати новий fingerprint.

Типові помилки

Створення OkHttpClient на кожен запрос. Клієнт зберігає thread pool, connection pool та кеш — це має бути синглтон. У Hilt — @Singleton у @Provides.

Блокуючи операції всередину Interceptor. Interceptor.intercept() викликається на OkHttp dispatcher threads, але якщо робити suspend-функцію через runBlocking — це блокує dispatcher thread. Для async операцій у інтерсепторі (наприклад, refresh токена) використовуйте synchronized блок з умовною змінною, або виносимо refresh у Authenticator, який синхронний за контрактом.

Тестування: MockWebServer з com.squareup.okhttp3:mockwebserver — стандартний інструмент для unit-тестів сітьового шару. Піднімає локальний сервер, приймає запитання, повертає заготовлені відповіді.

Налаштування OkHttp з інтерсепторами, кешем, WebSocket або загрузкою файлів — 1-3 дні. Вартість розраховується індивідуально.