Mobile App for Excursions and Tour Guides
A tourist guide app must work under far-from-ideal conditions: poor roaming internet, drained battery at day end, bright sun making screen unreadable, noise and inability to look at phone. All these are limitations that define architectural decisions.
Offline Content: Maps and Media
Tourists download guide before trip and use it offline. Offline maps — first priority.
Mapbox allows downloading tiles for a region via OfflineManager. User selects city, app downloads tiles of needed zoom levels (usually 10-16) — this is 50-200 MB for an average city. Map updates when internet available.
Google Maps doesn't provide offline tiles through SDK — only via Google Maps app's own UI. For custom guide, Mapbox or HERE Maps SDK — only options with programmatic offline cache control.
Audio guides — MP3 or AAC files, downloaded with route. Auto-playback when approaching point: geofence 50-100 meter radius, CLCircularRegion / Android Geofencing API. On entry — AVAudioPlayer / MediaPlayer starts playback. User doesn't need to look at screen.
High-resolution images — heavy. Strategy: thumbnail (100-200 KB) in list, full photo (1-3 MB) loads on tap and caches. Kingfisher (iOS) / Glide (Android) for image cache management. Offline mode: if photo already cached — show, if not — placeholder.
Routes and Navigation
Excursion route — sequence of points with description. Visualization: Polyline on map via connecting coordinates. Mapbox LineLayer with custom style — color, thickness, dashes for recommended path.
Turn-by-turn navigation for pedestrians — either Mapbox Navigation SDK integration or simple mode "arrow + distance to next point". Second option simpler, uses less battery, better for excursion (person walks, looks around, doesn't follow route strictly).
AR Mode
Extra feature: point camera at building — see name, construction year, historical info. ARKit (iOS, ARWorldTrackingConfiguration) + CoreLocation for direction → object mapping in world coordinates → SCNNode with UIView as overlay.
On Android — ARCore with GeospatialAPI (Google Maps AR) — allows positioning AR content by GPS coordinates without markers.
AR for guide — impressive feature, but needs accurate GPS and good lighting. Object positioning drifts in poor GPS signal. Implement as optional mode with fallback to map.
Audio Guide Without Headphones
Priority: user listens to excursion via speaker. Phone speaker works in conversation mode (quiet, to ear) or media mode (loud). Need media mode: AVAudioSession.sharedInstance().setCategory(.playback) (iOS), AudioAttributes.USAGE_MEDIA (Android).
On incoming call — pause playback (audioSessionInterruptionNotification on iOS / AudioFocusRequest on Android), resume after call ends.
Monetization and Content
Base content free, premium routes — in-app purchase. StoreKit 2 (iOS) — Product.purchase() with async/await. Android BillingClient — launchBillingFlow(). Subscription for all city routes or one-time route purchase.
Content management: routes and points edited via CMS (headless, e.g. Strapi), published via API. App checks for updates on launch and in background.
Stack: Swift/SwiftUI (iOS) or Flutter (cross-platform), Mapbox SDK, AVFoundation / MediaPlayer, StoreKit 2 / Google Play Billing.
Timeline: 8 to 16 weeks. Cost calculated individually.







