Googlebooks dibangun di stack teknologi Android dan dipasangkan dengan fondasi desktop dari ChromeOS. Sebagian besar aplikasi web akan berjalan sama di Google Buku seperti di perangkat desktop lainnya dan akan melihat string Agen Pengguna yang sama seperti 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
Untuk mengidentifikasi Google Buku dengan lebih akurat, misalnya, untuk analisis, atau untuk mengarahkan pengguna mendownload aplikasi Android yang kompatibel, Anda perlu meminta dua Petunjuk Klien Agen Pengguna: petunjuk klien Platform dan Mobile. Keduanya adalah
petunjuk entropi rendah,
yang memungkinkan Anda mendapatkannya tanpa permintaan atau izin tambahan, seperti
yang Anda lakukan dengan string User-Agent. Anda dapat menggabungkannya langsung ke dalam deteksi yang ada.
| Header UA-CH | Nilai untuk Googlebook |
|---|---|
Sec-CH-UA-Platform |
"Android" |
Sec-CH-UA-Mobile |
?0 (Salah) |
Untuk mendeteksinya di browser, gunakan navigator.userAgentData API:
const isGooglebook = window?.navigator?.userAgentData?.platform === 'Android' && window?.navigator?.userAgentData?.mobile === false;
Karena pengurangan Agen Pengguna, platform khusus Googlebook tidak ditambahkan ke Petunjuk Klien Platform atau string agen pengguna, jadi untuk memastikan ada perbedaan antara Googlebook dan ChromeOS versi sebelumnya, Petunjuk Klien diubah menjadi "Android", yang menunjukkan bahwa Googlebook kompatibel dengan aplikasi Android.
Deteksi sisi server
Karena keduanya adalah petunjuk klien entropi rendah, petunjuk ini akan dikirim ke server Anda pada permintaan awal dari klien dan Anda dapat mengambilnya dengan salah satu cara berikut:
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"
Petunjuk klien berguna lainnya
Meskipun petunjuk klien Platform dan Mobile sudah cukup untuk memberi tahu Anda bahwa pengguna Anda menggunakan Googlebook, Anda mungkin menginginkan informasi lebih lanjut tentang perangkat mereka.
Petunjuk klien
[Sec-CH-UA](https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Sec-CH-UA)
menampilkan daftar versi browser utama dan
merek lain yang terkait dengan perangkat yang dipisahkan dengan koma, yang lebih mudah diuraikan
daripada melakukannya dari string Agen Pengguna. Ada juga petunjuk klien Form Factors(Sec-CH-UA-Form-Factors),
petunjuk entropi tinggi,
yang memberikan daftar faktor bentuk yang dipisahkan koma untuk perangkat tertentu
(Desktop, Tablet, Seluler, Otomotif, dan sebagainya). Meskipun biasanya hanya satu faktor bentuk, semua faktor bentuk yang berlaku dapat disertakan, sehingga perangkat yang dapat dilepas dapat menampilkan "Desktop", "Tablet", misalnya. Jika penting untuk mengetahui
faktor bentuk yang digunakan pengguna Anda secara tepat, dan bukan hanya bahwa itu bukan
perangkat Android seluler, Anda dapat menggunakan
header 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
Jika klien akan menyertakan petunjuk penting setelah memproses header
Accept-CH, klien akan mencoba lagi permintaan. Tindakan ini memungkinkan Anda menayangkan halaman yang dioptimalkan, bukan respons awal. Karena hal ini menambahkan perjalanan pulang pergi ekstra, gunakan
hanya untuk perubahan halaman yang signifikan yang memerlukan informasi penting.