Identificeer Google Books

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.