Android 配置文件可以在普通电脑上运行,并从 iphey 获得 Trustworthy 结论。我们付出代价后得到的规则是:不要手工为手机指定硬件。目前仍有一项桌面窗口限制,产品会明确显示。
创建移动配置文件时使用参数:
引擎会选择一套内部一致的移动身份,包括型号、芯片、屏幕和内存。设备型号会写入 uaData.model,检测器也从这里读取型号。测试套件得分为 100/100,iphey 返回 Trustworthy,无需实体手机。
第一版使用我们维护的型号列表为手机指定硬件,结果把 Pixel 7 与 Redmi 芯片配在一起。仅这一处错误就让 iphey 返回 Unreliable。检测器对真实的“型号加芯片”组合,了解得比任何手工维护的清单都准确。
在一台干净电脑上连续创建三套移动配置文件:
| 表面 | 结果 |
|---|---|
| Windows 专属字体 | 均未暴露;十三项检测全部通过 |
| 视频卡 | 每套配置均不同 |
| 声明的屏幕 | 每套配置均不同 |
| Canvas | 每套配置均不同 |
| 逻辑处理器数量 | 每套配置均为八个,与参考手机一致 |
字体是最清楚的检查项。如果一套自称 Pixel 的配置向网站暴露 Calibri 或 Segoe UI,矛盾会立即出现,因为 Android 不包含这些字体。我们检测了十三款仅随 Windows 或 Microsoft Office 安装的字体,配置文件一款也没有暴露。
移动配置文件的布局视口比声明的屏幕更宽。引擎会修改 screen 和 outerWidth,但浏览器仍运行在真实的桌面窗口中。配置文件声明 360×800,布局视口实际为 500×731。我们测试了以下方法:
| 尝试方式 | 布局视口宽度 |
|---|---|
| 不做调整 | 500 |
| 窗口 412×915 | 500 |
| 窗口 300×600 | 500 |
| 渲染比例 1.27 | 510 |
| 无头模式 | 478 |
限制来自 Chrome 在桌面系统上的最小窗口宽度,约为 500 个 CSS 像素。手机不会使用这么宽的视口,因此只要浏览器仍在桌面窗口中运行,这项差异就无法消除。若强行修改 innerWidth 而不改变真实布局并不可行。页面的第一个媒体查询就会读到真实宽度,最终不是消除差异,而是产生两组互相矛盾的值。
目前能够改善的是:启动后,NimbusX 会按页面自行声明的高度调整窗口,并且 CreepJS 不再标记 Screen 区域。剩余的宽度差异会在面板中明确显示:WIN 单元格变暗,表格下方给出说明。隐藏它没有意义,因为网站比用户更早看到这项差异。