A user spends 20 minutes filling out a form on their phone, gets distracted, opens their laptop—and the form is empty. Analytics show that about 40% of users abandon multi-step forms due to lack of progress saving, leading to up to 30% conversion loss on order or registration forms. Handoff solves this: start on one device, continue on another without losing context. We implement handoff mechanisms turnkey, ensuring seamless context transfer across any devices. Our team has over 5 years of experience integrating both native and server-side solutions. For iOS and macOS we use Apple Handoff, for Android and Windows—a server-side session, and for hybrid scenarios—a combination of both approaches.
Apple Handoff: Minimal Development, But Apple Only
NSUserActivity is Apple's framework for context transfer via iCloud. It supports iOS, macOS, iPadOS. It works automatically when activityType and userInfo are correctly configured. However, it requires a single iCloud account and active Bluetooth/Wi-Fi. According to Apple's documentation, the transferred data limit is ~256 KB. For React Native we use a native module:
let activity = NSUserActivity(activityType: "com.yourapp.editDocument") activity.title = "Editing Document" activity.userInfo = ["documentId": documentId, "scrollPosition": scrollY, "formData": formData] activity.isEligibleForHandoff = true activity.becomeCurrent() On the receiving side, AppDelegate gets application(_:continue:restorationHandler:) with this NSUserActivity. The userInfo data is limited to ~256 KB. For a client with an Android phone and Windows laptop, this doesn't work.
When Is Apple Handoff Not Enough?
Apple's Handoff is not suitable for cross-ecosystem scenarios. If users work with Android, Windows, or multiple accounts, a server-side solution is required. For example, an e-commerce app: a customer starts checkout on Android and finishes on Windows—the data must be synced.
Why Is Autosave Critical?
Real-time autosave of task state reduces support load: users complain less about data loss. On each significant action (step transition, text input, option selection), the serialized state is sent to the server. A 1-second debounce cuts requests by 80% compared to saving every input event. This is especially important for mobile networks with unstable connectivity.
How to Implement Cross-Platform Handoff?
The universal approach: the task session is stored on the server, tied to the account, not to the device.
type TaskSession = { sessionId: string; userId: string; taskType: 'checkout' | 'editDocument' | 'formFill' | 'mediaUpload'; state: Record<string, unknown>; // serialized task state activeDeviceId: string; updatedAt: number; expiresAt: number; }; Granular state: save only necessary fields. For a form—step, filled fields, validation status. Sensitive data (CVV, PIN) is never saved. Conflict resolution: last write wins (LWW) for simplicity; for complex tasks—vector clocks. Active session detection: on app open, check for unfinished sessions.
How to Notify the Second Device About a Session?
Several methods exist: push notification (silent push with sessionId), deep link (yourapp://handoff/session/abc123), QR code, automatic polling. Automatic polling offers the best UX but requires a clear privacy policy: the user must see active sessions.
| Notification Method | Latency | UX | Requirements |
|---|---|---|---|
| Push notification | 1–5 seconds | Medium | Configure APNs/FCM |
| Deep link | Instant | High | URL handling |
| QR code | 10–30 seconds | Medium | QR screen |
| Automatic polling | 10–30 seconds | High | Session list API |
Handoff Method Comparison
| Criterion | Apple NSUserActivity | Server-Side Session | Hybrid |
|---|---|---|---|
| Ecosystem | Apple only | All platforms | Apple + others |
| Latency | 0–1 second | 200–500 ms | 0–1 sec (Apple) / 200–500 ms (others) |
| Development | Minimal | Medium | High |
| Versatility | Low | High | Very high |
What's Included in the Work?
- Designing the data schema for session storage and API endpoints.
- Implementing server logic (save, restore, delete sessions).
- Integrating with client apps (autosave, active session detection).
- Configuring push notifications (APNs/FCM) and deep links (Universal Links / App Links).
- Building the session recovery UI (dialog, selection screen).
- Integration documentation, security recommendations, and team training.
- 2 weeks of post-release support.
Handoff Development Stages
- Design session storage schema.
- Implement server endpoints (save, restore, delete).
- Integrate with client apps (autosave, session detection).
- Implement notifications (push, deep link) and recovery UI.
- Test scenarios across different devices and OSes.
- Document integration and security guidelines.
Handoff Verification Checklist
- Session is correctly saved when app goes to background.
- Data is restored when opened on another device.
- Sensitive fields are excluded from serialization.
- Push notification is sent upon save.
- Deep link is verified.
Timeline Estimate
Server-side task session with deep link, autosave, and UI: 3 to 5 weeks. With Apple NSUserActivity + cross-platform fallback: 4 to 6 weeks. The cost is calculated individually after project analysis.
Get a consultation—we will help you choose the optimal Handoff mechanism. Order handoff development for your application.







