Repository navigation
Description
Bug Report
Plugin(s)
@capacitor/device (web implementation). Observed with version 8.0.3; the current default-branch implementation in device/src/web.ts also still relies on User-Agent parsing and does not request Client Hints.
Capacitor Version
Relevant package versions: @capacitor/core 8.6.0 and @capacitor/device 8.0.3. A complete cap doctor report is not included; this report concerns the browser implementation only.
Platform(s)
Web, specifically Chrome/Chromium on Android with User-Agent reduction enabled, on HTTPS.
Current Behavior
Device.getInfo() derives model from navigator.userAgent. A reduced Android User-Agent such as:
Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Mobile Safari/537.36
is parsed as model: "K". This is a generic value rather than the hardware model. On supported browsers, User-Agent Client Hints can expose a more accurate model, subject to browser policy.
Expected Behavior
Use the existing User-Agent parser as the baseline, and enhance the Android web model using navigator.userAgentData.getHighEntropyValues(["model"]) when available. Preserve the existing model if the API is unavailable, the request rejects, or the returned model is empty/invalid.
No native changes, public signature changes, or third-party dependencies should be needed: getInfo() already returns a Promise. Other fields could remain unchanged to keep the fix focused.
Code Reproduction
Run this in an HTTPS web application with @capacitor/device, using Chrome on an Android device:
import { Device } from "@capacitor/device";
const info = await Device.getInfo();
const hints = typeof navigator.userAgentData?.getHighEntropyValues === "function"
? await navigator.userAgentData.getHighEntropyValues(["model"])
: null;
console.log({ userAgent: navigator.userAgent, parsedModel: info.model, hintedModel: hints?.model });When Chrome exposes the hardware model via Client Hints, parsedModel can be K while hintedModel contains the actual model. If the browser withholds the hint, the current result should remain the fallback.
This is an inline reproduction; no standalone reproduction repository is attached.
Other Technical Details
Suggested tests: nonempty hinted model overrides the parsed model; missing API, rejected request, empty/whitespace/non-string model preserve the parsed result; other platforms remain unchanged.
Client Hints do not provide a unique device identifier and should not be documented as such.
Additional Context
This revisits #509, which requested the same progressive enhancement and was closed during backlog cleanup. The maintainer comment invited opening a new issue if it remained relevant. The reduced User-Agent behavior is now a practical issue rather than only an anticipated change.
Chrome documentation: https://developer.chrome.com/docs/privacy-security/user-agent-client-hints
Would a narrowly scoped PR implementing this model enhancement with fallback and tests be welcome?
Activity