Google Livres repose sur la pile technologique Android et est associé aux bases de données pour ordinateur de bureau de ChromeOS. La plupart des applications Web devraient fonctionner de la même manière sur Google Livres que sur n'importe quel autre appareil de bureau et afficher la même chaîne d'agent utilisateur que 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
Pour identifier plus précisément Google Livres, par exemple pour l'analyse de données ou pour rediriger les utilisateurs vers le téléchargement de votre application Android compatible, vous devez demander deux User-Agent Client Hints : les hints client Platform et Mobile. Ces deux éléments sont des indices à faible entropie. Vous pouvez donc les obtenir sans requête ni autorisation supplémentaires, comme vous le faites avec la chaîne User-Agent. Vous pouvez les intégrer directement à votre détection existante.
| En-tête UA-CH | Valeur pour Googlebooks |
|---|---|
Sec-CH-UA-Platform |
"Android" |
Sec-CH-UA-Mobile |
?0 (Faux) |
Pour détecter cela dans le navigateur, utilisez l'API navigator.userAgentData :
const isGooglebook = window?.navigator?.userAgentData?.platform === 'Android' && window?.navigator?.userAgentData?.mobile === false;
En raison de la réduction de l'User-Agent, aucune plate-forme spécifique à Google Livres n'a été ajoutée à l'indice client Platform ni à la chaîne User-Agent. Par conséquent, pour faire la distinction entre Google Livres et la version précédente de ChromeOS, l'indice client a été remplacé par "Android", ce qui indique que Google Livres est compatible avec les applications Android.
Détection côté serveur
Comme il s'agit de deux indications client à faible entropie, elles seront envoyées à votre serveur lors de la requête initiale du client. Vous pouvez les récupérer de l'une des manières suivantes :
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"
Autres hints client utiles
Bien que les indications client Platform et Mobile suffisent à vous informer que vos utilisateurs utilisent un Googlebook, vous pouvez souhaiter obtenir plus d'informations sur leur appareil.
Le hint client
[Sec-CH-UA](https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Sec-CH-UA)
renvoie une liste séparée par des virgules de la version principale du navigateur et
d'autres marques associées à l'appareil. Il est plus facile à analyser
que la chaîne User-Agent. Il existe également l'indication client Form Factors (Sec-CH-UA-Form-Factors), une indication à haute entropie, qui fournit une liste de facteurs de forme séparés par une virgule pour l'appareil donné (ordinateur, tablette, mobile, automobile, etc.). Bien qu'il s'agisse souvent d'un seul facteur de forme, tous les facteurs de forme applicables peuvent être inclus. Par exemple, un appareil détachable peut renvoyer "Desktop", "Tablet". Si vous avez besoin de connaître précisément le facteur de forme de vos utilisateurs, et pas seulement qu'il ne s'agit pas d'un appareil Android mobile, vous pouvez utiliser l'en-tête 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
Si le client avait inclus un indice critique après le traitement de l'en-tête Accept-CH, il relancera la requête. Cela vous permet de diffuser une page optimisée au lieu de la réponse initiale. Comme cela ajoute un aller-retour supplémentaire, ne l'utilisez que pour les modifications importantes de la page qui nécessitent des informations critiques.