19

アプリ内ブラウザー (Webview) を使用して Web サーバーから HTML ファイルにアクセスする iOS および Android 用のアプリを開発しました。

ユーザーがアプリを使用せずにこのファイルにアクセスできるようにしたくありません。ユーザーがアプリを使用してファイルにアクセスしているか、このスマートフォン/タブレット/コンピューターのブラウザーを介して直接アクセスしているかを検出する可能性はありますか? 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)';
}

Android: アプリのパッケージ名は 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 ヘッダーは偽造される可能性があり、これは絶対に安全ではありません。

4

3 に答える 3

8

Android についてはわかりませんが、iOS SDK を使用している場合UIWebView、アプリの名前とバージョンがユーザー エージェント ( ) の一部として送信されますYourApp/1.0

その後、PHP を使用して、アプリ内 WebView が使用されているかどうかを確認できます。

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

Androidも似たようなことをしていると思います。

于 2013-05-05T11:00:40.347 に答える
1

Android WebView については、Developer Chrome からのリンクを参照してください - https://developer.chrome.com/multidevice/user-agent#webview_user_agent

「Mobile」、「wv」などのユーザー エージェント文字列には、既にヒントが用意されています。

次のようなものを使用できます

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

また

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

ユーザーが Android WebView であるかどうかを検出します。

于 2018-01-06T14:30:03.607 に答える