Googlebooks si basa sullo stack tecnologico Android ed è abbinato alle fondamenta del desktop di ChromeOS. La maggior parte delle applicazioni web dovrebbe funzionare allo stesso modo su Googlebooks e su qualsiasi altro dispositivo desktop e visualizzerà la stessa stringa User-Agent di ChromeOS:
Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0; Safari/537.36
Per identificare Googlebooks in modo più accurato, ad esempio per Analytics o per
indirizzare gli utenti a scaricare la tua app per Android compatibile, devi richiedere due
client hint dello user agent: i
Platform e i Mobile client hint. Entrambi sono
suggerimenti a bassa entropia,
che ti consentono di ottenerli senza ulteriori richieste o autorizzazioni, proprio come
fai con la stringa User-Agent. Puoi incorporarli direttamente nel
rilevamento esistente.
| Intestazione UA-CH | Valore per Googlebooks |
|---|---|
Sec-CH-UA-Platform |
"Android" |
Sec-CH-UA-Mobile |
?0 (Falso) |
Per rilevarlo nel browser, utilizza l'API navigator.userAgentData:
const isGooglebook = window?.navigator?.userAgentData?.platform === 'Android' && window?.navigator?.userAgentData?.mobile === false;
A causa della
riduzione dello user agent,
non è stata aggiunta una piattaforma specifica di Googlebooks all'hint client Platform o
alla stringa user agent, quindi, per garantire una distinzione tra Googlebooks e
la versione precedente di ChromeOS, l'hint client è stato modificato in "Android",
per indicare che Googlebooks è compatibile con le app per Android.
Rilevamento lato server
Poiché si tratta di suggerimenti per i client a bassa entropia, verranno inviati al server alla richiesta iniziale del client e potrai recuperarli in uno dei seguenti modi:
Node.js
const platform = req.headers['sec-ch-ua-platform'] || 'Not Sent';
const mobile = req.headers['sec-ch-ua-mobile'] || 'Not Sent';
const cleanPlatform = platform.replace(/"/g, '');
const isGooglebook = cleanPlatform === 'Android' && mobile === '?0';
Java
String platform = exchange.getRequestHeaders().getFirst("Sec-CH-UA-Platform");
if (platform == null) platform = "Not Sent";
String mobile = exchange.getRequestHeaders().getFirst("Sec-CH-UA-Mobile");
if (mobile == null) mobile = "Not Sent";
String cleanPlatform = platform.replace("\"", "");
boolean isGooglebook = cleanPlatform.equals("Android") && mobile.equals("?0");
Ruby
mobile = req['Sec-CH-UA-Mobile'] || 'Not Sent'
clean_platform = platform.gsub('"', '')
is_googlebook = clean_platform == 'Android' && mobile == '?0'
Python
platform = self.headers.get('Sec-CH-UA-Platform', 'Not Sent')
mobile = self.headers.get('Sec-CH-UA-Mobile', 'Not Sent')
clean_platform = platform.replace('"', '')
is_googlebook = clean_platform == 'Android' and mobile == '?0'
PHP
$mobile = $_SERVER['HTTP_SEC_CH_UA_MOBILE'] ?? 'Not Sent';
$cleanPlatform = str_replace('"', '', $platform);
$isGooglebook = ($cleanPlatform === 'Android' && $mobile === '?0');
Go
platform := r.Header.Get("Sec-CH-UA-Platform")
if platform == "" {
platform = "Not Sent"
}
mobile := r.Header.Get("Sec-CH-UA-Mobile")
if mobile == "" {
mobile = "Not Sent"
}
cleanPlatform := strings.ReplaceAll(platform, "\"", "")
isGooglebook := cleanPlatform == "Android" && mobile == "?0"
Altri client hint utili
Anche se gli hint client Platform e Mobile sono sufficienti per sapere che i tuoi
utenti utilizzano un Googlebook, potresti voler ottenere maggiori informazioni sul loro dispositivo.
Il
[Sec-CH-UA](https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Sec-CH-UA)
client hint restituisce un elenco separato da virgole della versione principale del browser e
di altri brand associati al dispositivo, che è più semplice da analizzare
rispetto alla stringa User-Agent. Esiste anche l'hint client Form Factors
Sec-CH-UA-Form-Factors,
un
hint ad alta entropia,
che fornisce un elenco separato da virgole di fattori di forma per il dispositivo specificato
(computer, tablet, dispositivo mobile, automotive e così via). Sebbene spesso si tratti di un singolo
fattore di forma, potrebbero essere inclusi tutti i fattori di forma applicabili, quindi un dispositivo
rimovibile potrebbe restituire "Desktop", "Tablet", ad esempio. Se è importante sapere
con precisione il fattore di forma utilizzato dagli utenti e non solo che non si tratta di un
dispositivo Android mobile, puoi utilizzare l'intestazione
Critical-CH:
GET / HTTP/1.1
Host: example.com
HTTP/1.1 200 OK
Content-Type: text/html
Accept-CH: Sec-CH-UA-Form-Factors
Vary: Sec-CH-UA-Form-Factors
Critical-CH: Sec-CH-UA-Form-Factors
Se il client avesse incluso un suggerimento critico dopo l'elaborazione dell'intestazione Accept-CH, riproverà a inviare la richiesta. In questo modo, puoi erogare una pagina ottimizzata
anziché la risposta iniziale. Poiché viene aggiunto un viaggio di andata e ritorno aggiuntivo, utilizzalo solo per modifiche significative alla pagina che richiedono le informazioni critiche.