bug(device): Android web model is reported as K with reduced User-Agent; use Client Hints when available

Đang mở
#2,634 0 bình luận 0 reaction 0 người được giao Xem trên GitHub

Maintainer thường phản hồi trong vòng 1 ngày

Chưa có ai nhận issue này.

Đánh giá

Độ khó
3/5
Thời gian dự kiến
1-2 ngày
Mức phù hợp với người mới
72/100
Loại issue
Lỗi
Độ rõ ràng
Đặc tả rõ ràng
Mức độ hoạt động
Sôi nổi
Công nghệ
javascript, typescript
Lĩnh vực
backend, mobile-dev

Hướng nghiên cứu

Start in device/src/web.ts and trace how Device.getInfo() derives the web model from the User-Agent. Add focused tests for a valid Client Hints model and the listed fallback cases, including other platforms. Done means Android web uses a valid hinted model when available while preserving the parsed model in fallback cases.

Do mô hình lập chỉ mục viết ra từ nội dung của issue.

Mô tả

triage

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?

Ngôn ngữ chính
Java
Star
688
Fork
691
Merge trung bình
1 ngày 5 giờ
Pull request đã merge (30 ngày)
5

Chuẩn bị môi trường

Bắt đầu từ đâu

  1. Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
  2. Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
  3. Fork repository và làm thay đổi trên một nhánh.
  4. Mở pull request có tham chiếu số hiệu của issue.

Issue khác của ionic-team/capacitor-plugins

Tất cả issue của ionic-team/capacitor-plugins

Issue tương tự

Thêm issue về Java

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.