通過解析 HTTP 請求頭 User-Agent 字符串,識別客戶端類型 (Android、iOS、Windows Phone 等),實現終端適配邏輯。
public class DeviceDetector {
// 移動端特徵關鍵字 (小寫匹配)
private static final String[] MOBILE_KEYWORDS = {
"android", "iphone", "ipad", "ipod", "mac os", "windows phone"
};
/**
* 判斷是否為移動設備
* @param userAgent HTTP 請求頭 User-Agent
* @return true=移動端, false=PC端
*/
public static boolean isMobileDevice(String userAgent) {
if (userAgent == null) return false;
String ua = userAgent.toLowerCase();
for (String keyword : MOBILE_KEYWORDS) {
if (ua.contains(keyword)) return true;
}
return false;
}
}
@RestController
@RequestMapping("/api")
public class DemoController {
private static final Logger log = LoggerFactory.getLogger(DemoController.class);
@GetMapping("/device")
public String detectDevice(HttpServletRequest request) {
String ua = request.getHeader("User-Agent");
if (DeviceDetector.isMobileDevice(ua)) {
log.debug("移動端訪問: {}", ua);
return "MOBILE";
} else {
log.debug("PC端訪問: {}", ua);
return "PC";
}
}
}
| 設備 | User-Agent 片段 |
|---|---|
| Android 手機 | Mozilla/5.0 (Linux; Android 10; SM-G973F) AppleWebKit/537.36 |
| iPhone | Mozilla/5.0 (iPhone; CPU iPhone OS 14_0 like Mac OS X) AppleWebKit/605.1.15 |
| iPad | Mozilla/5.0 (iPad; CPU OS 14_0 like Mac OS X) AppleWebKit/605.1.15 |
| Windows Phone | Mozilla/5.0 (Windows Phone 10.0; Android 4.2.1; Lumia 950) |
| Windows PC (Chrome) | Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 |
| Mac (Safari) | Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/605.1.15 |
ua-parser、Yauaa (Yet Another User Agent Analyzer) 解析更全面 (瀏覽器、OS、設備型號、是否爬蟲)UA → DeviceTypeMac OS X 同時出現在 iPhone/iPad/Mac,需結合 iPhone/iPad 關鍵字區分