Back to compare picker

QR scan vs Camera capture vs Permission request vs File upload vs Two-factor authentication vs Security warning

Choose QR scan when the product must guide users through scanning a visible code, decode the payload, show scan status, handle unsupported detectors, camera permission, torch, focus, distance, glare, no code found, multiple codes, invalid format, duplicate scan, expired payload, offline decode, and safe action preview.

Decision dimensions

Dimension QR scanCamera capturePermission requestFile uploadTwo-factor authenticationSecurity warning
UI or UX UI + UX - Camera or image-based QR detection, decode, validation, and action preview flowUI + UX - Permission-gated live camera preview for creating and reviewing new photo or video mediaUI + UX - Contextual operating-system or browser permission request for device resources, powerful browser features, private user data, or local capabilitiesUI + UX - File selection and attachment controlUI + UX - Additional-factor challenge and recovery flowUI + UX - Security-risk warning and safe interruption before unsafe navigation, download, submission, preview, or sensitive action
UI guidance Render QR scan as a detection and decode flow with clear purpose, supported-format check, permission state, camera preview or delegated scanner handoff, aim guide, torch and camera controls, scan feedback, decoded summary, action confirmation, fallback entry, and privacy copy.Render camera capture as a deliberate media-acquisition surface with purpose text, camera permission state, selected camera, live preview, privacy indicator, framing guide, capture button, shutter feedback, review preview, retake, crop or rotate, submit, cancel, and upload fallback.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 visible label, persistent hint, native file chooser or equivalent button, accepted file formats, maximum file size, selected filename, uploaded status, remove control, and field-specific error message.Render two-factor authentication as a focused additional-factor challenge with factor name, destination or protected action, delivery hint, code or approval input, resend timing, alternate factor, recovery-code route, trusted-device choice, and safe failure handling.Render a security warning as a high-clarity interruption that names the detected risk, identifies the destination or object, explains the concrete threat, presents the safest action as the primary path, and separates any override behind deliberate risk detail.
UX guidance Use QR scan when users can complete a task faster by pointing a camera or selecting an image that contains a QR code, and the decoded payload can be validated before the product acts on it.Use camera capture when users need to create new visual evidence, scan a document, attach a receipt, capture damage, verify an object, or record a short video from a device camera.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 file upload only when the service needs the original file and make expectations clear before the user opens the file picker.Use two-factor authentication when the product needs stronger proof after a password, passkey, SSO return, risk signal, new device, or sensitive action.Use security warning when a product, browser, operating system, or service has evidence that proceeding could expose credentials, install harmful software, leak sensitive data, bypass trust, or weaken account protection.
Good UI A device-pairing flow says Scan the QR code on your thermostat, shows a square guide, offers torch and Enter code, then previews Pair thermostat TH-204 before connecting.A receipt scanner asks users to Scan receipt, explains camera use, shows a live preview with document edges, captures a frozen preview, then offers Retake, Crop, Upload file, and Attach to claim.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.An evidence upload field says Upload bank statement, hints PDF, PNG, or JPG up to 10 MB, shows statement.pdf selected, displays upload progress, and offers Remove.A code screen says Enter the 6-digit code from your authenticator app to continue to payroll settings, uses autocomplete one-time-code, shows Try another method, and explains recovery codes.A browser interstitial says Deceptive site ahead, shows the suspicious domain, explains that attackers may steal passwords, and makes Back to safety the primary action while placing Visit unsafe site behind Details.
Bad UI The scanner opens the camera and immediately follows the first decoded URL without showing the destination.The page opens the camera on load, hides the active-stream indicator, and starts recording before users choose a task.An app asks for location, contacts, photos, and notifications on first launch before the user knows why any resource is needed.A button labelled Browse sits under Documents with no hint about accepted formats, size limit, or whether the selected file was uploaded.A page says Security check with one empty field, no factor label, no resend timing, and no recovery route.A red page says Security issue with Continue as the only visible action.
Good UX A user scans a warehouse label, sees the decoded asset ID and item name, confirms it is the intended pallet, and continues to inspection.A user starts Scan receipt, grants camera access, sees Align the whole receipt, captures a photo, reviews blur feedback, retakes, then attaches the corrected image.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 user selects bank-statement.pdf, sees it queued, watches progress reach uploaded, removes it to choose another file, then submits after reviewing the rest of the form.A user signs in from a new laptop, enters a code from an authenticator app, chooses not to trust the shared browser, and lands back on the requested workspace.A user clicks a payroll link that visually resembles the company domain, sees the suspicious-domain warning, returns to the trusted site, and reports the link to security.
Bad UX A scanner silently accepts an expired event ticket and the user learns it failed only at the final gate.A user closes a capture sheet but the camera light stays on and the preview remains active in the background.A user denies microphone access and the app loops the same system prompt every time they tap anything in the support screen.A user selects a 28 MB scan, clicks Continue, and the page reloads with File failed but the selected filename and other answers are gone.A user never receives an SMS code and can only keep pressing resend with no wait time, no alternate factor, and no support path.A user sees a vague warning, assumes it is routine maintenance, proceeds, and enters credentials into a phishing page.
Best fit Users need to decode a QR or barcode to pair a device, open a known destination, redeem a ticket, start payment, enroll an authenticator, join Wi-Fi, identify inventory, or import a short payload.Users need to create new photo or video media inside the task.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.The service needs a document, image, scan, spreadsheet, media file, or other original file.A sign-in, new device, risk signal, or sensitive action requires proof beyond the primary credential.A threat signal indicates phishing, malware, deceptive site, unsafe download, invalid certificate, insecure connection, mixed-content submission, suspicious redirect, file preview risk, or account-security danger.
Avoid when A typed code, link, NFC tap, saved account, or standard file upload is simpler and less privacy-sensitive.Existing file upload, text entry, barcode input, or manual confirmation is sufficient.The decision is consent to optional data use rather than access to a device or browser resource.A typed answer, reference number, checkbox, or declaration would satisfy the task.The user is only choosing an authentication method on the initial sign-in page.The message is only a general severe consequence before a product action; use warning text.
Required state Unsupported detector, missing scanner module, insecure context, or unsupported format state.Unsupported browser or insecure-context state with upload or manual alternative.Contextual request state tied to the user action that needs the resource.Empty labelled state with requirements hint and choose-file action.Initial additional-factor challenge with factor name, destination or protected action, and primary account context.Safe path state with primary Back to safety, Cancel, Remove, Use trusted route, or Contact admin action.
Accessibility burden Provide manual code, paste key, scan from photo, or assisted alternatives for users who cannot point a camera at a code.Provide file upload, manual entry, or assisted alternatives for users who cannot use a camera.Use a labelled region or dialog title that names the resource and feature, such as Allow location for route check-in.Use a visible label that names the file purpose, not only Browse or Choose file.Use a clear heading and label that names the factor and does not rely on placeholder-only code fields.Use a heading and text that name the risk before the destination or details, so screen reader users hear the warning context first.
Common misuse Opening the first decoded URL without showing the destination or risk.Opening the camera automatically on page load or hover.Asking for multiple resources at launch before the user has attempted the relevant feature.Asking for a file when a typed reference number or simple answer would be enough.Showing a code field with no factor label, destination, expiry, resend timing, or alternate method.Using vague warning copy that does not say phishing, malware, certificate, insecure connection, dangerous download, or suspicious redirect.

