Integrating UWB for Indoor Navigation in Mobile Apps
Precise Indoor Positioning: The Role of UWB and Its Capabilities
We integrate UWB (Ultra-Wideband) for precise positioning in mobile applications. GPS does not work indoors — that is well known. Bluetooth Low Energy offers 1-3 meter accuracy at best. Wi-Fi RSSI triangulation gives 2-5 meters with high instability. UWB — a technology with 10-30 centimeter accuracy based on measuring radio signal propagation time (Time of Flight / Two-Way Ranging). This is what Apple built into iPhone 11+ via the U1 chip, and what gives AirTag the precision of "your bag is here, turn right." Our team has 10+ years of experience in mobile solution development, and we guarantee a turnkey UWB integration. Get a consultation on selecting UWB equipment for your facility.
Why UWB Is Better Than BLE and Wi-Fi for Indoor Navigation
| Parameter | UWB | BLE | Wi-Fi RSSI |
|---|---|---|---|
| Accuracy | 10-30 cm | 1-3 m | 2-5 m |
| Stability | High | Medium | Low |
| Latency | < 1 ms | 1-10 ms | 50-100 ms |
| Interference resistance | High | Medium | Low |
UWB provides accuracy 10 times better than BLE, as confirmed by our projects for shopping malls and warehouses.
How UWB Works and What It Means for Developers
UWB uses pulses ~500 MHz wide in the 6-8.5 GHz range. The signal propagation time between two devices is measured with nanosecond accuracy (TWR — Two-Way Ranging, or TDoA — Time Difference of Arrival). Distance is calculated from time: 1 ns ≈ 30 cm.
For an indoor positioning scenario, you need anchors — UWB beacons with known coordinates — and a mobile device (tag). Based on measured distances to at least three anchors, the position is calculated via trilateration.
Supported Devices
iOS: Apple NearbyInteraction framework. Devices with U1/U2 chip: iPhone 11–15, iPhone SE 3rd gen, AirTag, HomePod mini 2, Apple Watch Ultra. NISession is the main class. One session = one device pair. For positioning relative to multiple anchors, use multiple parallel NISession instances.
Android: UwbManager from Jetpack Core UWB (androidx.core:core-uwb). Supported devices: Samsung Galaxy (S21 Ultra+, S22+, S23, S24, Z Fold3+), Pixel 6 Pro+, some Xiaomi. Check support: UwbManager.isAvailable().
UWB anchors (hardware): For infrastructure positioning, third-party anchors are needed: Qorvo DWM3000EVB, Decawave DWM1001, Sewio RTLS, Pozyx. They communicate via IEEE 802.15.4z and have SDKs for configuration.
Platform Comparison: iOS vs Android
| Parameter | iOS (NearbyInteraction) | Android (UwbManager) |
|---|---|---|
| Framework | NISession | UwbManager |
| Token exchange | NIDiscoveryToken | Configuration via Controlee |
| Anchor support | Only Qorvo MFi | Any IEEE 802.15.4z |
| Background mode | Not supported | Not supported |
Platform Limitations
Apple Nearby Interaction is peer-to-peer only between two Apple devices or with MFi-certified accessories. For infrastructure indoor positioning (anchors → phone) directly via NISession, it works only with Qorvo-compatible anchors via a special NIConfiguration.
NISession requires exchanging NIDiscoveryToken between devices beforehand — typically via Multipeer Connectivity, Bluetooth, or a server. After token exchange, NISession.run(configuration:) starts measurements.
How to Integrate UWB into a Mobile App?
Practical Case: Navigation in a Shopping Mall (from Our Practice)
Scenario: a shopper looks for a specific store. GPS is unavailable. BLE navigation is not accurate enough for 3-meter-wide corridors. UWB anchors are installed on the ceiling every 10-15 meters.
Pozyx Creator anchors (UWB, PoE, self-localization) → central Pozyx server collects positioning data → REST API provides tag device coordinates in the building's coordinate system.
Mobile app: upon entering the building, the device "connects" to the system (via BLE handshake for identification), then every 100-200 ms receives coordinate updates via WebSocket (x, y, floor).
Coordinates are overlaid on the building plan (SVG floor scheme). Smooth marker movement: Kalman filter to smooth noisy UWB measurements. Without the filter, the marker "jumps." A Kalman filter on the mobile device is 20-30 lines of code but significantly improves UX.
Navigation to a point: A* pathfinding on a graph of passages (the graph is built from the SVG scheme, with forbidden zones — walls and display cases). If deviation from the route exceeds 1m, recalculate.
Integration with Apple NearbyInteraction
For device-to-device scenarios (courier → client, warehouse worker → specific pallet):
import NearbyInteraction class UWBSession: NSObject, NISessionDelegate { let session = NISession() func startSession(with peerToken: NIDiscoveryToken) { session.delegate = self let config = NINearbyPeerConfiguration(peerToken: peerToken) config.isCameraAssistanceEnabled = true // iOS 16+: AR overlay session.run(config) } func session(_ session: NISession, didUpdate nearbyObjects: [NINearbyObject]) { guard let peer = nearbyObjects.first else { return } if let distance = peer.distance { print("Distance: \(distance) m") } if let direction = peer.direction { // SIMD3<Float> - direction in 3D print("Direction: \(direction)") } } } isCameraAssistanceEnabled enables Precision Finding — an AR arrow over the camera shows direction to the object (like in AirTag Precision Finding). Requires ARKit and NSCameraUsageDescription.
Token Exchange
NIDiscoveryToken cannot be created programmatically — only obtained from session.discoveryToken. To start a UWB session, both devices must exchange tokens beforehand. Typical scheme: both devices publish the token via Bluetooth Peripheral → scan each other → receive tokens → start NISession.
Using CloudKit or a server — for scenarios where devices are not physically close during initialization.
Typical Integration Problems
- Multipath interference. UWB signal reflects from metal surfaces (shelves, equipment) — false distance measurements. Solution: NLOS (Non-Line-of-Sight) detection via analysis of First Path Power vs Total Received Power. Pozyx and Decawave return these metrics in the raw packet.
- NISession suspended. iOS pauses the UWB session when the app goes to background.
sessionWasSuspended(_ session:)— save last position; onsessionSuspensionEnded, restart. UWB does not work in background — platform limitation. - Anchor calibration. Anchor coordinates in space must be measured precisely — a 5 cm error shifts all calculations. Self-localization of anchors (Pozyx, Sewio) automatically determines their coordinates at first startup via UWB TWR between themselves.
- Accuracy in motion. At high speed (> 2 m/s), TDoA systems give more errors than TWR. For pedestrians, TWR with 10 Hz update is sufficient.
What Is Included in the Work?
- Audit of infrastructure and use scenarios
- Selection of UWB platform and equipment
- SDK integration (iOS NearbyInteraction, Android UwbManager, anchors)
- Kalman filter and navigation graph development
- Load testing (up to 100+ devices)
- Documentation, support, and team training
Project Process
- Audit of use scenario and equipment
- Selection of UWB platform (Apple NI / Qorvo / Pozyx)
- Pilot on a test zone with accuracy measurement
- Integration with the mobile app
- Kalman filtering and navigation graph
- Load testing (100+ simultaneous devices)
- Anchor deployment and commissioning
Timeline
A pilot with Apple NearbyInteraction on two devices takes 1-2 weeks. A full indoor navigation system with infrastructure anchors, Kalman filter, and building map takes 2-4 months depending on the facility's scale. The cost is calculated after assessing the infrastructure and target scenarios.
Contact us for a consultation on your project. Order a turnkey UWB integration — get precise indoor positioning.







