DeviceDetector:一个 User Agent 就能识别设备类型 文章目录DeviceDetector一个 User Agent 就能识别设备类型DeviceDetector一个 User Agent 就能识别设备类型做 Web 开发的人多少都遇到过需要识别用户设备的场景。手机端展示手机页面桌面端展示桌面页面爬虫来了直接拦截。这些事情听起来简单真要自己写一套 User Agent 解析逻辑会发现浏览器、操作系统、设备型号的组合是个无底洞。DeviceDetector 是 Matomo 团队维护的一个 PHP 库专门做这件事。它解析 User Agent 字符串和 Client Hints从中提取设备类型、浏览器、操作系统、品牌型号等信息。能识别哪些东西DeviceDetector 的识别范围很广。设备类型方面它能区分智能手机、功能机、平板、游戏主机、便携媒体播放器、车载浏览器、电视、智能音箱、摄像头、可穿戴设备、外设等十多种类别。客户端方面它能识别浏览器、RSS 阅读器、移动应用、个人信息管理工具、媒体播放器、代码库。每种类型下面还有细分光浏览器就覆盖了上百种。操作系统和品牌型号也在识别范围内。拿到一个 User Agent它能告诉你这是 Android 还是 iOS是三星还是小米具体是哪个型号。它还能识别爬虫。Googlebot、Bingbot、各种 SEO 工具的爬虫都能被标记出来。怎么用通过 Composer 安装一行命令搞定composer require matomo/device-detector使用方式也很直接。传入 User Agent 字符串调用 parse()然后按需取结果。$userAgent$_SERVER[HTTP_USER_AGENT];$ddnewDeviceDetector($userAgent);$dd-parse();if($dd-isBot()){$botInfo$dd-getBot();}else{$clientInfo$dd-getClient();$osInfo$dd-getOs();$device$dd-getDeviceName();$brand$dd-getBrandName();$model$dd-getModel();}判断设备类型的方法很丰富。isSmartphone()、isTablet()、isTV()、isConsole()、isCarBrowser()基本上能想到的设备类型都有对应的方法。如果你只需要检测是不是爬虫不想跑完整的解析流程可以直接用 BotParser$botParsernewBotParser();$botParser-setUserAgent($userAgent);$result$botParser-parse();if(!is_null($result)){return;// 是爬虫不做处理}Client Hints 支持除了传统的 User AgentDeviceDetector 也支持 Client Hints。Client Hints 是浏览器通过 HTTP 头主动提供设备信息的机制比 User Agent 更准确。使用时需要在服务端声明支持 Client Hints然后通过ClientHints::factory($_SERVER)传入即可。这个是可选的不传也能正常工作。性能和缓存默认情况下DeviceDetector 使用内置的内存数组缓存。如果需要跨请求缓存它支持多种缓存后端PSR-6、PSR-16、Doctrine、Laravel Cache 都能接入。$cachenew\Symfony\Component\Cache\Adapter\ApcuAdapter();$dd-setCache(new\DeviceDetector\Cache\PSR6Bridge($cache));这个设计比较实用。在高流量场景下解析 User Agent 是个频繁操作接上 Redis 或 APCu 能省不少开销。其他语言版本DeviceDetector 原版是 PHP 写的但社区已经移植到了很多语言JavaScript/TypeScript/NodeJSPython 3RubyGoJavaRustElixirCrystal.NET如果你的项目不是 PHP可以直接搜对应语言的版本。大部分都是从这个库的规则文件移植过去的识别能力基本一致。YAML 规则文件DeviceDetector 的核心其实不是 PHP 代码而是那些 YAML 规则文件。所有设备型号、浏览器特征、爬虫签名都定义在 YAML 文件里。它默认用 Spyc 解析 YAML也支持换成 Symfony YAML 或 PECL YAML 扩展。这意味着它的识别能力取决于规则文件的更新频率。Matomo 是一个成熟的网站分析平台用户量大规则文件的维护是比较持续的。测试和质量项目有完整的 PHPUnit 测试套件配合 PHPStan 做静态分析PHPCS 做代码风格检查。YAML 规则文件也有专门的校验流程包括正则表达式验证。从 CI 配置来看代码质量把控比较严格。适合什么场景DeviceDetector 适合需要做设备识别的 Web 项目。比如响应式页面根据设备类型返回不同内容、统计分析系统区分移动端和桌面端流量、反爬虫系统标记机器人访问、广告投放系统根据设备型号选择素材。3500 多个 Star 不算多但这个库已经维护了很多年是 Matomo 这个知名分析平台的核心组件之一。稳定性和规则覆盖度都经过了大量生产环境的验证。量、反爬虫系统标记机器人访问、广告投放系统根据设备型号选择素材。3500 多个 Star 不算多但这个库已经维护了很多年是 Matomo 这个知名分析平台的核心组件之一。稳定性和规则覆盖度都经过了大量生产环境的验证。