QR scan

UI or UX
UI + UX - Camera or image-based QR detection, decode, validation, and action preview flow
UI guidance
Render QR scan as a detection and decode flow with clear purpose, supported-format check, permission state, camera preview or delegated scanner handoff, aim guide, torch and camera controls, scan feedback, decoded summary, action confirmation, fallback entry, and privacy copy.
UX guidance
Use QR scan when users can complete a task faster by pointing a camera or selecting an image that contains a QR code, and the decoded payload can be validated before the product acts on it.
Good UI
A device-pairing flow says Scan the QR code on your thermostat, shows a square guide, offers torch and Enter code, then previews Pair thermostat TH-204 before connecting.
Bad UI
The scanner opens the camera and immediately follows the first decoded URL without showing the destination.
Good UX
A user scans a warehouse label, sees the decoded asset ID and item name, confirms it is the intended pallet, and continues to inspection.
Bad UX
A scanner silently accepts an expired event ticket and the user learns it failed only at the final gate.
Best fit
Users need to decode a QR or barcode to pair a device, open a known destination, redeem a ticket, start payment, enroll an authenticator, join Wi-Fi, identify inventory, or import a short payload.
Avoid when
A typed code, link, NFC tap, saved account, or standard file upload is simpler and less privacy-sensitive.
Required state
Unsupported detector, missing scanner module, insecure context, or unsupported format state.
Accessibility burden
Provide manual code, paste key, scan from photo, or assisted alternatives for users who cannot point a camera at a code.
Common misuse
Opening the first decoded URL without showing the destination or risk.

