javascript – 在PHP(或服务器端)中检测iOS的最新和未来证明方式

我知道类似的问题经常被问到,但很多都已经过时,而且事情发生了很大变化,因此我再次询问社区(2017年10月)我们如何检测用户是否正在使用iOS设备,我突出iOS,我不关心任何其他平台.

我需要检测的原因

>我正在我的网站上显示图片,用户可以点击其中一些来下载完整的高分辨率图片.在服务器端我使用X-SENDFILE将文件推送给用户,除了缺少下载功能的iOS之外的所有内容都很好用,因此在iOS情况下我需要修改标题并将图像显示为图像而不是而不是附件,因此用户可以点击它并手动将其保存到图库.

我可以使用用户代理嗅探(就像我过去一样):

$iPod    = stripos($_SERVER['HTTP_USER_AGENT'],"iPod");
$iPhone  = stripos($_SERVER['HTTP_USER_AGENT'],"iPhone");
$iPad    = stripos($_SERVER['HTTP_USER_AGENT'],"iPad");

但是这不会为应用内浏览器(如Facebook,Twitter等)削减它,是的,你可以继续在列表中添加规则,但它将是一个持续的追赶游戏,你如何真正保持轨道更改代理字符串的所有可能的第三方应用程序.
我不想继续回去更新我的页面,这有点荒谬imho.

所以我对社区的问题是有没有更好的方法来检测iOS?

按顺序优先解决方案

>从服务器端检测
>从客户端检测(javascript)
>使用外部库(类似于https://github.com/serbanghita/Mobile-Detect,甚至可能付费,可以链接到页面而不是内置)

我不太热衷于第三种选择,因为它再次依赖于库不断更新,如果开发停止,那么我必须跟踪并忘记这样做会导致功能被破坏未来.

谢谢.

如果您对此问题进行了投票,请至少对其进行评论?

解决方法:

用于检测用户代理的当前机制就是您所提到的.相比之下,In App浏览器流量小于app / desktop流量.因此,您应该寻找的解决方案是如何识别应用程序浏览器流量.好吧,让我们分解并了解应用程序浏览器中的内容.

按照this link

“In-app browsers” are not actual browsers, but a webview window running off your device’s core browser. Safari passes the “(in-app)” string into the browser name, but others don’t. As far as Google Analytics is concerned, a webview window based on Chrome is simply Chrome.

它基本上是一个Web设备核心浏览器的Web视图窗口,在iOS的情况下是Safari,在Android的情况下是Chrome.

现在要在服务器端识别这个,我们可以这样做:

//For iOS

if ((strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile/') !== false) && (strpos($_SERVER['HTTP_USER_AGENT'], 'Safari/') == false) {
    echo 'WebView';
} else{
    echo 'Not WebView';
}

//For Android

if ($_SERVER['HTTP_X_REQUESTED_WITH'] == "com.company.app") {
    echo 'WebView';
} else{
    echo 'Not WebView';
}

我们知道标题可以伪造,所以这不是最好的解决方案.

要在客户端识别Web视图,请使用以下命令:

var userAgent = window.navigator.userAgent.toLowerCase(),
safari = /safari/.test( userAgent ),
ios = /iphone|ipod|ipad/.test( userAgent );

if( ios ) {
    if ( safari ) {
        //browser
    } else if ( !safari ) {
        //webview
    };
} else {
    //not iOS
};

第三个解决方案是使用我推荐的移动检测,因为它做了同样的事情并提供了一些更方便的功能.

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...