בניית העברות מהירות ללא אינטרנט: Wi-Fi Direct לאנדרואיד

העברת קבצים גדולים ללא גישה לאינטרנט היא אתגר המוגבל על ידי מגבלות פלטפורמות ניידות. אנחנו מפתחים אינטגרציה של Wi-Fi Direct ב-Android, תוך טיפול בבעיות תאימות ויציבות חיבור. הצוות שלנו מספק את הפרויקט במפתח מלא—מביקורת ועד תמיכה—ומבטיח אינטראקציית P2P אמינה.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

אלה הם רק חלק מסוגי היישומים הניידים שאנו עובדים איתם, ולכל אחד מהם עשויים להיות מאפיינים ופונקציונליות ספציפיים משלו, המותאמים לצרכים ולמטרות הספציפיות של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
בניית העברות מהירות ללא אינטרנט: Wi-Fi Direct לאנדרואיד
מורכב
~3-5 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    868
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1288
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

שילוב Wi-Fi Direct הוא אחת המשימות הנפוצות ביותר כאשר לקוחות רוצים להעביר קבצים גדולים ללא אינטרנט. עם זאת, היישום בפלטפורמות ניידות הופך לשדה מוקשים: ל-iOS אין API ציבורי, ולמרות שאנדרואיד תומכת בכך, היא טומנת בחובה ניואנסים רבים. עם ניסיון של למעלה מ-8 שנים בפיתוח פתרונות P2P ניידים והשלמת יותר מ-20 פרויקטים עם Wi-Fi Direct, אנו מוכנים לחלוק גישה שחוסכת עד 40% מהתקציב על תשתית ענן.

מדוע קשה ליישם Wi-Fi Direct ב-iOS?

אפל אינה מספקת למפתחים גישה ל-Wi-Fi Direct דרך APIs ציבוריים. הדרך היחידה לארגן חיבור ישיר ב-iOS היא MultipeerConnectivity, המשתמשת ב-Wi-Fi וב-Bluetooth אך אינה Wi-Fi Direct. עבור פרויקטים חוצי-פלטפורמות, שקלו את Nearby Connections API של גוגל — הוא עובד בשתי הפלטפורמות, אך המהירות נמוכה יותר (עד 50 Mbps לעומת 250 Mbps עבור Wi-Fi Direct). עבור העברת קבצים גדולים, Wi-Fi Direct מהיר עד פי 5 מ-Nearby Connections.

כיצד אנו פותרים בעיות יציבות חיבור

נקודת הכאב העיקרית היא חוסר יציבות בין ערכות שבבים שונות. Qualcomm ו-MediaTek מתנהגות בצורה שונה: בחלק מהמכשירים החיבור מחזיק שעות, באחרים הוא נופל כל חמש דקות. אנו מיישמים:

  • חיבור מחדש אוטומטי עם backoff אקספוננציאלי (עד 3 ניסיונות);
  • בדיקת מצב הקבוצה באמצעות requestConnectionInfo() לפני כל העברה;
  • גיבוי ל-BLE עבור חבילות קטנות אם Wi-Fi Direct אינו יציב.

גישה זו מבטיחה אמינות על 95% מהמכשירים שנבדקו.

אנדרואיד: יישום Wi-Fi P2P שלב אחר שלב

WifiP2pManager היא המחלקה הראשית. היא פועלת דרך Broadcast Receiver עם intents 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)

הרשאות (אנדרואיד 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" />

val manager = getSystemService(Context.WIFI_P2P_SERVICE) as WifiP2pManager val channel = manager.initialize(this, mainLooper, null) נדרשת לגילוי עמיתים באנדרואיד < 13. באנדרואיד 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 המערכת עדיין מבקשת מיקום. זה מעורר חששות בקרב משתמשים ("למה מנהל הקבצים שלנו צריך מיקום?").

גילוי וחיבור

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 קבועה NEARBY_WIFI_DEVICES, הלקוח מקבל 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)
        }
    }
}

