تم إنشاء Googlebooks باستخدام حزمة تكنولوجية خاصة بنظام التشغيل Android، وتم إقرانها بأسس أجهزة الكمبيوتر المكتبي من ChromeOS. من المفترض أن تعمل معظم تطبيقات الويب بالطريقة نفسها على Googlebooks كما على أي جهاز مكتبي آخر، وستظهر لها سلسلة وكيل المستخدم نفسها التي تظهر على 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
لتحديد Googlebooks بدقة أكبر، مثلاً لأغراض إحصائية أو لتوجيه المستخدمين إلى تنزيل تطبيق Android المتوافق، عليك طلب حقول معلومات الوكيل المستخدم، وهما Platform وMobile. كلاهما تلميحات منخفضة الإنتروبيا، ما يتيح لك الحصول عليهما بدون طلبات أو أذونات إضافية، تمامًا كما تفعل مع سلسلة User-Agent. يمكنك دمجها مباشرةً في
عملية الرصد الحالية.
| عنوان UA-CH | القيمة في Googlebooks |
|---|---|
Sec-CH-UA-Platform |
"Android" |
Sec-CH-UA-Mobile |
?0 (خطأ) |
لرصد ذلك في المتصفّح، استخدِم واجهة برمجة التطبيقات navigator.userAgentData:
const isGooglebook = window?.navigator?.userAgentData?.platform === 'Android' && window?.navigator?.userAgentData?.mobile === false;
بسبب
تقليل معلومات الوكيل المستخدم،
لم تتم إضافة نظام أساسي خاص بـ Googlebook إلى حقول معلومات العميل Platform أو
سلسلة وكيل المستخدم، لذا لضمان التمييز بين Googlebooks
والإصدار السابق من ChromeOS، تم تغيير حقول معلومات العميل إلى "Android"،
ما يشير إلى أنّ Googlebooks متوافق مع تطبيقات Android.
الرصد من جهة الخادم
بما أنّ هاتين الإشارتين هما إشارتان منخفضتا الإنتروبيا، سيتم إرسالهما إلى الخادم عند الطلب الأوّلي من العميل، ويمكنك الحصول عليهما بإحدى الطرق التالية:
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';
جافا
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"
حقول معلومات العميل المفيدة الأخرى
في حين أنّ تلميحات العميل Platform وMobile تكفي لإعلامك بأنّ المستخدمين يستعملون Googlebook، قد تحتاج إلى مزيد من المعلومات حول أجهزتهم.
تعرض
[Sec-CH-UA](https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Sec-CH-UA)
حقول معلومات العميل قائمة مفصولة بفواصل تتضمّن إصدار المتصفّح الرئيسي
والعلامات التجارية الأخرى المرتبطة بالجهاز، ما يسهّل تحليلها
مقارنةً بتحليلها من سلسلة User-Agent. يتوفّر أيضًا تلميح Form Factors العميل
Sec-CH-UA-Form-Factors،
وهو
تلميح عالي الإنتروبيا
يوفر قائمة قيم مفصولة بفاصلة لأشكال الأجهزة المحدّدة
(كمبيوتر مكتبي وجهاز لوحي وجهاز جوّال وAutomotive وما إلى ذلك). على الرغم من أنّ هذا يكون غالبًا شكل جهاز واحدًا، يمكن تضمين جميع أشكال الأجهزة السارية، لذا قد يعرض جهاز قابل للفصل "Desktop", "Tablet"، على سبيل المثال. إذا كان من المهم معرفة عامل الشكل الذي يستخدمه المستخدمون بدقة، وليس فقط أنّه ليس جهاز Android جوّالاً، يمكنك استخدام العنوان 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
إذا كان العميل سيضمّن تلميحًا مهمًا بعد معالجة العنوان Accept-CH، سيعيد محاولة الطلب. يتيح لك ذلك عرض صفحة محسّنة بدلاً من الردّ الأوّلي. وبما أنّ ذلك يضيف رحلة ذهاب وعودة إضافية، لا تستخدِم هذه الطريقة إلا لإجراء تغييرات مهمة في الصفحة تتطلّب المعلومات الأساسية.