2013-05-05 12 views
14

인앱 브라우저 (Webview)를 사용하여 웹 서버에서 HTML 파일에 액세스하는 iOS 및 Android 용 앱을 개발했습니다.PHP/Javascript로 인앱 브라우저 (WebView) 감지

사용자가 앱을 사용하지 않고이 파일에 액세스하는 것을 원치 않습니다. 사용자가 앱으로 파일에 액세스 중이거나이 스마트 폰/태블릿/컴퓨터의 브라우저를 통해 직접 파일에 액세스하는 경우이를 감지 할 수 있습니까? Javascript를 끌 수 있기 때문에 PHP로 해결하는 것이 훨씬 낫다고 생각합니다. 적어도 Google 애널리틱스에서는 Safari와 Safari (인앱)를 구분할 수 있습니다. iOS 및 Android의 모든 버전에서 작동합니다.

도움 주셔서 감사합니다. 많은 시도 후


솔루션

는 드디어 나를 위해 작업 솔루션을 발견!

iOS : 사용자 에이전트를 사용하여 Safari와 인앱 브라우저 간의 차이점을 감지 할 수 있습니다. 아마 더 좋은 해결책이있을 것입니다, 그러나 그것은 효과적입니다.

// Safari (in-app) 
if ((strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile/') !== false) && (strpos($_SERVER['HTTP_USER_AGENT'], 'Safari/') == false) { 
    echo 'Safari (in-app)'; 
} 

안드로이드 : 응용 프로그램에서 패키지 이름은 PHP 변수 $_SERVER['HTTP_X_REQUESTED_WITH']에 저장됩니다 .

// Android (in-app) 
if($_SERVER['HTTP_X_REQUESTED_WITH'] == "com.company.app") { 
    echo 'Android (in-app)'; 
} 

Tim van Elsloo는 이미 HTTP 헤더가 위조 될 수 있으며 이는 절대적으로 안전하지는 않습니다.

+0

다른 브라우저에서 페이지를 열면 iOs 솔루션이 실패합니다. 약간의 시험 후에, 나는 그것을 조금 세련시켰다. 여기를 확인하십시오 : http : // stackoverflow.co.kr/questions/2738766/iphone-webapps-is-a-way-to-detect-how-it-was-loaded-home-screen-vs-safar/20757993 # 20757993 –

답변

5

Android에 대해서는 잘 모르겠지만 iOS SDK의 UIWebView을 사용하면 사용자 에이전트 (YourApp/1.0)의 일부로 앱의 이름과 버전이 전송됩니다.

당신은 다음 인앱 웹보기 사용 여부되고 있는지 확인하기 위해 PHP를 사용할 수 있습니다

if (strpos($_SERVER['HTTP_USER_AGENT'], 'YourApp/') !== false) 

을 나는 안드로이드뿐만 아니라 비슷한 무언가를 생각합니다.

+1

분명히 위조 될 수 있습니다 데스크톱 브라우저에서도 ("가짜"HTTP 헤더를 설정하여) 보안상의 관점에서 의존해서는 안됩니다. – elslooo

+2

빠른 도움에 감사드립니다. 불행히도 사용자 에이전트는 앱 이름을 포함하지 않습니다. 적어도 내 시도는 아닙니다. – ohh2ahh

+0

'UIWebView'를 사용하고 있습니까? ' /1.0 CFNetwork/459 Darwin/10.2.0'과 같아야합니다. 그것이 아니라면 (나는 의심 스럽습니다) http://stackoverflow.com/questions/478387/change-user-agent-in-uiwebview-iphone-sdk 또는 http : // stackoverflow와 같은 것을 시도 할 수 있습니다. co.kr/questions/8487581/uiwebview-ios5-changing-user-agent를 참조하십시오. – elslooo

1

솔루션 코드 :

안드로이드 웹보기 위해
$isWebView = false; 
if((strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile/') !== false) && (strpos($_SERVER['HTTP_USER_AGENT'], 'Safari/') == false)) : 
    $isWebView = true; 
elseif(isset($_SERVER['HTTP_X_REQUESTED_WITH'])) : 
    $isWebView = true; 
endif; 

if(!$isWebView) : 
    // Android or iOS Webview 
else : 
    // Normal Browser 
endif; 
0

는, 개발자 크롬에서 링크를 참조 - https://developer.chrome.com/multidevice/user-agent#webview_user_agent

이 이미 "모바일", "WV"와 같은 사용자 에이전트 문자열에 사용할 수 힌트.

당신은 사용자가 안드로이드 웹보기의 경우 감지

if (strpos($_SERVER['HTTP_USER_AGENT'], 'Mobile') !== false) 

또는

if (strpos($_SERVER['HTTP_USER_AGENT'], 'wv') !== false) 

같은 것을 사용할 수있다.