شناسایی گوگل بوکز

گوگل‌بوکز بر پایه فناوری اندروید ساخته شده و با پایه‌های دسکتاپ از ChromeOS جفت شده است. اکثر برنامه‌های وب باید در گوگل‌بوکز مانند هر دستگاه دسکتاپ دیگری اجرا شوند و همان رشته عامل کاربر 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

برای شناسایی دقیق‌تر گوگل‌بوک‌ها، مثلاً برای تجزیه و تحلیل، یا هدایت کاربران به دانلود برنامه اندروید سازگار شما، باید دو راهنمایی کاربر-عامل را درخواست کنید: راهنمایی Platform و راهنمایی کاربر Mobile . هر دوی این‌ها راهنمایی‌های کم آنتروپی هستند که به شما امکان می‌دهند بدون درخواست یا مجوز اضافی، درست مانند کاری که با رشته کاربر-عامل انجام می‌دهید، آن‌ها را دریافت کنید. می‌توانید آن‌ها را مستقیماً در تشخیص موجود خود بگنجانید.

هدر UA-CH ارزش خرید گوگل بوکز
Sec-CH-UA-Platform "Android"
Sec-CH-UA-Mobile ?0 (غلط)

برای تشخیص این مورد در مرورگر، از API navigator.userAgentData استفاده کنید:

const isGooglebook = window?.navigator?.userAgentData?.platform === 'Android' && window?.navigator?.userAgentData?.mobile === false;

به دلیل کاهش User-Agent ، پلتفرم مخصوص گوگل‌بوک به راهنمای کلاینت Platform یا رشته‌ی user agent اضافه نشد، بنابراین برای اطمینان از وجود تمایز بین گوگل‌بوک و نسخه قبلی ChromeOS، راهنمای کلاینت به "Android" تغییر یافت که نشان می‌دهد گوگل‌بوک با برنامه‌های اندروید سازگار است.

تشخیص سمت سرور

از آنجا که هر دوی این‌ها نشانه‌های کلاینت با آنتروپی کم هستند، بنا به درخواست اولیه کلاینت به سرور شما ارسال می‌شوند و می‌توانید آن‌ها را به یکی از روش‌های زیر دریافت کنید:

نود جی اس

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");

روبی

mobile = req['Sec-CH-UA-Mobile'] || 'Not Sent'

clean_platform = platform.gsub('"', '')
is_googlebook = clean_platform == 'Android' && mobile == '?0'

پایتون

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'

پی اچ پی

$mobile = $_SERVER['HTTP_SEC_CH_UA_MOBILE'] ?? 'Not Sent';

$cleanPlatform = str_replace('"', '', $platform);
$isGooglebook = ($cleanPlatform === 'Android' && $mobile === '?0');

برو

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 برای اطلاع‌رسانی به شما در مورد استفاده کاربران از گوگل‌بوک کافی است، اما ممکن است اطلاعات بیشتری در مورد دستگاه آنها بخواهید. نکته کلاینت [Sec-CH-UA](https://developer.mozilla.org/docs/Web/HTTP/Reference/Headers/Sec-CH-UA) فهرستی از نسخه اصلی مرورگر و سایر برندهای مرتبط با دستگاه را که با کاما از هم جدا شده‌اند، برمی‌گرداند که تجزیه آن نسبت به انجام این کار از رشته User-Agent ساده‌تر است. همچنین نکته کلاینت Form Factors ( Sec-CH-UA-Form-Factors ) وجود دارد که یک نکته با آنتروپی بالا است و فهرستی از فاکتورهای فرم را برای دستگاه مورد نظر (دسکتاپ، تبلت، موبایل، خودرو و غیره) که با کاما از هم جدا شده‌اند، ارائه می‌دهد. اگرچه این اغلب یک فاکتور فرم واحد است، اما می‌توان همه فاکتورهای فرم قابل اجرا را در آن گنجاند، بنابراین یک دستگاه جداشونده ممکن است مثلاً "Desktop", "Tablet" را برگرداند. اگر مهم است که دقیقاً بدانید کاربران شما از چه فرم فاکتوری استفاده می‌کنند، و نه تنها اینکه دستگاه شما یک دستگاه اندروید موبایل نیست، می‌توانید از هدر 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 یک راهنمایی مهم اضافه کرده باشد، درخواست را دوباره امتحان می‌کند. این به شما امکان می‌دهد به جای پاسخ اولیه، یک صفحه بهینه شده ارائه دهید. از آنجا که این یک رفت و برگشت اضافی اضافه می‌کند، فقط برای تغییرات معنادار صفحه که به اطلاعات مهم نیاز دارند، از آن استفاده کنید.