Google Kitaplar, Android teknoloji yığını üzerine kurulmuştur ve ChromeOS'in masaüstü temelleriyle eşleştirilmiştir. Çoğu web uygulaması, Googlebooks'ta diğer tüm masaüstü cihazlarda olduğu gibi çalışır ve ChromeOS ile aynı kullanıcı aracısı dizesini görür:
Mozilla/5.0 (X11; CrOS x86_64 14541.0.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/147.0.0.0; Safari/537.36
Örneğin, Google Kitaplar'ı daha doğru bir şekilde tanımlamak (ör. analiz için) veya kullanıcıları uyumlu Android uygulamanızı indirmeye yönlendirmek için iki Kullanıcı Aracısı İstemci İpuçları istemeniz gerekir: Platform ve Mobile İstemci İpuçları. Bu iki değer de düşük entropili ipuçlarıdır. Bu sayede, kullanıcı aracısı dizesinde olduğu gibi ek istek veya izin olmadan bu değerleri alabilirsiniz. Bunları doğrudan mevcut algılama sisteminize entegre edebilirsiniz.
| UA-CH üstbilgisi | Googlebook değeri |
|---|---|
Sec-CH-UA-Platform |
"Android" |
Sec-CH-UA-Mobile |
?0 (Yanlış) |
Bunu tarayıcıda algılamak için navigator.userAgentData API'sini kullanın:
const isGooglebook = window?.navigator?.userAgentData?.platform === 'Android' && window?.navigator?.userAgentData?.mobile === false;
Kullanıcı Aracısı daraltması nedeniyle Platform İstemci İpuçları'na veya kullanıcı aracısı dizesine Googlebook'a özgü bir platform eklenmedi. Bu nedenle, Googlebook ile ChromeOS'in önceki sürümü arasında ayrım yapılabilmesi için İstemci İpuçları, Googlebook'ların Android uygulamalarıyla uyumlu olduğunu yansıtacak şekilde "Android" olarak değiştirildi.
Sunucu tarafı algılama
Bunlar düşük entropili istemci ipuçları olduğundan, istemciden gelen ilk istekte sunucunuza gönderilir. Bu ipuçlarını aşağıdaki yöntemlerden biriyle alabilirsiniz:
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"
Diğer yararlı istemci ipuçları
Platform ve Mobile istemci ipuçları, kullanıcılarınızın Googlebook kullandığını anlamanız için yeterli olsa da cihazları hakkında daha fazla bilgi edinmek isteyebilirsiniz.
[Sec-CH-UA](https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Sec-CH-UA) istemci ipucu, ana tarayıcı sürümünün ve cihazla ilişkili diğer markaların virgülle ayrılmış bir listesini döndürür. Bu liste, kullanıcı aracısı dizesinden ayrıştırmaya kıyasla daha kolaydır. Ayrıca, verilen cihaz için virgülle ayrılmış form faktörleri listesi (masaüstü, tablet, mobil, otomotiv vb.) sağlayan bir Form Factors istemci
ipucu
(Sec-CH-UA-Form-Factors),
bir
yüksek entropili ipucu da vardır. Bu genellikle tek bir form faktörü olsa da geçerli tüm form faktörleri dahil edilebilir. Örneğin, çıkarılabilir bir cihaz "Desktop", "Tablet" değerini döndürebilir. Kullanıcılarınızın tam olarak hangi form faktörünü kullandığını bilmek önemliyse ve yalnızca mobil Android cihaz olmadığını bilmek yeterli değilse Critical-CH üstbilgisini kullanabilirsiniz:
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
İstemci, Accept-CH başlığı işlendikten sonra kritik bir ipucu eklemişse isteği yeniden dener. Bu sayede, ilk yanıt yerine optimize edilmiş bir sayfa sunabilirsiniz. Bu işlem ek bir gidiş dönüş eklediğinden yalnızca önemli bilgilerin gerekli olduğu anlamlı sayfa değişiklikleri için kullanın.