PHP中的Android WebView检测


Android WebView detection in PHP

我做了一个简单的Android应用程序与本地菜单和我的网站内容的webview。我需要检测我的网站是否包含在一个webview中,以隐藏菜单栏。

经过长时间的研究,我找到了这样的方法:

if($_SERVER['HTTP_X_REQUESTED_WITH'] == "myAppPackage"){
    //the site is included in webview
}

这个解决方案适用于很多设备,但是对于Galaxy S4 Mini(Android 4.2.2)这个变量是空白的!

其他http头变量:

  • 路径 /usr/地方/bin:/usr/bin:/bin
  • UNIQUE_ID U6LV8AAAEAABFtKXcAAADY
  • HTTP_HOST 主机名
  • HTTP_ACCEPT text/html, application/xhtml + xml应用程序/xml; q = 0.9 /; q = 0.8
  • HTTP_USER_AGENT Mozilla/5.0 (Windows NT 6.1;WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.116Safari/537.36
  • HTTP_REFERER http://webx225.aruba.it/CP/index.php
  • HTTP_ACCEPT_ENCODING gzip、缩小sdch
  • HTTP_ACCEPT_LANGUAGE葡萄酒,,q = 0.8, en - us; q = 0.6, en; q = 0.4
  • HTTP_COOKIE PHPSESSID = 5 deb3527097d0f767aba45d0aa042;acopendivids =没有什么结果;acgroupswithpersist =没有什么结果;wooTracker = lzp5HpPQNDCd;__utma = 250126209.968543423.1402584011.1403102882.1403106109.27;__utmc = 250126209;__utmz = 250126209.1402752662.8.2.utmcsr =谷歌| utmccn =(有机)| utmcmd =有机| utmctr =(不提供% 20)
  • HTTP_CACHE_CONTROL max-stale = 0
  • HTTP_CONNECTION维生
  • HTTP_X_BLUECOAT_VIA b1ae316f3a2874e7
  • SERVER_SIGNATURE无值
  • SERVER_SOFTWARE Apache/2.2
  • SERVER_NAME 主机名
  • SERVER_ADDR 62.149.140.235
  • SERVER_PORT 80
  • REMOTE_ADDR 62.249.32.77
  • DOCUMENT_ROOT /web/根/主机名/home/
  • SERVER_ADMIN postmaster@hostname
  • SCRIPT_FILENAME/web/根/主机名/home/ aruba__php__test 。php
  • REMOTE_PORT 43924
  • GATEWAY_INTERFACE CGI/1.1
  • SERVER_PROTOCOL HTTP/1.1
  • REQUEST_METHOD得到
  • QUERY_STRING无值
  • REQUEST_URI / aruba__php__test 。php
  • SCRIPT_NAME / aruba__php__test 。php
  • PHPRC no value

多亏了greenapps的想法,这是最终的解决方案。

Android APP MainActivity:

public View onCreateView
....
WebView webView = (WebView) rootView.findViewById(R.id.my_webview);

String agentModified = webView.getSettings().getUserAgentString().concat(" MobileApplication(mypackage)");
webView.getSettings().setUserAgentString(agentModified);
网站

:

if(strpos($_SERVER['HTTP_USER_AGENT'], 'com.vivicrema.android') !== false)
    $isMobileApp = true;

真是太神奇了!