Googlebooks basieren auf dem Android-Technologie-Stack und werden mit Desktop-Grundlagen von ChromeOS kombiniert. Die meisten Webanwendungen sollten auf Googlebooks genauso wie auf anderen Desktopgeräten ausgeführt werden und denselben User-Agent-String wie ChromeOS verwenden:
Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0; Safari/537.36
Wenn Sie Googlebooks genauer identifizieren möchten, z. B. für Analysen, oder Nutzer zum Herunterladen Ihrer kompatiblen Android-App weiterleiten möchten, müssen Sie zwei User-Agent Client Hints anfordern: Platform und Mobile. Beide sind Hinweise mit geringer Entropie, die Sie ohne zusätzliche Anfragen oder Berechtigungen abrufen können, genau wie beim User-Agent-String. Sie können sie direkt in Ihre bestehende Erkennung einbauen.
| UA-CH-Header | Wert für Googlebooks |
|---|---|
Sec-CH-UA-Platform |
"Android" |
Sec-CH-UA-Mobile |
?0 (Falsch) |
Verwenden Sie die navigator.userAgentData API, um dies im Browser zu erkennen:
const isGooglebook = window?.navigator?.userAgentData?.platform === 'Android' && window?.navigator?.userAgentData?.mobile === false;
Aufgrund der User-Agent-Reduzierung wurde dem Client-Hinweis Platform oder dem User-Agent-String keine Googlebooks-spezifische Plattform hinzugefügt. Damit Googlebooks und die vorherige Version von ChromeOS unterschieden werden können, wurde der Client-Hinweis in "Android" geändert. Dies spiegelt wider, dass Googlebooks mit Android-Apps kompatibel sind.
Serverseitige Erkennung
Da es sich bei beiden um Client-Hinweise mit geringer Entropie handelt, werden sie bei der ersten Anfrage vom Client an Ihren Server gesendet. Sie können sie auf eine der folgenden Arten abrufen:
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');
Ok
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"
Weitere nützliche Client-Hints
Die Client-Hinweise Platform und Mobile reichen aus, um zu erkennen, dass Ihre Nutzer ein Googlebook verwenden. Möglicherweise benötigen Sie jedoch weitere Informationen zu ihrem Gerät.
Der Client-Hinweis [Sec-CH-UA](https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Sec-CH-UA) gibt eine durch Kommas getrennte Liste der Hauptbrowserversion und anderer Marken zurück, die mit dem Gerät verknüpft sind. Das ist einfacher zu parsen als der User-Agent-String. Außerdem gibt es den Clienthinweis Form Factors (Sec-CH-UA-Form-Factors), einen Hinweis mit hoher Entropie>, der eine durch Kommas getrennte Liste von Formfaktoren für das jeweilige Gerät enthält (Desktop, Tablet, Mobilgerät, Automotive usw.). In der Regel ist das ein einzelner Formfaktor. Es können aber auch alle zutreffenden Formfaktoren angegeben werden. Bei einem abnehmbaren Gerät kann beispielsweise "Desktop", "Tablet" zurückgegeben werden. Wenn Sie genau wissen müssen, welchen Formfaktor Ihre Nutzer verwenden und nicht nur, dass es sich nicht um ein mobiles Android-Gerät handelt, können Sie den Header Critical-CH verwenden:
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
Wenn der Client nach der Verarbeitung des Headers Accept-CH einen wichtigen Hinweis aufgenommen hätte, wird die Anfrage noch einmal gesendet. So können Sie eine optimierte Seite anstelle der ursprünglichen Antwort ausliefern. Da dadurch ein zusätzlicher Roundtrip entsteht, sollten Sie diese Methode nur für wichtige Seitenänderungen verwenden, für die die kritischen Informationen erforderlich sind.