Google Books is gebouwd op de Android-technologiestack en gecombineerd met de desktopbasis van ChromeOS. De meeste webapplicaties zouden op Google Books hetzelfde moeten werken als op elk ander desktopapparaat en zullen dezelfde User Agent-string zien als 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
Om Google Books nauwkeuriger te identificeren, bijvoorbeeld voor analyses of om gebruikers door te verwijzen naar uw compatibele Android-app, moet u twee User-Agent Client Hints aanvragen: de Platform en de Mobile clienthint. Beide zijn hints met een lage entropie , waardoor u ze kunt verkrijgen zonder extra verzoeken of machtigingen, net zoals u dat doet met de User-Agent-string. U kunt ze direct in uw bestaande detectieproces integreren.
| UA-CH-header | Waarde voor Google Books |
|---|---|
Sec-CH-UA-Platform | "Android" |
Sec-CH-UA-Mobile | ?0 (Onwaar) |
Om dit in de browser te detecteren, gebruikt u de navigator.userAgentData API:
const isGooglebook = window?.navigator?.userAgentData?.platform === 'Android' && window?.navigator?.userAgentData?.mobile === false;
Vanwege de reductie van de User-Agent werd er geen specifiek Google Books-platform toegevoegd aan de Platform client hint of de User-Agent-string. Om een onderscheid te maken tussen Google Books en de vorige versie van ChromeOS, werd de client hint daarom gewijzigd in "Android" , wat aangeeft dat Google Books compatibel is met Android-apps.
Server-side detectie
Omdat dit beide clienthints met een lage entropie zijn, worden ze bij het eerste verzoek van de client naar uw server verzonden en kunt u ze op een van de volgende manieren ophalen:
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");
Robijn
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');
Gaan
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"
Andere nuttige tips voor klanten
Hoewel de clienthints Platform en Mobile voldoende zijn om aan te geven dat uw gebruikers een Google Book gebruiken, wilt u wellicht meer informatie over hun apparaat. De clienthint [Sec-CH-UA](https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Sec-CH-UA) retourneert een door komma's gescheiden lijst met de belangrijkste browserversie en andere merken die aan het apparaat zijn gekoppeld. Dit is eenvoudiger te parseren dan dit te doen vanuit de User-Agent-string. Er is ook de clienthint Form Factors ( Sec-CH-UA-Form-Factors ), een hint met hoge entropie , die een door komma's gescheiden lijst met vormfactoren voor het betreffende apparaat geeft (desktop, tablet, mobiel, auto, enzovoort). Hoewel dit vaak slechts één vormfactor betreft, kunnen alle toepasselijke vormfactoren worden opgenomen. Een afneembaar apparaat kan bijvoorbeeld "Desktop", "Tablet" retourneren. Als het belangrijk is om precies te weten welk apparaat uw gebruikers gebruiken, en niet alleen dat het geen mobiel Android-apparaat is, kunt u de Critical-CH header gebruiken:
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
Als de client na het verwerken van de Accept-CH -header een kritieke hint heeft toegevoegd, wordt het verzoek opnieuw geprobeerd. Hierdoor kunt u een geoptimaliseerde pagina weergeven in plaats van het oorspronkelijke antwoord. Omdat dit een extra communicatieronde met zich meebrengt, dient u dit alleen te gebruiken voor belangrijke paginawijzigingen die de kritieke informatie vereisen.