| UI or UX | UI + UX - Permission-gated current-location request and recovery flow | UI + UX - Contextual operating-system or browser permission request for device resources, powerful browser features, private user data, or local capabilities | UI + UX - Spatial viewport for location-based objects, layers, and routes | UI + UX - Structured postal or contact address capture flow | UI + UX - Durable privacy-control surface for account, product, device, app-access, activity, visibility, and sharing settings | UI + UX - Connectivity-mode and local-work continuity state |
| UI guidance | Render location access as a task-scoped flow with purpose text, current permission state, requested precision, scope, native-prompt handoff, granted fix, denied recovery, manual fallback, stale-coordinate labels, and stop-sharing controls. | Render a permission request as a contextual feature gate that names the resource, user action, immediate benefit, system prompt timing, available choices, and fallback before invoking the OS or browser permission prompt. | Render a real spatial viewport with visible map region, zoom state, scale or distance context, markers or shapes anchored to coordinates, selected-place detail, cluster counts, visible layer/filter controls, and a fallback list or table for the same results. | Render address capture as a labelled fieldset or page section with address line, locality, region when needed, postal code, country, and an address lookup only when its coverage is clear. | Render privacy settings as a returnable control surface with current effective values, privacy categories, data types, app or service access, account/device/product scope, source of truth, managed or unavailable reasons, last updated status, and save or immediate-apply feedback. | Show offline status where it changes the current task, naming what remains available such as cached reports, local draft editing, queued saves, or read-only history. |
| UX guidance | Use a location permission flow when current device coordinates materially reduce effort or improve a location-dependent task and users can understand why location is needed before the browser or OS prompt appears. | Use permission request when a feature needs operating-system or browser authorization for resources such as location, camera, microphone, photos, contacts, notifications, Bluetooth, clipboard, motion sensors, or other powerful features. | Use Map view when the user's decision depends on where objects are, how far apart they are, what falls inside the current area, which route or coverage applies, or how dense nearby points are. | Use address entry when the service needs a complete address for delivery, billing, correspondence, identity, eligibility, routing, tax, or account records and downstream systems need reliable address parts. | Use privacy settings when users need to inspect and change ongoing privacy posture for saved activity, profile visibility, app access, device permissions, data sharing, ad personalization, location, connected apps, or product privacy dashboards. | Use offline state to preserve trust and task continuity when connection loss changes what users can read, edit, submit, sync, refresh, or share. |
| Good UI | A route check-in says Use current location to confirm you are at Gate B, offers Use current location or Enter address, accepts approximate location for city-level help, and labels the returned fix as accurate to 42 m. | A field service app asks for location only when the user taps Start route, explains that current location will verify arrival, then opens the system permission prompt and offers manual address entry if declined. | A clinic finder map shows visible bounds, zoom level, selected clinic marker, appointment availability markers, a transit layer toggle, cluster counts, distance chips, and a synchronized results list. | A benefits claim asks for postcode lookup, lists matching addresses, includes Enter address manually, and then shows editable address line 1, address line 2, town or city, postcode, and country. | An account privacy dashboard groups Saved activity, Profile visibility, Ad personalization, Connected apps, Location history, Device permissions, and Data deletion, with current values, scope labels, last updated times, and unavailable reasons. | A field report says Offline: 3 edits saved on this device, cached customer history shown from 10:42, Submit disabled until connection returns, and Retry connection. |
| Bad UI | The home page triggers the browser location prompt before users choose any location-dependent action. | An app asks for location, contacts, photos, and notifications on first launch before the user knows why any resource is needed. | A decorative map background contains unlabeled pins with no coordinate meaning, no current region, no selected marker, no legend, and no list fallback. | A form has one full-width Address field with placeholder-only instructions and no country, postcode, apartment, or manual recovery path. | A Privacy page links only to a legal policy and has no controls for activity history, public profile fields, personalization, app access, or data sharing. | A blank page says You are offline even though the app has cached drafts and help content. |
| Good UX | A user taps Check in nearby, grants Allow once, sees the current fix and accuracy, confirms the place, and the app discards coordinates after check-in. | A user taps Scan receipt, sees why camera access is needed for scanning, grants access, scans the receipt, and can later revoke camera access from settings without losing account access. | A dispatcher pans to the west district, the result count and list update to the current bounds, a cluster expands at closer zoom, and the selected incident popup remains tied to the marker. | A user enters SW1A1AA, sees several addresses, selects Flat 2, adds an organization name, and reviews the stored line, town, postcode, and country parts before continuing. | A user pauses saved activity, clears search history for a date range, disables ad personalization, hides birthday visibility, revokes a connected app, and sees which values apply immediately versus after sync. | A user loses connection while editing an inspection note, sees it saved on this device, attaches photos to a queue, and later watches the queue sync after reconnect. |
| Bad UX | A user chooses delivery estimate and the app demands precise location even though postal code entry would work. | A user denies microphone access and the app loops the same system prompt every time they tap anything in the support screen. | A user filters to open locations but the map markers update while the list still shows closed locations, causing the wrong branch to be selected. | A user in a new building cannot proceed because the lookup cannot find the postcode and there is no manual entry option. | A user turns off location sharing in account privacy settings, but the device-level location permission remains active and the page never explains the split. | The app keeps a spinner on Save during airplane mode and never explains that no network request can start. |
| Best fit | Current device coordinates materially improve a task such as nearby search, route start, check-in, delivery estimate, safety sharing, field work, or support diagnostics. | A feature needs operating-system, browser, or device authorization to access location, camera, microphone, photos, contacts, notifications, Bluetooth, clipboard, motion sensors, storage access, or another powerful feature. | Users choose or inspect objects by where they are, how near they are, or what area they fall inside. | The product needs a complete postal, delivery, billing, service, or official contact address. | Users need ongoing control over personal data collection, saved activity, visibility, app access, device permissions, connected services, data sharing, or personalization. | Connection loss or server reachability changes the user's current task. |
| Avoid when | Typed address, postal code, saved place, or map selection is simpler and less invasive. | The decision is consent to optional data use rather than access to a device or browser resource. | Location is only a label or decorative backdrop. | The product only needs one short location label, room name, or delivery note. | The task is a first-time opt-in to one optional purpose; use consent prompt. | A single request failed while the rest of the app is reachable and an error state is clearer. |
| Required state | Unsupported browser, blocked iframe, missing permissions policy, insecure context, or disabled location services state. | Contextual request state tied to the user action that needs the resource. | Default map state with visible viewport, zoom level or distance context, markers, layer state, result count, and synchronized fallback list. | Initial state with country or domestic coverage explained and lookup or manual entry available. | Privacy settings overview with categories and current effective values. | Online normal state with no offline warning. |
| Accessibility burden | Provide manual address, saved place, search, or assisted alternatives for users who cannot or do not want to share device location. | Use a labelled region or dialog title that names the resource and feature, such as Allow location for route check-in. | Expose the map name, current area, result count, active filters, layers, selected place, and location permission state as text. | Group related address fields with a clear heading or legend that states which address is being requested. | Use clear headings, labels, descriptions, and status text for each privacy category and control. | Announce significant connectivity changes with status messaging when they affect the current task. |
| Common misuse | Prompting for location before users choose a task that needs it. | Asking for multiple resources at launch before the user has attempted the relevant feature. | Using a map as decoration when the positions do not affect the task. | Forcing every address through a domestic postcode or ZIP lookup. | Replacing privacy settings with a privacy policy link or legal notice. | Showing only a browser-style offline page when useful cached or local content exists. |