Інтеграція Wi-Fi Direct у мобільний додаток: гайд для Android

Інтеграція Wi-Fi Direct — одне з найчастіших завдань, коли клієнти хочуть передавати великі файли без інтернету. Але реалізація на мобільних платформах перетворюється на мінне поле: iOS не має публічного API, а Android хоча й підтримує, приховує безліч нюансів. Маючи досвід понад 8 років у розробці

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

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

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1734 послуг
Інтеграція Wi-Fi Direct у мобільний додаток: гайд для Android
Складний
~3-5 днів

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

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

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

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    895
  • 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

Інтеграція Wi-Fi Direct — одне з найчастіших завдань, коли клієнти хочуть передавати великі файли без інтернету. Але реалізація на мобільних платформах перетворюється на мінне поле: iOS не має публічного API, а Android хоча й підтримує, приховує безліч нюансів. Маючи досвід понад 8 років у розробці мобільних P2P-рішень і реалізувавши понад 20 проєктів з Wi-Fi Direct, ми готові поділитися підходом, який економить до 40% бюджету на хмарну інфраструктуру.

Чому Wi-Fi Direct складно реалізувати на iOS?

Apple не надає розробникам доступ до Wi-Fi Direct через публічні API. Єдиний спосіб організувати пряме з'єднання на iOS — MultipeerConnectivity, який використовує Wi-Fi та Bluetooth, але не є Wi-Fi Direct. Для крос-платформних проєктів розгляньте Nearby Connections API від Google — він працює на обох платформах, але швидкість нижча (до 50 Мбіт/с проти 250 Мбіт/с у Wi-Fi Direct).

Як ми вирішуємо проблеми стабільності з'єднання?

Головний біль — нестабільність на різних чипсетах. Qualcomm і MediaTek поводяться по-різному: на одних пристроях з'єднання тримається годинами, на інших — рветься кожні п'ять хвилин. Ми застосовуємо:

  • автоматичний reconnect з експоненціальною затримкою (до 3 спроб);
  • перевірку стану групи через requestConnectionInfo() перед кожною передачею;
  • fallback на BLE для малих пакетів, якщо Wi-Fi Direct нестабільний.

Такий підхід гарантує надійність на 95% протестованих пристроїв.

Android: покрокова реалізація Wi-Fi P2P

WifiP2pManager — основний клас. Працює через Broadcast Receiver з інтентами WIFI_P2P_STATE_CHANGED_ACTION, WIFI_P2P_PEERS_CHANGED_ACTION, WIFI_P2P_CONNECTION_CHANGED_ACTION. Для глибокого розуміння API зверніться до WifiP2pManager.

Ініціалізація

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager val channel = manager.initialize(this, mainLooper, null) 

Дозволи (Android 13+)

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- Android 13+ --> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" /> 

ACCESS_FINE_LOCATION потрібен для пошуку пірів на Android < 13. На Android 13+ — NEARBY_WIFI_DEVICES, але без usesPermissionFlags="neverForLocation" система все одно вимагає геолокацію. Це викликає питання у користувачів («навіть нашому файлменеджеру геолокація?»).

Пошук та підключення

manager.discoverPeers(channel, object : WifiP2pManager.ActionListener { override fun onSuccess() { /* сканування розпочато */ } override fun onFailure(reason: Int) { // reason: ERROR=0, P2P_UNSUPPORTED=1, BUSY=2 } }) // В BroadcastReceiver при WIFI_P2P_PEERS_CHANGED_ACTION: manager.requestPeers(channel) { peers -> val deviceList = peers.deviceList // показуємо список користувачу } // Підключення до вибраного пристрою: val config = WifiP2pConfig().apply { deviceAddress = selectedDevice.deviceAddress wps.setup = WpsInfo.PBC } manager.connect(channel, config, object : WifiP2pManager.ActionListener { override fun onSuccess() { /* запит відправлено, чекаємо WIFI_P2P_CONNECTION_CHANGED_ACTION */ } override fun onFailure(reason: Int) { } }) 

Передача даних

Після встановлення з'єднання один із пристроїв стає Group Owner (GO). GO має фіксований IP 192.168.49.1, клієнт отримує IP з DHCP.

// В WIFI_P2P_CONNECTION_CHANGED_ACTION: manager.requestConnectionInfo(channel) { info -> if (info.groupFormed) { val groupOwnerAddress = info.groupOwnerAddress.hostAddress if (info.isGroupOwner) { // запускаємо ServerSocket startServer() } else { // підключаємося до groupOwnerAddress:PORT startClient(groupOwnerAddress) } } } 

Після цього — звичайні Socket / ServerSocket. Wi-Fi Direct не надає високорівневий протокол передачі файлів, тільки TCP/UDP з'єднання.

Чому для Wi-Fi Direct на Android потрібна геолокація?

До Android 13 пошук сусідніх пристроїв вимагав дозволу ACCESS_FINE_LOCATION, оскільки Wi-Fi сканування могло розкрити місцезнаходження. Починаючи з Android 13 з'явилося NEARBY_WIFI_DEVICES, але якщо не вказати флаг neverForLocation, система все одно запросить геолокацію. Це зумовлено вимогами конфіденційності, але часто збиває з пантелику користувачів. Наше тестування показує, що на 80% пристроїв з Android 13 можна обійтися без геолокації, якщо в маніфесті додати maxSdkVersion="32" для ACCESS_FINE_LOCATION і використовувати NEARBY_WIFI_DEVICES з флагом neverForLocation. Однак на деяких прошивках (Xiaomi, Huawei) це не працює — доводиться миритися з геоданими.

Що входить в інтеграцію під ключ?

  • аналізуємо вимоги та обираємо підхід (Wi-Fi Direct, Nearby Connections або гібрид);
  • проектуємо архітектуру P2P-взаємодії з урахуванням стабільності та енергоспоживання;
  • реалізуємо на Android (Kotlin) повний цикл: пошук, підключення, передача, розрив;
  • тестуємо на 10+ реальних пристроях різних вендорів;
  • документуємо та навчаємо команду замовника;
  • гарантуємо працездатність протягом 3 місяців після здачі.
Типові помилки при реалізації
  • Забувають обробляти onFailure в discoverPeers — пристрій може бути зайнятий.
  • Не перевіряють isGroupOwner перед стартом сервера — обидва клієнти можуть почати слухати.
  • Використовують один порт — можливі колізії. Рекомендуємо динамічний порт (0 в ServerSocket).

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

Етап Строк (робочих днів)
Базова реалізація 3–5
Додавання reconnect та надійності 3–5
Тестування та доопрацювання 2–4
Документація та передача 1–2

Стоимость рассчитывается индивидуально — depends on required customization depth and testing volume. Зв'яжіться з нами — ми безкоштовно проаналізуємо ваш проєкт та запропонуємо оптимальне рішення.

Порівняння технологій peer-to-peer

Технологія iOS Android Дальність Швидкість
Wi-Fi Direct ~200м до 250 Мбіт/с
MultipeerConnectivity ~100м до 100 Мбіт/с
Nearby Connections API ~100м до 50 Мбіт/с
BLE ~50м 1-3 Мбіт/с

Крос-платформні проєкти часто обирають Nearby Connections API як баланс між швидкістю та сумісністю. Але якщо важлива максимальна продуктивність і ви готові пожертвувати iOS, Wi-Fi Direct — найкращий вибір. Отримайте консультацію — наші інженери допоможуть визначитися з технологією.