PHP 新的移动检测 iPadOS/iOS 13

PHP mobile detection with new iPadOS/iOS 13

我想知道是否有任何文档或任何新库可以检测到新的 iPadOS / iOS 13?

他们曾经输出:

mozilla/5.0 (ipad; cpu iphone os 12_1_3 like mac os x) applewebkit/605.1.15 (khtml, like gecko) version/12.0 mobile/15e148 safari/604.1

但是现在正在输出:

mozilla/5.0 (macintosh; intel mac os x 10_15) applewebkit/605.1.15 (khtml, like gecko) version/13.0.1 safari/605.1.15

有人遇到过这个吗?要使用任何新库吗?

我得到的最好的解决方案是使用 javascript:

// iPad check
if( (window.screen.height / window.screen.width == 1024 / 768) || 
    (window.screen.height / window.screen.width == 1112 / 834) ||
    (window.screen.height / window.screen.width == 1366 / 1024)
) {
    // do stuff here
}

与之前预期的不同,但这是我拥有的最佳解决方案。

这是一个 php 解决方案,对我来说效果很好:

<?php
//Detect special conditions devices
$iPod    = stripos($_SERVER['HTTP_USER_AGENT'],"iPod");
$iPhone  = stripos($_SERVER['HTTP_USER_AGENT'],"iPhone");
$iPad    = stripos($_SERVER['HTTP_USER_AGENT'],"iPad");
$iPadOS  = stripos($_SERVER['HTTP_USER_AGENT'],"Macintosh");
$Android = stripos($_SERVER['HTTP_USER_AGENT'],"Android");

//TODO
if( $iPod || $iPhone || $iPad || $iPadOS || $Android){
//your methods
}

无法想出一个 php 的方法,但是对于 javascript 这似乎是最合适的 首先检测设备是否是移动设备。最近 iOS iPad,此检查 returns 错误,这实际上是错误的,但这是由于桌面用户代理。 第二次测试设备是否具有触摸属性并查看平台是否包含 'MacIntel' 字符串

let isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent); 
let isIOSMobile = navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1;                                          
if (!isMobile && isIOSMobile ) {   
    //Desktop mode on IPad detected      
    alert("For the best experience we recommend switching Safari view to mobile"); 
}