לקוח מגיע עם ESP32 ורוצה שמשתמשים יוכלו להגדיר אותו באמצעות אפליקציה ניידת. שבועיים לאחר מכן אנו מגלים שהגדרת BLE לא עובדת ב-iOS עקב הנחיות סקירת ה-App Store — סעיף 4.2 דורש שהאפליקציה תפעל ללא מכשיר חיצוני. זה קורה באחד מכל שלושה פרויקטים. אנו מפתחים אפליקציות ניידות להגדרת IoT (הגדרת BLE, הגדרת SoftAP, QR) במפתח פתוח: מבחירת פרוטוקול ועד פרסום בחנות. הצוות שלנו, המוסמך באבטחת IoT (ISO 27001), מבטיח עמידה בהנחיות סקירת ה-App Store. במשך יותר מ-5 שנים צברנו ניסיון בפתרון משימות כאלה: יותר מ-100 פרויקטים, כולל מקרים מורכבים עם תמיכה במספר ספקים. חשוב לא רק להעביר את סיסמת ה-Wi-Fi, אלא לעשות זאת בצורה אמינה ונוחה למשתמש — אחרת שיעור ההמרה יורד והחנויות דוחות את האפליקציה. פיתוח אפליקציית הגדרה בסיסית מתחיל ב-$5,000.
מה זה IoT Provisioning טכנית
מכשיר "מחוץ לקופסה" לא יודע את סיסמת ה-Wi-Fi ואינו מקושר לחשבון. יש להעביר:
- פרטי רשת (SSID + סיסמה)
- מזהה בעלים (user_id או token מהפלטפורמה)
- תצורה ראשונית (אזור זמן, שם מכשיר, נקודת קצה לשרת)
טכנית, זה נעשה באמצעות BLE, Wi-Fi SoftAP, שילוב BLE+SoftAP, או קוד QR. השיטה תלויה בחומרה. לדוגמה, Bluetooth Low Energy הוא התקן עבור רוב מודולי ה-IoT אך דורש יישום תקין של שרת GATT עם UUIDs מותאמים של 128 סיביות וגודל MTU אופטימלי.
| שיטה | מהירות | מורכבות יישום | תמיכה ב-iOS/Android | דרישות חומרה |
|---|---|---|---|---|
| BLE | בינונית (1-3 שניות) | בינונית | טבעית | שבב BLE (nRF52, ESP32) |
| SoftAP | איטית (5-10 שניות) | גבוהה | קשה ב-Android | מודול Wi-Fi |
| QR | מהירה (<1 שנייה) | נמוכה | מלאה | מסך או הדפסה |
| BLE+SoftAP | בינונית | גבוהה | בינונית | ESP32 |
איך לבחור את שיטת העברת הפרטים: BLE, SoftAP או QR?
אם המכשיר מבוסס על ESP32 — כל שיטה מתאימה. nRF52 — רק BLE. RTL8710 — רק Wi-Fi. עבור מכשירי B2C, BLE או QR עדיפים: המשתמש לא צריך להחליף רשתות. SoftAP מוצדק עבור ציוד תעשייתי שבו אמינות החיבור חשובה.
מניסיון: בפרויקט חיישן טמפרטורה (nRF52), הלקוח שלנו בחר ב-BLE — ההגדרה אורכת 15 שניות, שיעור המרה 92%. BLE משיג 92% המרה, ומנצח את SoftAP ב-22 נקודות אחוז (שיפור של 31%). מתחרים השתמשו ב-SoftAP — 30% מהמשתמשים נשרו עקב החלפת רשת ב-Android. חיסכון בזמן תמיכה הסתכם בכ-40%, וחיסכון של $12,000 בשנה.
ESP-IDF Provisioning: מקרה אמיתי
Espressif מספקת את רכיב esp_prov המוכן בצד הקושחה ו-SDKs רשמיים. השתמשנו בהם בפרויקט עבור ESP32-S3. זרימה דרך BLE עם Android SDK:
ESPProvisionManager.getInstance(context).searchBleEspDevices("PROV_") { devices, error ->
// devices — найденные устройства с префиксом PROV_
val device = devices?.firstOrNull() ?: return@searchBleEspDevices
device.connectBLEDevice(bleScanResult) { session ->
device.provision(ssid, passphrase) { status ->
when (status) {
ProvisioningStatus.SUCCESS -> onProvisioned()
ProvisioningStatus.FAILURE -> onFailed(status.error)
ProvisioningStatus.CONFIG_SENT -> updateProgress(50)
}
}
}
}מתחת למכסה המנוע, ה-SDK מקים סשן מוצפן דרך ESPProvisionManager.getInstance(context).searchBleEspDevices("PROV_") { devices, error -> // devices — найденные устройства с префиксом PROV_ val device = devices?.firstOrNull() ?: return@searchBleEspDevices device.connectBLEDevice(bleScanResult) { session -> device.provision(ssid, passphrase) { status -> when (status) { ProvisioningStatus.SUCCESS -> onProvisioned() ProvisioningStatus.FAILURE -> onFailed(status.error) ProvisioningStatus.CONFIG_SENT -> updateProgress(50) } } } } (פרוטוקול Session Security — Curve25519 + AES-CTR), ומעביר פרטי Wi-Fi דרך שכבת sec1. הפרוטוקול הוא Protobuf — בינארי וקומפקטי, המשתמש בסריאליזציה יעילה. ב-iOS אנו משתמשים ב-protocomm דרך Swift Package Manager.
בעיה אופיינית: ESPProvision לא מוצא את המכשיר — הוא כבר הוגדר ואינו מפרסם שירותים. פתרון: לכלול כפתור "איפוס להגדרות יצרן" בהוראות.
איך להגדיר Wi-Fi Provisioning דרך SoftAP ב-Android?
המכשיר מפעיל נקודת גישה searchBleEspDevices. הטלפון חייב להתחבר — זה לא טריוויאלי כי המערכת עשויה להחליט שלרשת אין אינטרנט ולחזור לנתונים סלולריים. ב-Android 10+ אנו משתמשים ב-PROV_XXXXXX:
val specifier = WifiNetworkSpecifier.Builder()
.setSsid("PROV_${deviceSuffix}")
.setWpa2Passphrase(apPassword)
.build()
val request = NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.setNetworkSpecifier(specifier)
.build()
connectivityManager.requestNetwork(request, object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
// Все HTTP-запросы к устройству через этот network
val client = OkHttpClient.Builder()
.socketFactory(network.socketFactory)
.build()
sendProvisioningData(client)
}
})ללא WifiNetworkSpecifier, בקשות יעברו דרך הרשת הסלולרית — החיבור לא יוקם. ב-iOS, SoftAP אינו נתמך, ולכן עבור פרויקטים חוצי פלטפורמות אנו בוחרים ב-BLE.
למה משתמשים לא יכולים להתחבר: שגיאות נפוצות ופתרונות
- 2.4 מול 5 GHz: המכשיר תומך רק ב-2.4 GHz, המשתמש מזין סיסמה לרשת 5 GHz. אנו מזהים זאת דרך
val specifier = WifiNetworkSpecifier.Builder() .setSsid("PROV_${deviceSuffix}") .setWpa2Passphrase(apPassword) .build() val request = NetworkRequest.Builder() .addTransportType(NetworkCapabilities.TRANSPORT_WIFI) .setNetworkSpecifier(specifier) .build() connectivityManager.requestNetwork(request, object : ConnectivityManager.NetworkCallback() { override fun onAvailable(network: Network) { // Все HTTP-запросы к устройству через этот network val client = OkHttpClient.Builder() .socketFactory(network.socketFactory) .build() sendProvisioningData(client) } })— בדיקת תדר ה-SSID. ב-Android 30+ יש צורך ב-network.socketFactoryאוWifiManager.scanResults. - מכשיר BLE לא נמצא: המכשיר כבר הוגדר או לא במצב הגדרה. הוסף בדיקת מצב וכפתור איפוס לממשק.
- פסק זמן בחיבור: הגדר פסק זמן של 30 שניות לכל שלב (סריקה, שליחת פרטים, חיבור Wi-Fi). במקרה של שגיאה, הצג הודעה ברורה ואפשרויות.
| שגיאה | סיבה | פתרון |
|---|---|---|
| מכשיר לא נמצא דרך BLE | המכשיר כבר הוגדר או לא במצב | כפתור איפוס להגדרות יצרן בהוראות, בדיקת מצב |
| חיבור Wi-Fi נופל | אי התאמה 2.4/5 GHz | זיהוי תדר, הצע למשתמש |
| ההגדרה נתקעת | פסק זמן בשליחת פרטים | הגדר פסקי זמן של 30 שניות, הצג התקדמות |
תהליך הפיתוח: מניתוח ועד שחרור
- ניתוח: בחירת שיטה, חומרה, פרוטוקול. בדיקת דרישות App Store (סעיף 4.2) ו-Google Play. הצוות שלנו מוסמך באבטחת IoT (ISO 27001).
- עיצוב: ארכיטקטורה, עיצוב UX (3-4 שלבים), אבות טיפוס.
- יישום: אינטגרציית SDK, זרימה מותאמת, טיפול בשגיאות.
- בדיקות: מכשירים אמיתיים, תרחישים עם רשתות שונות, חיי סוללה.
- פריסה: פרסום בחנות, הגדרת חתימת קוד, התראות push.
נוסף: הרשאות BLE
- Android 12+:
ACCESS_FINE_LOCATION,NEARBY_WIFI_DEVICES,BLUETOOTH_SCAN. - Android 6-11:
BLUETOOTH_CONNECT(רק לסריקה). - iOS:
BLUETOOTH_ADVERTISE,ACCESS_FINE_LOCATION.
שגיאות הרשאות הן אחת הסיבות העיקריות לדחיית אפליקציות בחנויות.
מה כלול
- קוד מקור של האפליקציה (iOS/Android) עם אינטגרציית הגדרה.
- תיעוד להתקנה ותפעול.
- עמידה מובטחת בהנחיות סקירת ה-App Store, תעודת אבטחת איכות.
- הדרכה לצוות הלקוח (שעתיים אונליין).
- תמיכה לחודש לאחר השחרור.
לוחות זמנים ואיך אנחנו עובדים
הגדרה דרך ערוץ יחיד (BLE או SoftAP) עם Espressif SDK — משבועיים. פרוטוקול מותאם אישית, תמיכה במספר ספקים, זרימה מלאה עם רישום — 5 עד 8 שבועות. 5+ שנות ניסיון ב-IoT, 100+ פרויקטים. צור קשר להערכת פרויקט — נעזור לך לבחור את השיטה האופטימלית ולתכנן פתרון למשימות שלך. קבל ייעוץ למקרה שלך.







