2013-05-05 17 views
14

iOSとAndroid用のアプリを開発しました。これは、アプリ内ブラウザ(Webview)を使用してWebサーバからHTMLファイルにアクセスします。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']に格納されます。ティム・バンElslooとして

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

すでにHTTPヘッダーを偽造することができ、これは絶対に安全ではありません指摘しました。

+0

他のブラウザからページを開くと、iOsソリューションが失敗します。いくつかのテストの後、少し洗練された。ここをクリック: http:// stackoverflow。com/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)の一部としてアプリの名前とバージョンが送信されます。

その後、アプリ内のWebViewを使用またはいないされているかどうかを確認するためにPHPを使用することができます。

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

私は、Androidが同様に似た何かを考えます。

+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のようなことをしようとすることができます。 com/questions/8487581/uiwebview-ios5-changing-user-agent – elslooo

1

ソリューションコード:AndroidのWebViewのために

$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

、開発者Chromeからリンクを参照してください - https://developer.chrome.com/multidevice/user-agent#webview_user_agent

すでに存在する "モバイル"、 "WV" のようなユーザーエージェント文字列に利用できるヒント。

ユーザーがAndroidのWebViewのであるかどうかを検出するために

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

または

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

のようなものを使用することができます。

関連する問題