חלל עבודה משותף עם מאות חברים מתמודד עם כאוס יומיומי: מפתחות אבודים, הזמנות חופפות לחדרי ישיבות, ואורחים שמצלצלים בפעמון. הפתרון הוא אפליקציה לנייד שמחליפה מפתחות פיזיים, הופכת את ההזמנות לאוטומטיות, ומנהלת את הגישה. אנו מפתחים אפליקציות כאלה במתכונת turnkey — מניתוח ועד פרסום בחנויות. עם הפתרון שלנו, משתמשים פותחים דלתות דרך הסמארטפון (QR, NFC או BLE), מזמינים מקומות בנגיעה אחת, ומנהלים רואים תפוסה בזמן אמת. האפליקציה משתלבת עם מערכות קיימות דרך REST ו-GraphQL, תומכת בהודעות push, ובגישה ללא מגע.
לפי מחקר שצוטט בוויקיפדיה, עד 40% מזמנו של מנהל מושקע בהנפקת מפתחות ובעיבוד הזמנות. ויקיפדיה: חלל עבודה משותף. האפליקציה שלנו מפחיתה עומס זה ב-70%, ועלות התחזוקה של כרטיסים פיזיים יורדת לכמעט אפס. לדוגמה, חלל עבודה משותף עם 150 מקומות חוסך עד $2,000 בחודש על כוח אדם וכרטיסים. צרו קשר כדי לראות כיצד הפתרון שלנו מתאים לחלל העבודה המשותף שלכם.
בעיות שאנו פותרים
- מפתחות אבודים וכרטיסים שנשכחו — אין צורך בפריטים פיזיים, גישה דרך הסמארטפון.
- הזמנות כפולות — סנכרון זמנים בזמן אמת עם בדיקה כל 30 שניות או WebSocket.
- כאוס בגישת אורחים — קודי QR זמניים שנוצרים על ידי חברים, תקפים לשימוש חד-פעמי באזורים ייעודיים.
- ניהול מנויים — מנויים גמישים לפי שעה, יום או ללא הגבלה עם מעקב אוטומטי אחר שימוש.
איך אנחנו עושים את זה
הזמנת חדרי ישיבות: משבצות זמן
חדרי ישיבות מוזמנים לזמנים ספציפיים. האתגר המרכזי ב-UX הוא להציג משבצות פנויות בצורה אינטואיטיבית ולטפל בהזמנות במקביל. אנו משתמשים ב-Jetpack Compose באנדרואיד וב-SwiftUI ב-iOS לבחירה חלקה:
// Android: тайм-слоты с Jetpack Compose
@Composable
fun TimeSlotPicker(
slots: List<TimeSlot>,
onSlotSelected: (TimeSlot) -> Unit
) {
LazyRow(
horizontalArrangement = Arrangement.spacedBy(8.dp)
) {
items(slots) { slot ->
TimeSlotChip(
startTime = slot.startTime,
endTime = slot.endTime,
isAvailable = slot.status == SlotStatus.AVAILABLE,
isSelected = slot.isSelected,
onClick = {
if (slot.status == SlotStatus.AVAILABLE) onSlotSelected(slot)
}
)
}
}
}המשבצות נטענות דרך // Android: тайм-слоты с Jetpack Compose @Composable fun TimeSlotPicker( slots: List<TimeSlot>, onSlotSelected: (TimeSlot) -> Unit ) { LazyRow(horizontalArrangement = Arrangement.spacedBy(8.dp)) { items(slots) { slot -> TimeSlotChip( startTime = slot.startTime, endTime = slot.endTime, isAvailable = slot.status == SlotStatus.AVAILABLE, isSelected = slot.isSelected, onClick = { if (slot.status == SlotStatus.AVAILABLE) onSlotSelected(slot) } ) } } } . מרווח הבדיקה הוא 30 שניות כשמסך ההזמנה פתוח כדי לשקף זמינות בזמן אמת. לחלופין, אנו משתמשים ב-WebSocket לעדכונים מיידיים.
יישום גישה ללא מגע
חללי עבודה משותפים מודרניים עוברים מכרטיסי RFID לסמארטפונים. אנו מציעים שלוש שיטות מוכחות בהתאם לציוד ולתקציב שלכם.
קוד QR על הדלת
האפליקציה מציגה קוד QR דינמי (מתחדש כל 30 שניות); סורק סטטי קורא אותו. זו האפשרות הפשוטה ביותר, ללא צורך בהחלפת מנעולים. מתאים לאישורי כניסה זמניים לאורחים.
אמולציית NFC (Host Card Emulation)
באנדרואיד, הסמארטפון מחקה תג RFID דרך HCE — המשתמש נוגע בטלפון בקורא.
// Android: HCE для доступа
class AccessHCEService : HostApduService() {
override fun processCommandApdu(commandApdu: ByteArray, extras: Bundle?): ByteArray {
val selectAid = byteArrayOf(0x00, 0xA4.toByte(), 0x04, 0x00)
return if (commandApdu.startsWith(selectAid)) {
val accessToken = accessRepository.getCurrentToken()
accessToken.toByteArray() + byteArrayOf(0x90.toByte(), 0x00)
} else {
byteArrayOf(0x6F, 0x00) // неизвестная команда
}
}
override fun onDeactivated(reason: Int) {
}
}HCE עובד ללא קורא ה-NFC של Apple Pay — רק דרך מחסנית ה-NFC המקורית של אנדרואיד. ב-iOS, המקבילה היא Core NFC עם GET /rooms/{roomId}/slots?date=сегодня, אבל iOS סגורה לאמולציית כרטיסים. לכן, ב-iOS אנו בוחרים ב-QR או Bluetooth BLE.
Bluetooth BLE
מנעולים עם שבבי BLE (פופולריים מ-Salto, Abloy) — האפליקציה שולחת פקודה מוצפנת למנעול דרך Bluetooth.
import CoreBluetooth
class BLELockManager: NSObject, CBCentralManagerDelegate, CBPeripheralDelegate {
func openLock(peripheral: CBPeripheral, accessToken: String) {
guard let characteristic = lockCharacteristic else { return }
let payload = buildAccessPayload(token: accessToken)
peripheral.writeValue(payload, for: characteristic, type: .withResponse)
}
func peripheral(_ peripheral: CBPeripheral, didWriteValueFor characteristic: CBCharacteristic, error: Error?) {
if error == nil {
hapticFeedback.notificationOccurred(.success) // Дверь открылась
}
}
} | שיטת גישה | מהירות פתיחה | אמינות | מורכבות אינטגרציה | עלות יישום |
|---|---|---|---|---|
| קוד QR | 2–3 שניות | בינונית | נמוכה | נמוכה |
| NFC HCE | 0.5–1 שניות | גבוהה | בינונית | בינונית |
| Bluetooth BLE | 1–2 שניות | גבוהה | גבוהה | גבוהה |
הפתרון המשולב שלנו מהיר פי 2.5 משימוש בקודי QR בלבד. צרו קשר כדי לבחור את שיטת הגישה האופטימלית לחלל העבודה המשותף שלכם.
מנויים וחיוב
מנוי לחלל עבודה משותף הוא חבילת שעות או ימים. הניכוי מתבצע בכל ביקור. אנו מיישמים לוגיקה גמישה:
- מנוי שעתי: כניסה/יציאה, מנכה ceil(דקות / 60) שעות.
- מנוי יומי: יום אחד לכל ביקור בתוך יום קלנדרי.
- ללא הגבלה: רק בדיקת תקופת תוקף, ללא הגבלת ביקורים.
| סוג מנוי | ניכוי | מקסימום ליום |
|---|---|---|
| שעתי | כל 60 דקות | 12 שעות |
| יומי | יום אחד לכל ביקור | כניסה אחת |
| ללא הגבלה | ללא ניכוי | ללא הגבלה |
יתרת המנוי מתעדכנת בזמן אמת — דרך push לאחר סגירת הסשן. אם היתרה נגמרת באמצע היום, אנו מציעים רכישה בתוך האפליקציה מההודעה. זה מגדיל את שיעור ההמרה של upsell ב-20–30%, לפי ניסיון הפרויקטים שלנו. חלל עבודה משותף טיפוסי עם 500 חברים מתמודד עם עד 10,000 הזמנות ביום.
איך מערכת החברים והאורחים עובדת
לחברים קבועים יש גישה קבועה והרשאות מורחבות (לוקרים, מדפסת ייעודית). אורחים מקבלים גישה זמנית דרך קוד QR שנוצר על ידי החבר מהאפליקציה.
קוד ה-QR לאורח מוגבל: רק אזורים ספציפיים, תאריך ספציפי, מקסימום כניסה אחת:
def generate_guest_qr( host_user_id: str, zones: list[str], valid_date: date ) -> str:
payload = {
"type": "GUEST",
"hostId": host_user_id,
"zones": zones,
"validDate": valid_date.isoformat(),
"singleUse": True,
"token": secrets.token_urlsafe(16)
}
return sign_and_encode(payload, private_key) למה לבחור בגישה היברידית?
שילוב של QR לאורחים ו-BLE לחברים קבועים יוצר איזון אופטימלי בין אבטחה לנוחות. מנעולי BLE נפתחים מהר יותר (1–2 שניות) ואינם דורשים מגע ויזואלי, מה שחיוני לאזורי מעבר. QR נשאר פתרון זול לגיבוי למבקרים זמניים.
תהליך הערכה ועבודה
- איסוף נתונים וניתוח — איסוף דרישות, זרימות משתמש, אבות טיפוס עיצוביים.
- ביקורת / ניתוח — סקירת מערכות קיימות, הגדרת נקודות אינטגרציה.
- עיצוב ואב-טיפוס — אבות טיפוס מפורטים ועיצוב UI/UX.
- הערכה — מתן לוח זמנים ועלות לאחר הניתוח.
- פיתוח — קוד מקורי (SwiftUI/UIKit ל-iOS, Jetpack Compose לאנדרואיד) לפי הנחיות הפלטפורמה.
- אינטגרציה — backend, מערכות תשלום (StoreKit 2 / Google Play Billing), מערכות ניהול בניינים.
- בדיקות — QA על מכשירים אמיתיים, בדיקות עומס עד 1000 הזמנות במקביל.
- השקה — העלאה ל-App Store ול-Google Play, מעבר ביקורת, תמיכה באחריות ל-3 חודשים.
יש לנו ניסיון של 5+ שנים בפיתוח פתרונות ניידים והשלמנו מעל 20 פרויקטים לניהול חללי עבודה משותפים.
מה כלול בעבודה
- ניתוח ואב-טיפוס: תיאור תרחישים, User Flow, אבות טיפוס עיצוביים.
- פיתוח: קוד מקורי ל-iOS ולאנדרואיד לפי הנחיות הפלטפורמה.
- אינטגרציות: חיבור ל-backend שלכם, מערכות תשלום, מערכות ניהול בניינים.
- בדיקות: QA על מכשירים אמיתיים, בדיקות עומס, בדיקות תאימות.
- תיעוד: תיעוד API טכני, מדריכי מנהלים.
- פרסום: העלאה ל-App Store ול-Google Play, מעבר ביקורת.
- תמיכה: תחזוקת אחריות ל-3 חודשים לאחר ההשקה.
הערכות לוח זמנים
גרסה בסיסית (קטלוג חללים, הזמנת חדרי ישיבות, גישת QR, מנויים): 5–7 שבועות. אינטגרציית BLE עם מנעולים ספציפיים מוסיפה עוד 1–2 שבועות בהתאם ליצרן. העלות מחושבת באופן אישי — צרו קשר להערכת פרויקט. עלות הפיתוח הבסיסית מתחילה ב-$8,000. הזמינו פיתוח היום כדי להפוך את ניהול חלל העבודה המשותף שלכם לאוטומטי.
השירות שלנו כולל פיתוח אפליקציות ניידות לחללי עבודה משותפים, אפליקציית הזמנת חדרי ישיבות, בקרת גישה אלקטרונית לחללי עבודה משותפים, ניהול גישה נייד, גישת NFC לחללי עבודה משותפים, מנעולי BLE לחללי עבודה משותפים, אפליקציית מנויים לחללי עבודה משותפים, גישת QR לאורחים, פיתוח iOS אנדרואיד לחללי עבודה משותפים, SwiftUI Jetpack Compose לחללי עבודה משותפים, מערכת ניהול לחללי עבודה משותפים, וגישה ללא מגע לחללי עבודה משותפים.
דוגמה ליישום QR לאורח בצד השרת
def generate_guest_qr(
host_user_id: str,
zones: list[str],
valid_date: date
) -> str:
payload = {
"type": "GUEST",
"hostId": host_user_id,
"zones": zones,
"validDate": valid_date.isoformat(),
"singleUse": True,
"token": secrets.token_urlsafe(16)
}
return sign_and_encode(payload, private_key)







