Bu sayfa henüz sizin dilinizde yok. İngilizce metni okuyorsunuz.
Blog
A phone profile on a computer: what makes it a whole phone
ARMANOS ekibi7 min
What a platform reads first
A page reads your machine with ordinary questions, and asks permission for none, and it is the platform that adds the answers up, not you. The answers arrive separately and add up to one device.
Let any pair disagree, and the platform stops watching the account and starts watching the machine. A phone is the agreement of every answer, not one of them.
| What the platform asks | What a real handset answers |
|---|---|
| User agent | Android, with Mobile at the end |
| Client hints | Platform Android, architecture arm, model |
| Screen and available area | Equal: a handset has no menu bar |
| Pixel density | Fractional: 2.625, 2.75, 3 or 3.75 |
| Touch and pointer | Five touch points, coarse pointer, no hover |
| Graphics card | The ANGLE string Android itself writes |
| Cores and memory | Eight cores, 4 or 8 gigabytes |
| Fonts | The Android set plus the maker's face |
| Connection | Three fields a desktop lacks |
A handset arrives whole
On a desktop people assemble different machines, and one maker's screen beside another's graphics card surprises nobody. A handset is not like that: the model settles everything.
So your profile gets a whole handset, not a bag of values, and hand edits do not apply to separate parts of a handset. The pool holds 22 handsets and 7 tablets, each a model that really shipped.
Screen and density
From 360 by 780 to 412 by 919 layout points, density 2.625 to 3.75. Eight distinct screens.
Graphics card
Vendor and renderer arrive as a pair, and the pool holds twelve pairs.
Cores and memory
Eight cores everywhere, memory 4 or 8: a browser never names more than eight.
Maker fonts
Google Sans on a Pixel, SamsungOne on a Samsung, MiSans on a Xiaomi. Alongside them the backing for drawing holds fonts of your own machine: without it no letters are drawn at all, and that list is not handed to the page.
Cameras and microphones are counted the phone way
A page that has been allowed to record reads the number of capture devices: how many microphones, how many speakers, how many cameras. A handset has two or three cameras and more often one microphone and one speaker, and the profile answers the same way.
A desktop machine answers differently: one camera, while microphones and audio outputs come in twos and threes because of headsets and monitors. A phone with one camera and three microphones is one more pair that does not exist.
A page gets device names and their number with the same permission, and before it only the kinds. So the number is matched to the handset in advance rather than at the moment a platform asks.
A phone's heap limit is half as high
Besides the memory size a page reads the script heap limit, and on a phone it is figured differently: a quarter of the memory against a half on a desktop. Eight gigabytes of memory give a phone two gigabytes of heap, and a desktop machine four.
It is figured inside the profile rather than the engine, by one rule for every handset in the pool. A phone with a desktop heap limit would give itself away the same way as a phone with a desktop window.
The phone's User agent is shortened
Chrome on Android stopped putting the model and system version in its signature, and hands the model out only on a site's request rather than in the first header: every handset says Android 10; K. The real model lives only in the client hints.
So a signature reading Android 14; Pixel 7 gives the forgery away in the first header. Your profile puts the model where a live Chrome does, nowhere else.
Touch and pointer answer together
A platform asks three questions in a row: is there ontouchstart, does (pointer: coarse) match, does (hover: none) match. A handset says yes to all three, a desktop no to any.
No live machine gives a mixed answer, and the check costs one line, and the profile answers all three the phone way. A handset reports five touch points, the number Chrome on Android gives.
The window comes out too wide
A desktop Chromium build cannot go under five hundred points: ask for 360 and you get 500, which never happens to a handset in the hand. The profile declares 360, so the window is wider than its screen.
On a page that declares a handset viewport no such machine exists, and a platform sees it in one comparison. Without that declaration a live Android lays out at 980 points on a 360 screen, and the window is honestly wider than the screen. A phone window is brought to handset size after launch, new tabs included.
A foreign frame counts separately
A tablet answers differently
Chrome on a tablet leaves Mobile out of its signature and calls itself not mobile, so sites hand it the desktop layout. A tablet carrying Mobile contradicts its own header.
A tablet screen lies long side across, and its density is one and a half or two, below any handset. The pool holds 7 tablets, never a handset density.
Connection adds three extra fields
Chrome on Android carries three fields a desktop lacks: type, downlinkMax and ontypechange. A platform asks for them in one line about navigator.connection.
Opening the fields is not enough: unreplaced, they hand over your own computer's numbers, and an endless speed ceiling stands out more than missing fields. So the ceiling matches the speed and comes from the browser's own table: 11, 54 and 600 for Wi-Fi, 42 and 100 for fast cellular. Forty-two is HSPA+, a hundred is LTE, and they are drawn where the browser declares a fourth generation link.
Forty profiles and not one foreign part
The promise «a whole handset» is checked by execution rather than reading: forty phone profiles are derived from their seeds, and for all forty the screen, density, graphics card, cores, memory and fonts are matched against a single row of the handset pool.
A profile with even one part from a neighbouring model turns the check red. Tablets go through the same round, and a phone density in a tablet row fails it just as badly.
How to check your own profile
Open the developer console inside the profile and read four answers in a row, and there is no need to look further after the first mismatch. A live machine answers consistently, a forgery breaks on the first.
If any reading argues with the one beside it, the profile reads as a desktop calling itself a phone. Where your machine sits makes no difference.
- 1
Screen and window
screen.width and window.innerWidth: on a page that declares a handset viewport the window is not wider than the screen.
- 2
Touch and pointer
navigator.maxTouchPoints, ontouchstart, (pointer: coarse) and (hover: none): all four phone-shaped, or none.
- 3
Signature and hints
Android 10; K in the signature, Android, arm and the model in the hints.
What this does not claim
- It does not claim a phone profile is indistinguishable from a handset in your hand. Matching answers remove contradictions; behaviour, account history and payment details stay put.
- It does not claim every platform reads all the values here. Some look at three, some at twenty, and none publish the list.
- A platform's own app reads the system rather than the browser, and a profile on a computer never goes there. This page is about what a page sees.
- The three connection fields open only on a browser kernel that can replace their values. On an older kernel the profile goes without them, rather than hand over yours.
Where you can see this yourself
Every number above comes out of code you can open and run.
- The handsets sit in a list: screen, density, graphics card, cores, memory, fonts
- packages/shared/src/index.js
- No part of a handset comes from another, run against forty profiles
- apps/desktop/test/mobile-really-mobile.js
- The window is asked for at handset size, and a desktop size is not given back
- apps/desktop/test/mobile-window.js
- The three connection fields open only for an engine that can replace their values
- apps/desktop/test/поля-связи-телефона.js
- A phone and a desktop profile open side by side in a real browser, and the page answers
- apps/desktop/test/телефон-живьём.js
Questions
- Can a platform tell the phone was opened on a computer?
- It sees the answers a page gets, not where the machine stands. What gets caught is disagreement: one handset's screen, another's graphics card, an oversized window.
- Why a handset sized window when my monitor is large?
- A phone window equals the phone screen. On a page that declares a handset viewport, a window wider than the screen gives a fake away; on a page without that declaration a real handset is wider too. Where it sits on your monitor stays your choice.
- Can I pick a specific model?
- Yes, the device is picked from a list in the profile's Fingerprint > Change values > Device, and it arrives whole. Screen, density, graphics card, cores, memory and fonts come with it.
- Is a tablet just a big phone?
- No. A tablet calls itself not mobile and leaves Mobile out of its signature, so sites hand it the desktop layout. The pool holds 7 tablets.
- Does a proxy change any of this?
- The address arrives from elsewhere, and every answer here is produced on the machine in front of you. A proxy fixes no screen, no touch, no graphics card.
- Do flows run the same on a phone profile?
- Yes, but a tap is a touch, not a mouse click. Steps on a phone profile send a touch: otherwise the page gets touchstart without click and the run stalls.
Next to this
The app and the page
What an app on the handset reads and what a page never sees.
Client hints
Where the handset model went once the User agent stopped carrying it.
A window wider than the screen
The same contradiction on a desktop profile, with smaller numbers.
Free fingerprint check
12 values read in your browser, with nothing sent anywhere.
See what your own browser answers
The check reads 12 values and sends nothing anywhere.