משתמש מבלה 20 דקות במילוי טופס בטלפון, מוסח דעתו, פותח את המחשב הנייד—והטופס ריק. נתוני אנליטיקה מראים שכ-40% מהמשתמשים נוטשים טפסים מרובי-שלבים בגלל חוסר שמירת התקדמות, מה שמוביל לאובדן המרות של עד 30% בטפסי הזמנה או הרשמה. Handoff פותר זאת: מתחילים במכשיר אחד, ממשיכים באחר ללא אובדן הקשר. אנו מיישמים מנגנוני handoff במפתח סגור, ומבטיחים העברת הקשר חלקה בין כל המכשירים. לצוות שלנו יש ניסיון של למעלה מ-5 שנים בשילוב פתרונות מקוריים ופתרונות צד-שרת. עבור iOS ו-macOS אנו משתמשים ב-Apple Handoff, עבור Android ו-Windows—בסשן צד-שרת, ובמקרים היברידיים—בשילוב של שתי הגישות.
Apple Handoff: פיתוח מינימלי, אבל רק ל-Apple
activityType הוא המסגרת של Apple להעברת הקשר דרך iCloud. הוא תומך ב-iOS, macOS ו-iPadOS. הוא פועל אוטומטית כאשר userInfo ו-let activity = NSUserActivity(activityType: "com.yourapp.editDocument") activity.title = "Редактирование документа" activity.userInfo = ["documentId": documentId, "scrollPosition": scrollY, "formData": formData] activity.isEligibleForHandoff = true activity.becomeCurrent() מוגדרים כראוי. עם זאת, הוא דורש חשבון iCloud יחיד ו-Bluetooth/Wi-Fi פעילים. לפי התיעוד של Apple, מגבלת הנתונים המועברים היא ~256 KB. עבור React Native אנו משתמשים במודול מקורי:
let activity = NSUserActivity(activityType: "com.yourapp.editDocument")
activity.title = "Редактирование документа"
activity.userInfo = ["documentId": documentId, "scrollPosition": scrollY, "formData": formData]
activity.isEligibleForHandoff = true
activity.becomeCurrent()בצד המקבל, AppDelegate מקבל application(_:continue:restorationHandler:) עם NSUserActivity זה. נתוני userInfo מוגבלים ל-~256 KB. עבור לקוח עם טלפון Android ומחשב נייד Windows, זה לא עובד.
מתי Apple Handoff לא מספיק?
Apple Handoff אינו מתאים לתרחישים חוצי-מערכות אקולוגיות. אם משתמשים עובדים עם Android, Windows או חשבונות מרובים, נדרש פתרון צד-שרת. לדוגמה, אפליקציית מסחר אלקטרוני: לקוח מתחיל תשלום ב-Android ומסיים ב-Windows—הנתונים חייבים להיות מסונכרנים.
למה שמירה אוטומטית קריטית?
שמירה אוטומטית בזמן אמת של מצב המשימה מפחיתה את עומס התמיכה: משתמשים מתלוננים פחות על אובדן נתונים. בכל פעולה משמעותית (מעבר שלב, הזנת טקסט, בחירת אפשרות), המצב הסריאלי נשלח לשרת. debounce של שנייה אחת מקצץ את הבקשות ב-80% בהשוואה לשמירה על כל אירוע קלט. זה חשוב במיוחד עבור רשתות סלולריות עם קישוריות לא יציבה.
איך ליישם Handoff חוצה-פלטפורמות?
הגישה האוניברסלית: סשן המשימה נשמר בשרת, מקושר לחשבון, לא למכשיר.
type TaskSession = {
sessionId: string;
userId: string;
taskType: 'checkout' | 'editDocument' | 'formFill' | 'mediaUpload';
state: Record<string, unknown>; // сериализованный стейт задачи
activeDeviceId: string;
updatedAt: number;
expiresAt: number;
};
מצב גרעיני: שמירת שדות נחוצים בלבד. עבור טופס—שלב, שדות שמולאו, מצב אימות. נתונים רגישים (CVV, PIN) לעולם לא נשמרים. פתרון קונפליקטים: כתיבה אחרונה מנצחת (LWW) לפשטות; למשימות מורכבות—שעונים וקטוריים. זיהוי סשן פעיל: בפתיחת האפליקציה, בדיקת סשנים שלא הסתיימו.
איך להודיע למכשיר השני על סשן?
קיימות מספר שיטות: התראת push (push שקט עם type TaskSession = { sessionId: string; userId: string; taskType: 'checkout' | 'editDocument' | 'formFill' | 'mediaUpload'; state: Record<string, unknown>; // сериализованный стейт задачи activeDeviceId: string; updatedAt: number; expiresAt: number; }; ), deep link (sessionId), קוד QR, סקירה אוטומטית. סקירה אוטומטית מציעה את חוויית המשתמש הטובה ביותר אך דורשת מדיניות פרטיות ברורה: המשתמש חייב לראות סשנים פעילים.
| שיטת הודעה | זמן השהיה | חוויית משתמש | דרישות |
|---|---|---|---|
| התראת push | 1–5 שניות | בינונית | הגדרת APNs/FCM |
| Deep link | מיידי | גבוהה | טיפול בכתובות URL |
| קוד QR | 10–30 שניות | בינונית | מסך QR |
| סקירה אוטומטית | 10–30 שניות | גבוהה | API לרשימת סשנים |
השוואת שיטות Handoff
| קריטריון | Apple NSUserActivity | סשן צד-שרת | היברידי |
|---|---|---|---|
| מערכת אקולוגית | Apple בלבד | כל הפלטפורמות | Apple + אחרות |
| זמן השהיה | 0–1 שנייה | 200–500 אלפיות שנייה | 0–1 שנייה (Apple) / 200–500 אלפיות שנייה (אחרות) |
| פיתוח | מינימלי | בינוני | גבוה |
| גמישות | נמוכה | גבוהה | גבוהה מאוד |
מה כלול בעבודה?
- עיצוב סכמת נתונים לאחסון סשנים ונקודות קצה API.
- יישום לוגיקת שרת (שמירה, שחזור, מחיקת סשנים).
- שילוב עם אפליקציות לקוח (שמירה אוטומטית, זיהוי סשן פעיל).
- הגדרת התראות push (APNs/FCM) ו-deep links (Universal Links / App Links).
- בניית ממשק שחזור סשן (דיאלוג, מסך בחירה).
- תיעוד שילוב, המלצות אבטחה והדרכת צוות.
- שבועיים של תמיכה לאחר השחרור.
שלבי פיתוח Handoff
- עיצוב סכמת אחסון סשנים.
- יישום נקודות קצה בשרת (שמירה, שחזור, מחיקה).
- שילוב עם אפליקציות לקוח (שמירה אוטומטית, זיהוי סשן).
- יישום התראות (push, deep link) וממשק שחזור.
- בדיקת תרחישים במכשירים ומערכות הפעלה שונות.
- תיעוד שילוב והנחיות אבטחה.
רשימת בדיקה לאימות Handoff
- הסשן נשמר כראוי כשהאפליקציה עוברת לרקע.
- הנתונים משוחזרים בפתיחה במכשיר אחר.
- שדות רגישים אינם נכללים בסריאליזציה.
- התראת push נשלחת בעת שמירה.
- ה-deep link מאומת.
הערכת לוחות זמנים
סשן משימה צד-שרת עם deep link, שמירה אוטומטית וממשק משתמש: 3 עד 5 שבועות. עם Apple NSUserActivity + גיבוי חוצה-פלטפורמות: 4 עד 6 שבועות. העלות מחושבת באופן אישי לאחר ניתוח הפרויקט.
קבלו ייעוץ—נעזור לכם לבחור את מנגנון ה-Handoff האופטימלי. הזמינו פיתוח handoff עבור האפליקציה שלכם.