Camera capture

UI or UX
UI + UX - Permission-gated live camera preview for creating and reviewing new photo or video media
UI guidance
Render camera capture as a deliberate media-acquisition surface with purpose text, camera permission state, selected camera, live preview, privacy indicator, framing guide, capture button, shutter feedback, review preview, retake, crop or rotate, submit, cancel, and upload fallback.
UX guidance
Use camera capture when users need to create new visual evidence, scan a document, attach a receipt, capture damage, verify an object, or record a short video from a device camera.
Good UI
A receipt scanner asks users to Scan receipt, explains camera use, shows a live preview with document edges, captures a frozen preview, then offers Retake, Crop, Upload file, and Attach to claim.
Bad UI
The page opens the camera on load, hides the active-stream indicator, and starts recording before users choose a task.
Good UX
A user starts Scan receipt, grants camera access, sees Align the whole receipt, captures a photo, reviews blur feedback, retakes, then attaches the corrected image.
Bad UX
A user closes a capture sheet but the camera light stays on and the preview remains active in the background.
Best fit
Users need to create new photo or video media inside the task.
Avoid when
Existing file upload, text entry, barcode input, or manual confirmation is sufficient.
Required state
Unsupported browser or insecure-context state with upload or manual alternative.
Accessibility burden
Provide file upload, manual entry, or assisted alternatives for users who cannot use a camera.
Common misuse
Opening the camera automatically on page load or hover.

Permission request

UI or UX
UI + UX - Contextual operating-system or browser permission request for device resources, powerful browser features, private user data, or local capabilities
UI guidance
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.
UX guidance
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.
Good UI
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.
Bad UI
An app asks for location, contacts, photos, and notifications on first launch before the user knows why any resource is needed.
Good UX
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.
Bad UX
A user denies microphone access and the app loops the same system prompt every time they tap anything in the support screen.
Best fit
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.
Avoid when
The decision is consent to optional data use rather than access to a device or browser resource.
Required state
Contextual request state tied to the user action that needs the resource.
Accessibility burden
Use a labelled region or dialog title that names the resource and feature, such as Allow location for route check-in.
Common misuse
Asking for multiple resources at launch before the user has attempted the relevant feature.

File upload

UI or UX
UI + UX - File selection and attachment control
UI guidance
Render a visible label, persistent hint, native file chooser or equivalent button, accepted file formats, maximum file size, selected filename, uploaded status, remove control, and field-specific error message.
UX guidance
Use file upload only when the service needs the original file and make expectations clear before the user opens the file picker.
Good UI
An evidence upload field says Upload bank statement, hints PDF, PNG, or JPG up to 10 MB, shows statement.pdf selected, displays upload progress, and offers Remove.
Bad UI
A button labelled Browse sits under Documents with no hint about accepted formats, size limit, or whether the selected file was uploaded.
Good UX
A user selects bank-statement.pdf, sees it queued, watches progress reach uploaded, removes it to choose another file, then submits after reviewing the rest of the form.
Bad UX
A user selects a 28 MB scan, clicks Continue, and the page reloads with File failed but the selected filename and other answers are gone.
Best fit
The service needs a document, image, scan, spreadsheet, media file, or other original file.
Avoid when
A typed answer, reference number, checkbox, or declaration would satisfy the task.
Required state
Empty labelled state with requirements hint and choose-file action.
Accessibility burden
Use a visible label that names the file purpose, not only Browse or Choose file.
Common misuse
Asking for a file when a typed reference number or simple answer would be enough.

Two-factor authentication

UI or UX
UI + UX - Additional-factor challenge and recovery flow
UI guidance
Render two-factor authentication as a focused additional-factor challenge with factor name, destination or protected action, delivery hint, code or approval input, resend timing, alternate factor, recovery-code route, trusted-device choice, and safe failure handling.
UX guidance
Use two-factor authentication when the product needs stronger proof after a password, passkey, SSO return, risk signal, new device, or sensitive action.
Good UI
A code screen says Enter the 6-digit code from your authenticator app to continue to payroll settings, uses autocomplete one-time-code, shows Try another method, and explains recovery codes.
Bad UI
A page says Security check with one empty field, no factor label, no resend timing, and no recovery route.
Good UX
A user signs in from a new laptop, enters a code from an authenticator app, chooses not to trust the shared browser, and lands back on the requested workspace.
Bad UX
A user never receives an SMS code and can only keep pressing resend with no wait time, no alternate factor, and no support path.
Best fit
A sign-in, new device, risk signal, or sensitive action requires proof beyond the primary credential.
Avoid when
The user is only choosing an authentication method on the initial sign-in page.
Required state
Initial additional-factor challenge with factor name, destination or protected action, and primary account context.
Accessibility burden
Use a clear heading and label that names the factor and does not rely on placeholder-only code fields.
Common misuse
Showing a code field with no factor label, destination, expiry, resend timing, or alternate method.