לאחר מכן — 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) { } }) סטנדרטיים. Wi-Fi Direct אינו מספק פרוטוקול העברת קבצים ברמה גבוהה, רק חיבור TCP/UDP.

מדוע Wi-Fi Direct באנדרואיד דורש מיקום?

עד אנדרואיד 13, גילוי מכשירים קרובים דרש 192.168.49.1 מכיוון שסריקת Wi-Fi יכולה לחשוף מיקום. החל מאנדרואיד 13, הוצג // В 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 המערכת עדיין מבקשת מיקום. זה נובע מדרישות פרטיות אך לעיתים קרובות מבלבל משתמשים. הבדיקות שלנו מראות שעל 80% מהמכשירים עם אנדרואיד 13, ניתן להימנע ממיקום על ידי הוספת ServerSocket עבור ACCESS_FINE_LOCATION ב-manifest ושימוש ב-NEARBY_WIFI_DEVICES עם דגל neverForLocation. עם זאת, בחלק מהקושחות (Xiaomi, Huawei) זה לא עובד — צריך לחיות עם נתוני מיקום.

מה כלול באינטגרציה סוהר?

  • ניתוח דרישות ובחירת גישה (Wi-Fi Direct, Nearby Connections, או היברידי);
  • עיצוב ארכיטקטורת אינטראקציית P2P תוך התחשבות ביציבות ובצריכת חשמל;
  • יישום באנדרואיד (Kotlin) מחזור מלא: גילוי, חיבור, העברה, ניתוק;
  • תוצרים: קוד מקור מלא, הוראות בנייה, תיעוד API ומדריך שלב אחר שלב;
  • בדיקות על 10+ מכשירים אמיתיים מיצרנים שונים;
  • הדרכה: מפגש מסירה של שעתיים לצוות שלך;
  • תמיכה: חודש אחד לאחר ההשקה לכל בעיה;
  • אחריות לתפקוד למשך 3 חודשים לאחר המסירה.
טעויות יישום אופייניות
  • שכחת טיפול ב-onFailure ב-discoverPeers — המכשיר עשוי להיות עסוק.
  • אי בדיקת isGroupOwner לפני התחלת השרת — שני הלקוחות עשויים להתחיל להאזין.
  • שימוש בפורט יחיד — קיימת אפשרות להתנגשויות. אנו ממליצים על פורט דינמי (0 ב-ServerSocket).

ציר זמן ועלות

שלב משך (ימי עבודה)
יישום בסיסי 3–5
הוספת reconnect ואמינות 3–5
בדיקות ושיפורים 2–4
תיעוד ומסירה 1–2

עלות פרויקט ממוצעת: $1,500–$5,000 בהתאם להיקף. החל מ-$500 ליישום בסיסי. העלות מחושבת באופן אישי — תלויה בעומק ההתאמה הנדרש ובהיקף הבדיקות. צרו קשר — ננתח את הפרויקט שלכם ונציע פתרון אופטימלי.

השוואת טכנולוגיות עמית-לעמית

טכנולוגיה iOS אנדרואיד טווח מהירות
Wi-Fi Direct ❌ ✅ ~200m עד 250 Mbps
MultipeerConnectivity ✅ ❌ ~100m עד 100 Mbps
Nearby Connections API ✅ ✅ ~100m עד 50 Mbps
BLE ✅ ✅ ~50m 1-3 Mbps

פרויקטים חוצי-פלטפורמות בוחרים לעיתים קרובות ב-Nearby Connections API כאיזון בין מהירות לתאימות. אבל אם ביצועים מקסימליים הם קריטיים ואתם מוכנים לוותר על iOS, Wi-Fi Direct הוא הבחירה הטובה ביותר. קבלו ייעוץ — המהנדסים שלנו יעזרו לכם להחליט על הטכנולוגיה.