bug(device): Android web model is reported as K with reduced User-Agent; use Client Hints when available
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ả
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
- Không có Dockerfile hay tệp Docker Compose
- Không có mẫu pull request
- Đọc hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- 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.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Issue khác của ionic-team/capacitor-plugins
-
platform: android
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 88/100
ionic-team/capacitor-plugins#2635 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 80/100
ionic-team/capacitor-plugins#2627 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 72/100
ionic-team/capacitor-plugins#2616 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
[@capacitor/app] iOS: 'Expression implicitly coerced from String? to Any' warning in getAppLanguageĐang mởtriage
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 88/100
ionic-team/capacitor-plugins#2604 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
platform: android
Độ khó 3/5 1-2 ngày Mức phù hợp với người mới 74/100
ionic-team/capacitor-plugins#2636 ·
Maintainer thường phản hồi trong vòng 1 ngày
Tất cả issue của ionic-team/capacitor-plugins
Issue tương tự
-
Test: Verify vault unlock max failed attempts and PIN brute-force protectionCó thể đã có người làm Có pull request liên kết đang mở hoặc đã được merge. Đang mở
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 66/100
wultra/powerauth-tests#980 ·
-
account bug communication lecture
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 78/100
line/centraldogma#1397 ·
Maintainer thường phản hồi trong vòng 2 ngày
-
[Bug]: Fixed/recurring deposit accounts are treated as savings in ownership and listingsCó thể đã có người làm @Aana123 đã nhận hôm nay. Đang mởbug Triage
Độ khó 2/5 1-3 giờ Mức phù hợp với người mới 76/100
apache/fineract-consumer-facing#252 ·
Maintainer thường phản hồi trong vòng 1 ngày
-
Độ khó 1/5 Dưới một giờ Mức phù hợp với người mới 76/100
ShaftHQ/SHAFT_ENGINE#7946 ·
Maintainer thường phản hồi trong vòng 1 ngày