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

Передача великих файлів без інтернету — завдання, яке впирається в обмеження мобільних платформ. Ми розробляємо інтеграцію Wi-Fi Direct на Android, вирішуючи проблеми сумісності та стабільності з'єднання. Наша команда реалізує проєкт під ключ — від аудиту до підтримки, забезпечуючи надійну P2P-взаємодію.

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

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

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

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

Інтеграція 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

Вартість розраховується індивідуально — залежить від потрібної глибини кастомізації та обсягу тестування. Зв'яжіться з нами — ми проаналізуємо ваш проєкт та запропонуємо оптимальне рішення.

Порівняння технологій 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 — найкращий вибір. Отримайте консультацію — наші інженери допоможуть визначитися з технологією.

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

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

  • Розробка мобільного додатка для компанії FEEDME
    Розробка мобільного додатка для компанії FEEDME
    1010
  • Розробка мобільного додатку для компанії XOOMER
    Розробка мобільного додатку для компанії XOOMER
    903
  • Розробка мобільного додатку для компанії RHL
    Розробка мобільного додатку для компанії RHL
    1332
  • Розробка мобільного додатку для компанії ZIPPY
    Розробка мобільного додатку для компанії ZIPPY
    1180
  • Розробка мобільного додатку для компанії Affhome
    Розробка мобільного додатку для компанії Affhome
    1107
  • Розробка мобільного додатку для компанії FLAVORS
    Розробка мобільного додатку для компанії FLAVORS
    714