Обнаружение браузера в приложении (WebView) с помощью PHP / Javascript

Я разработал приложение для iOS и Android, которое обращается к файлу HTML с моего веб-сервера с помощью браузера в приложении (Webview).

Я не хочу, чтобы пользователь мог получить доступ к этому файлу без использования приложения. Есть ли возможность обнаружить, если пользователь обращается к файлу с приложением или напрямую через браузер на этом смартфоне / планшете / компьютере? Я думаю, что решение с PHP намного лучше, потому что Javascript можно отключить. По крайней мере, Google Analytics может различать 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)'; } 

Поскольку Тим ван Эльслоу уже заметил, что заголовки HTTP могут быть подделаны, и это не совсем безопасно.

Я не уверен в Android, но когда вы используете UIWebView iOS SDK, он отправляет имя и версию вашего приложения как часть пользовательского агента ( YourApp/1.0 ).

Затем вы можете использовать PHP, чтобы проверить, используется ли ваш веб-просмотр в приложении или нет:

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

Я думаю, что Android тоже делает что-то похожее.

Код решения:

 $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;