检查用户是否在App中打开该站点

时间:2016-07-13 13:43:37

标签: php android

我使用以下代码检查用户是否在App中打开了网站

    $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
    if(stripos($ua,'android') && stripos($ua,'mobile') !== false) {
    if($_SERVER['HTTP_X_REQUESTED_WITH'] == "apppackagename") {
    echo "Opening with App";
    }
   }

但这在某些设备上无效。

  

GT - S7582 Android版本4.2.2

是否有任何解决方案可以在旧版设备中使用?

提前致谢!

3 个答案:

答案 0 :(得分:4)

您可以简单地包含在顶部https://github.com/serbanghita/Mobile-Detect/blob/master/Mobile_Detect.php这是一个轻量级库,只需要包含一个文件。

例如:

 require_once('Mobile_Detect.php');
 $device = new Mobile_Detect();

 if ($device->isMobile() ) {
   if( isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&
       $_SERVER['HTTP_X_REQUESTED_WITH'] == "apppackagename") {
           echo "Opening with App";
       }
 }

如果你想检测android,那么你可以输入:

$device->isAndroidOS()

这是检测移动设备最可靠的方式(但也没有防弹)。使用简单的用户代理检查无法进行可靠的移动检测。

如果查看来源https://raw.githubusercontent.com/serbanghita/Mobile-Detect/master/Mobile_Detect.php,您可以看到支持GT-S7582。

答案 1 :(得分:1)

我建议使用一套具有稳定检查功能的库来进行移动/应用检测。这样做的好处是,您可以通过简单地升级库而不是自己重新编码来支持框架来支持即将推出的设备。

对于PHP,似乎有Mobile-Detect,它是开源的,并且有积极的贡献:https://github.com/serbanghita/Mobile-Detect

答案 2 :(得分:1)

如果要隐藏错误,则需要在代码中使用array_key_exists,如下所示:

$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
if(stripos($ua,'android') && stripos($ua,'mobile') !== false) {
    if(array_key_exists('HTTP_X_REQUESTED_WITH', $_SERVER) {
        if($_SERVER['HTTP_X_REQUESTED_WITH'] == "apppackagename") {
            echo "Opening with App";
        }
    } else {
        echo "Sorry... I don't see a package!";
    }
}

函数array_key_exists" 检查数组中是否存在给定的键或索引"。

  

将来您可能需要隐藏其他错误,因此,您可以使用@来   静音错误。 See here