Телефонные профили
Профиль, который сайт читает как телефон
- 22
- аппарата в телефонном списке, и каждый берётся целиком
- 360 × 780
- экран, который отдаёт SM-S911B, и ровно такое же окно
- 5
- касаний, ровно столько сообщает Chrome на Android
- 153.0.7978.0
- версия ARMANOS Browser, с которой запускается профиль
Что такое телефонный профиль и чем он не является
Телефонный профиль это обычный профиль ARMANOS, у которого шаблон отпечатка называется Android · Chrome (телефон). Всё остальное в нём устроено как у любого другого профиля: свои куки, своё хранилище, свой прокси, своё окно, свой сценарий и своё расписание. Меняются только аппарат, который он описывает, и поведение окна.
Это не эмулятор. Здесь ничего не поднимает Android и не запускает установочный пакет. Страницы рисует та же настольная сборка, ARMANOS Browser 153.0.7978.0, и ей отдают семя, где написано, что эта машина SM-S911B. После этого окно приводят к экрану аппарата, включают касания и объявляют указатель грубым, а наведение отсутствующим.
И это не телефон, стоящий где-то в стойке. Под профилем нет ни модема, ни SIM-карты, ни датчиков, ни магазина приложений. Всё, что страница узнаёт через JavaScript и заголовки запроса, у него телефонное. Всё, для чего система должна что-то сделать по-настоящему, принадлежит настольной машине, за которой вы сидите.
Где проходит граница
Аппарат приходит целиком, а не по частям
У настольных шаблонов генератору позволено смешивать: люди правда собирают машины с этой видеокартой и тем экраном. Телефон так не бывает. Экран, плотность точек, видеокарта, ядра, память и фирменные шрифты жёстко заданы моделью. Pixel с экраном Samsung и видеокартой Xiaomi это не редкий аппарат, а примета.
Поэтому у телефонного шаблона один-единственный список, список аппаратов: двадцать два телефона у Android · Chrome (телефон) и семь планшетов у Android · Chrome (планшет). Одна строка это один настоящий аппарат, и профиль получает эту строку целиком, вместе с названием видеокарты ровно в том виде, в каком его отдаёт ANGLE на Android.
Аппарат выводится из номера профиля, поэтому один профиль получает один и тот же телефон при каждом запуске, а два профиля получают разные. Нужен определённый аппарат, его можно выбрать в карточке отпечатка, и вместе с выбором приезжает весь аппарат: экран, плотность точек, видеокарта, ядра, память, шрифты и модель в подсказках меняются разом, потому что Pixel 7 с экраном прежнего аппарата это телефон, которого не существует.
Планшет нарочно не считается мобильным. Chrome на планшете Android отдаёт mobile: false, подпись без слова Mobile и получает настольную вёрстку, поэтому планшет, назвавшийся мобильным, противоречил бы себе в первом же заголовке. Пять касаний у него при этом есть, а форма аппарата у него планшетная.
Экран и плотность точек
360 × 780 при 3 у SM-S911B и 1280 × 800 при 2 у SM-X816B. Доступная высота равна высоте экрана: у телефона нет ни полосы меню, ни панели задач, и этот ноль читается именно как ноль.
Пара видеокарты
Производитель и название ровно так, как их отдаёт ANGLE на Android, например ANGLE (Qualcomm, Adreno (TM) 740, OpenGL ES 3.2).
Ядра и память
Из строки аппарата, а не из отдельного списка. Память подчиняется правилу самого браузера: округляется вниз до степени двойки и не бывает выше восьми.
Модель
Из подписи браузера современный Chrome модель убрал, там осталось только Android 10; K. Настоящая модель живёт в подсказках клиента и больше нигде.
Версия системы
Никогда не старее той, с которой аппарат вышел. Четвёртое поколение отбирает версии по этому правилу, потому что телефон 2023 года с Android 11 это машина, которой не было.
Фирменные шрифты
Основной набор Android плюс шрифты оболочки: SamsungOne у самсунга, Google Sans у Pixel, MiSans у Xiaomi.
Что на самом деле видит страница
Семя приезжает движку в командной строке и применяется внутри него, до запуска любых скриптов страницы. Значения ниже не дописаны поверх настоящих расширением, это ответы самого движка.
Подпись браузера это сокращённая андроидная форма, которую современный Chrome и правда отправляет: модель заморожена буквой K, а система десяткой. Написать там Android 14; SM-S911B значило бы выдать себя, потому что живой Chrome так не говорит уже несколько лет. Версия Chrome внутри подписи это версия самого движка, поэтому браузер, который рисует страницу, и строка, которая его описывает, сходятся.
Самопроверка профиля читает эти значения обратно со страницы и показывает пять строк, которых у настольного профиля нет вовсе: число касаний, события касания, грубый указатель, окно не шире экрана, ориентация экрана. Это и есть место, где человек своими глазами видит, телефон у него сейчас на этой машине или только на словах.
- navigator.userAgent
- Mozilla/5.0 (Linux; Android 10; K) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/153.0.0.0 Mobile Safari/537.36
- navigator.platform
- Linux armv8l
- screen.width × screen.height
- 360 × 780
- devicePixelRatio
- 3
- navigator.maxTouchPoints
- 5
- userAgentData.platform
- Android
- userAgentData.model
- SM-S911B
- userAgentData.mobile
- true
- userAgentData.formFactors
- ["Mobile"]
- userAgentData.architecture
- arm
- navigator.hardwareConcurrency
- 8
- navigator.deviceMemory
- 8
- Видеокарта в WebGL
- ANGLE (Qualcomm, Adreno (TM) 740, OpenGL ES 3.2)
Один профиль на шаблоне Android · Chrome (телефон), запущенный на ARMANOS Browser. Аппарат выводится из номера профиля, поэтому другой профиль получит другую строку из того же списка на 22 аппарата.

