NimbusX
00
› страница получена
← блог
мобильные15.07.20267 мин

Мобильные отпечатки без телефона

Профиль с платформой Android собирается на обычном компьютере и проходит iphey с вердиктом Trustworthy. Главное правило выяснилось дорого: железо телефону задавать нельзя. И один предел, который в настольном окне не обойти.

01Как включается

Мобильный профиль создается флагом:

$ python -m app.cli profile create \ --name mobile-01 --platform android

Движок сам выбирает согласованную мобильную персону: модель, чип, экран, память. Модель устройства объявляется в uaData.model, откуда ее и читают детекторы. Стенд дает 100 из 100, iphey отвечает Trustworthy, физический телефон не нужен.

02Урок, который стоил корпуса моделей

Первая версия задавала телефону железо снаружи, из собственного списка моделей. Список поставил на Pixel 7 чип от Redmi. Одного неверного чипа хватило, чтобы iphey увел вердикт в Unreliable: связку «модель плюс чип» детекторы знают лучше, чем любой рукописный справочник.

Корпус моделей выброшен целиком. Выбор персоны отдан движку, а от повторения ошибки стережет отдельный тест: продукт не диктует телефону железо. Принцип шире мобильных профилей: согласованность набора важнее контроля над ним.

03Что замерено про связывание

Три мобильных профиля подряд на свежей машине:

ПоверхностьРезультат
Шрифты Windowsне видны, ни одного из тринадцати проверенных
Видеокартасвоя у каждого
Экрансвой у каждого
Canvasсвой у каждого
Число ядервосемь у всех, как на настоящих телефонах

Про шрифты это главное. Если бы страница, которой представились Pixel, увидела Calibri и Segoe UI, это был бы мгновенный провал: таких шрифтов на Android не бывает. Проверено списком из тринадцати шрифтов, которые ставятся только с Windows и Microsoft Office. Не видно ни одного.

04Предел, который обойти нечем

Область просмотра у мобильного профиля шире объявленного экрана. Движок подменяет screen и outerWidth, но окно остается настоящим окном настольной системы. Профиль объявляет 360×800, а область просмотра выходит 500×731. Что перепробовано:

ПопыткаШирина области просмотра
без вмешательства500
окно 412×915500
окно 300×600500
масштаб отрисовки 1,27510
безголовый режим478

Упирается в минимальную ширину окна Chrome на настольной системе, около 500 css. Телефонов такой ширины не бывает, поэтому расхождение по ширине неустранимо, пока браузер живет в настольном окне. Подменить innerWidth в обход раскладки нельзя: страница получит настоящую ширину первым же медиазапросом, и вместо одного расхождения станет два.

Что все же сделано: после запуска окно приводится к высоте, которую объявила сама страница, и CreepJS перестал подсвечивать секцию Screen. Остаток по ширине показан в панели: ячейка ОКН потушена, под таблицей объяснение. Скрывать бессмысленно: сайт видит расхождение раньше клиента.

05Читать дальше

Согласованность важнее количества · Как детекторы связывают профили

Скачать NimbusXВопрос по разбору: @Get_NimbusX_Bot