Security warning

UI or UX
UI + UX - Security-risk warning and safe interruption before unsafe navigation, download, submission, preview, or sensitive action
UI guidance
Render a security warning as a high-clarity interruption that names the detected risk, identifies the destination or object, explains the concrete threat, presents the safest action as the primary path, and separates any override behind deliberate risk detail.
UX guidance
Use security warning when a product, browser, operating system, or service has evidence that proceeding could expose credentials, install harmful software, leak sensitive data, bypass trust, or weaken account protection.
Good UI
A browser interstitial says Deceptive site ahead, shows the suspicious domain, explains that attackers may steal passwords, and makes Back to safety the primary action while placing Visit unsafe site behind Details.
Bad UI
A red page says Security issue with Continue as the only visible action.
Good UX
A user clicks a payroll link that visually resembles the company domain, sees the suspicious-domain warning, returns to the trusted site, and reports the link to security.
Bad UX
A user sees a vague warning, assumes it is routine maintenance, proceeds, and enters credentials into a phishing page.
Best fit
A threat signal indicates phishing, malware, deceptive site, unsafe download, invalid certificate, insecure connection, mixed-content submission, suspicious redirect, file preview risk, or account-security danger.
Avoid when
The message is only a general severe consequence before a product action; use warning text.
Required state
Safe path state with primary Back to safety, Cancel, Remove, Use trusted route, or Contact admin action.
Accessibility burden
Use a heading and text that name the risk before the destination or details, so screen reader users hear the warning context first.
Common misuse
Using vague warning copy that does not say phishing, malware, certificate, insecure connection, dangerous download, or suspicious redirect.
Decision rules
  • Choose QR scan when the product must guide users through scanning a visible code, decode the payload, show scan status, handle unsupported detectors, camera permission, torch, focus, distance, glare, no code found, multiple codes, invalid format, duplicate scan, expired payload, offline decode, and safe action preview.
  • Choose camera capture when users need to create a photo or video and review, crop, retake, upload, or store the media; QR scan may use camera preview but owns detection, decode, payload validation, and post-scan action.
  • Choose permission request when the main problem is explaining why camera access is needed; QR scan includes permission as one state but must also handle detector support, scanning aim, decode quality, payload preview, and fallback entry.
  • Choose file upload when users select an existing image, PDF, or file for attachment or import; QR scan from photo is only a fallback when the goal is decoding a code from an existing image.
  • Choose two-factor authentication when the QR code is part of identity verification, authenticator enrollment, recovery, backup-code handling, or second-factor challenge; QR scan is the camera/decoder interaction inside that flow.
  • Choose security warning when the decoded payload is suspicious, external, irreversible, payment-related, credential-related, or malformed; QR scan should surface the warning before opening or submitting the payload.
  • A QR scan flow must confirm what was decoded before action when the payload can open a URL, join a network, start payment, pair a device, import credentials, or change account state.
  • Scanning failure needs repair paths: move closer, improve light, turn on torch, clean lens, switch camera, try from photo, paste code, enter key manually, or use another device.
  • Do not treat the first detected code as final in dense environments; show the selected target or decoded summary when multiple codes are visible.
  • Do not persist camera frames, decoded secrets, Wi-Fi credentials, payment intents, or authenticator seeds longer than the task requires.
Inspect live examples
Failure modes
  • The scanner opens a camera but never says whether it is detecting, decoding, blocked, unsupported, or waiting for a code.
  • The app opens a decoded URL immediately with no preview, domain display, or warning for external or suspicious destinations.
  • A QR authenticator setup stores the seed in logs or screenshots after pairing.
  • A denied camera prompt blocks the flow even though paste code or scan from photo would work.
  • The detector reads the wrong code in a cluster and executes the wrong action without confirmation.
  • Glare, distance, dim light, motion, or small codes produce a spinner with no torch, focus, or manual guidance.
  • An expired or already-used code is accepted visually but fails later with no explanation or retry.