Откуда берётся размер окна
Семя объявляет экран шириной 360 точек. Окно при этом настольное, а настольный Chromium такого узкого окна не открывает: просишь 360, получаешь 500. Это измерено на собранном движке, а не вычитано в описании. Окно шире объявленного экрана это аппарат, которого нет нигде, и проверка занимает одну строку: innerWidth больше screen.width.
Поэтому окно приводят к размеру аппарата тем же способом, каким работает мобильный вид в средствах разработчика самого движка, по протоколу отладки. Запомненное место мобильному профилю возвращают, а запомненный размер нет: растянув окно мышью один раз, человек получил бы аппарат, у которого окно шире собственного экрана.
Ещё две вещи семенем не задаются вовсе. Измерено на этом движке: без ключей запуска ontouchstart отвечал false при пяти касаниях, а грубый указатель и отсутствие наведения не сходились, то есть у телефона оказывалась мышь. Два ключа закрывают ровно это, и с ними все три ответа становятся утвердительными.
Новые страницы придерживают до первой строки их кода. Новая вкладка и кадр чужого происхождения, живущий отдельным процессом, а именно там сидят рекламные проверки и проверки на ботов, получают наряд каждый. Без этого снаружи было 360 × 780, а внутри весь рабочий стол.
Размер окна
Ключ запуска для первого окна, дальше подмена размеров по протоколу для каждой страницы, включая новые вкладки и кадры чужого происхождения.
Касания
Ключ запуска на события касания плюс пять точек, которые приходят из семени.
Грубый указатель без наведения
Настройки Blink, которые называют палец и отсутствие мыши: основной и доступный тип указателя грубый, наведения нет.
Ориентация экрана
Выводится из самих размеров, а не задаётся отдельно. Аппарат, который отдаёт 360 × 780 и одновременно положение лёжа, спорит сам с собой в одну строку.
Мышь становится касанием
Движок превращает нажатия мыши в касания, а автоматика на мобильном профиле шлёт именно касания, потому что живой аппарат событий мыши не шлёт вовсе.
Если наряд не лёг, вам об этом скажут
Как его создать
Это одно поле в окне профиля. Всё прочее в профиле не меняется: сценарий, прокси, расширения, группы, расписания и автоматика работают так же, как у настольного профиля.
Под выбором стоит честная оговорка, и стоит она там, где человек принимает решение, а не в документации. Шрифтов телефона, Roboto и Noto, на этом компьютере нет, и сайт, который меряет шрифты, это заметит. На ARMANOS Browser к оговорке добавляется вторая строка, потому что там профиль вдобавок показывает несколько шрифтов этой машины: без них страницы выходили бы пустыми.
Одно ограничение касается старых профилей. Телефонный шаблон требует третьего поколения генератора отпечатка или новее, и профилям первых двух поколений его не предлагают. Их замороженный генератор такого шаблона не знает, а молча подменённый шаблон хуже отказа: в карточке стоял бы телефон, а сайты получили бы мак.
- 1
Новый профиль, затем шаблон отпечатка
Выберите Android · Chrome (телефон) или Android · Chrome (планшет), если нужен планшет: у большинства его строк экран 1280 × 800.
- 2
Прочтите оговорку под выбором
Она говорит, чего эта машина не может для телефонного профиля, и говорит разное про два движка, потому что правда разная.
- 3
Дайте профилю прокси, как обычно
Шаблон описывает аппарат, а не дорогу. Телефонный профиль без прокси выходит с вашего собственного адреса, как любой другой.
- 4
При желании выберите аппарат
Откройте карточку отпечатка и выберите модель. Экран, плотность точек, видеокарта, ядра, память и шрифты приезжают вместе с ней, и сохранение карточки выбор не стирает.
- 5
Запустите
Сперва открывается стартовая страница, затем окно приводится к размеру аппарата, и только после этого открывается сайт.
Поля связи и почему у настольного профиля их нет
Сведения о связи площадки читают одними из первых. Телефон, у которого числа связи как у ноутбука, это окружение, спорящее само с собой, и такое расхождение заметнее любого отдельного значения внутри него.
Числа берутся из того же семени, что и остальной профиль, и подчиняются правилам самого браузера, а не тому, что кажется правдоподобным. Движок огрубляет задержку до кратного 50 мс и режет её потолком в три секунды, режет скорость потолком 10 Мбит/с и огрубляет до 50 кбит/с, а затем умножает и то и другое на множитель, выведенный из имени хоста, поэтому одна настоящая машина показывает разным сайтам слегка разные числа. Значения, которых настоящий Chrome не отдаёт никогда, скажем 15 или 20 Мбит/с, проверяются одной строкой и выдают подмену вернее, чем её отсутствие.
Вид связи не тянется жребием, а выводится. Сам браузер тоже его не хранит: он считает его из задержки по порогам, снятым из исходников, 2010, 1420 и 272 мс. Возьми мы его отдельно, и вышла бы пара «4g при задержке 300 мс», какой у настоящего Chrome не бывает.
Кроме того, у Android есть три поля, которых на рабочем столе нет вовсе: вид связи, предельная скорость и обработчик смены вида. Телефонный профиль их получает, настольный нет, и это точность, а не осторожность: добавить их настольному профилю значит завести примету там, где её не было. На ARMANOS Browser их открывает ключ запуска, который дают только телефонным профилям и только тогда, когда сборка объявляет, что умеет подменить их значения: сам по себе ключ показал бы хозяйские числа, а телефон с бесконечной полосой выдаёт себя не хуже телефона без этих полей.
Скорость
Телефон: от 1,5 до 8 Мбит/с. Рабочий стол: от 5 до 10. Одинаковые числа у обоих сами по себе были бы рассогласованием.
Задержка
Телефон: от 100 до 300 мс. Рабочий стол: от 50 до 200.
Вид соединения по качеству
Выводится из задержки по порогам самого движка: от 272 мс это 3g, ниже 4g.
Вид связи
Сотовая связь или Wi-Fi, и только у телефонного профиля. Телефон в Wi-Fi обычен, поэтому редкостью он не считается. У настольного профиля поле пустое: у настоящего Chrome его там нет.
Предельная скорость
Из постоянной таблицы в исходниках движка: LTE 100, HSPAP 42, Wi-Fi 11, 54 или 600. Никогда не ниже отданной скорости, потому что канал не отдаёт больше своего потолка, и всегда в пару к виду связи, потому что «3g с потолком LTE» не бывает.
Когда телефонный профиль уместен
Берите его там, где сайт сам ведёт себя с телефоном иначе: другая вёрстка, другой набор возможностей, другой порядок действий в том же аккаунте. Соцсети и торговые площадки постоянно отдают телефону страницы, которых не отдают рабочему столу, и читать их с настольного профиля значит читать другой продукт.
Берите его там, где история аккаунта это история телефона. Профиль, который всегда был телефоном и телефоном остаётся, сходится сам с собой. Профиль, который на прошлой неделе был маком, а сегодня самсунгом, сменил машину под живым входом, а для сайта это событие крупнее любого отдельного значения в отпечатке.
Не берите его там, где работа упирается в сам аппарат. Установка из магазина приложений, уведомление, код подтверждения по SMS, камера, сканер отпечатка пальца, показание датчика: всё это вопросы не к браузеру, и ответа на них у телефонного профиля нет.
И не берите его ради того, чтобы настольная работа выглядела мобильной. В окне шириной 360 точек тесно работать, мобильная версия сайта часто беднее обычной, а настольный профиль, который честно настольный, это более крепкая личность, чем телефон, которому нечем себя подтвердить.
| Что нужно | Телефонный профиль | Настольный профиль | Настоящий телефон |
|---|---|---|---|
| Мобильная вёрстка и мобильные подсказки клиента | Да | Нет | Да |
| События касания и грубый указатель | Да | Нет | Да |
| Модель аппарата в подсказках клиента | Да | Нет, поле пустое | Да |
| Окно размером с экран аппарата | Да | Нет | Да |
| Приложение, установленное из магазина | Нет | Нет | Да |
| Камера, микрофон и датчики аппарата | Нет | Нет | Да |
| Код подтверждения по SMS на самом аппарате | Нет | Нет | Да |
| Десятки личностей рядом на одной машине | Да | Да | Нет |
Честный разрыв
У настоящего аппарата есть железо. Ничто на этой странице железа не добавляет. Движок умеет убрать прибор из списка, но не умеет отнять камеру у вашей машины и не умеет приделать к ней телефонную, а профиль, заявивший ноль камер на машине с камерой, ответил бы «камеры нет» на список приборов и тут же выдал бы её на первом же запросе съёмки, а это громче любого числа.
Поэтому число приборов профиль называет, а съёмку не подменяет. Телефонный профиль сообщает столько камер и микрофонов, сколько сообщает аппарат Android, но если страница просит настоящий поток, приходит то, что есть у машины, за которой вы сидите, либо не приходит ничего.
Второй честный разрыв это шрифты, и программа называет его в миг выбора шаблона, а не прячет в руководстве. Roboto и Noto на вашем компьютере нет. Обмер шрифтов это обычная проверка, и она это видит. На ARMANOS Browser профиль вдобавок несёт несколько шрифтов этой машины, потому что браузер вовсе без шрифтов рисует пустые страницы, а это хуже неполного наряда.
Облачный телефонный сервис сдаёт вам настоящий аппарат с настоящим модемом и настоящим магазином, и плата за это такая: вы работаете через видеопоток на чужом устройстве и по одной сессии за раз. Телефонный профиль меняется наоборот: железа нет, зато настоящий браузер на вашей машине, много таких рядом, со своими прокси, своими куками и своими файлами.
Нет телефонной камеры и микрофона
Число приборов называется, съёмка не подменяется. Поток приходит от хозяйской машины либо не приходит вовсе.
Нет датчиков
Ни ускорения, ни поворота, ни освещённости. Настольная машина таких показаний не даёт, и заплаты, которая их выдумывает, нет.
Нет SMS и нет номера
Код, отправленный на аппарат, в браузерный профиль не приходит ни на одном шаблоне.
Нет магазина приложений и самих приложений
Это браузер. Всё, что надо ставить на телефон, остаётся снаружи.
Нет телефонных шрифтов на вашем компьютере
Roboto и Noto там нет, и программа говорит об этом под выбором шаблона, ещё до создания профиля.
Чего это не делает
- Не превращает ваш компьютер в телефон. Нет камеры и микрофона аппарата, нет датчиков, нет SMS, нет магазина приложений: сайт, который их просит, получит ответ хозяйской машины либо ничего.
- Не даёт шрифтов телефона. Roboto и Noto на этом компьютере нет, программа говорит об этом под выбором шаблона, и сайт, который меряет шрифты, это видит.
- Не даёт профилю мобильный адрес в сети. Дорогу задаёт прокси, который вы прикрепили: шаблон меняет аппарат, а не выход.
- Не решает за сайт, как тот отнесётся к профилю. Профиль сообщает то, что сообщает телефон, а суждение остаётся за площадкой.
- Три андроидных поля связи требуют сборки, которая объявила, что умеет подменять их значения. На сборке постарее профиль их не получает, и ключ запуска не даётся.
Проверить в коде
- Шаблоны телефона и планшета несут аппарат целиком, а экран, плотность точек, видеокарта, ядра, память и шрифты ходят вместе
- packages/shared/src/index.js · apps/desktop/test/mobile-really-mobile.js
- Окно приводится к размеру аппарата вместе с касаниями, грубым указателем и ориентацией, и на обоих движках
- apps/desktop/src/lib/mobileEmulation.js · apps/desktop/src/lib/mobileWindow.js · apps/desktop/test/mobile-window.js
- Семя приезжает движку в командной строке, а мобильные ключи запуска даются только мобильному профилю
- apps/desktop/src/lib/forkEngine.js · apps/desktop/test/mobile-window.js
- Андроидные поля связи достаются только телефонным профилям и только сборке, которая умеет подменить их значения
- packages/shared/src/index.js · apps/desktop/test/поля-связи-телефона.js
- Самопроверка профиля читает телефонные значения обратно со страницы, а живой замер открывает два настоящих браузера и спрашивает у самой страницы
- apps/desktop/src/lib/fpAudit.js · apps/desktop/test/mobile-selftest.js · apps/desktop/test/телефон-живьём.js
Читать дальше
Как собирается отпечаток
Семя, которое заполняет телефонный шаблон, и место, где оно применяется.
ARMANOS Browser
Сборка, которая рисует страницы и получает семя.
Профили
Разделение, хранилище и прокси, у телефонного профиля всё то же самое.
Чего ARMANOS не делает
Честные рамки всего продукта в одном месте.
Проверьте на своей машине
Создайте один профиль на телефонном шаблоне, откройте стартовую страницу и прочтите, что отдано странице. Это минута, и всё написанное здесь проверяется там же.