Не удается обнаружить Android на веб-сервере - программирование

Не удается обнаружить Android на веб-сервере

Очевидным способом обнаружения Android сервером является поиск строки "Android" из HTTP-заголовка User-Agent. Но - у меня были жалобы, что это не работает на некоторых устройствах (например, в моем HTC Evo), они не обнаружены как Android. Whatsmyuseragent.com дает для моего браузера HTC Evo 3D: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, как и Gecko) Chrome/11.0.696.34 Safari/534.24. Нет строки или версии Android. Это может быть программное обеспечение безопасности на устройстве, которое его изменяет, или проблема с HTC, но не уверена в этом.

Очевидно, что у Android Chrome на одном устройстве есть еще один, и лучше UA: Mozilla/5.0 (Linux, Android 4.0.3, HTC EVO 3D X515m Build/IML74K) AppleWebKit/535.19 (KHTML, как и Gecko) Chrome/18.0.1025.166 Mobile Safari/535.19, но я не могу просто надеяться, что, например, Приложение для чтения QR-кода открывает Chrome, а не встроенный браузер Android, который имеет недействительный UA.

Есть ли хороший трюк (javascript call?) для надежного обнаружения Android на устройствах и в браузерах?

Изменить:  похожа на ту же проблему с Galaxy S III, ту же строку User-Agent: Android Browser Detection

4b9b3361

Ответ 1

Похоже, я выбрал "Show Desktop version" в настройках веб-браузера Android. После отключения пользовательский агент находится внутри Android. Это похоже на функцию ICS, HTC не следует обвинять: google для неправильного агента пользователя, который я дал, чтобы увидеть, что это происходит на разных телефонах.

Ответ 2

Для этой конкретной задачи я могу предложить использовать wurfl серверную сторону.

Вы можете обнаружить андроид, сделав что-то очень простое:

$requestingDevice = $wurflManager->getDeviceForHttpRequest($_SERVER);
if ($requestingDevice->getCapability("device_os") == "Android") {
    //the magic
}

Ответ 3

Проверка пользовательского агента всегда была рекомендуемым способом надежного определения пользовательского устройства (по крайней мере, с настройками по умолчанию). Возможно, вы могли бы попытаться сделать ваш поиск более надежным? Mozilla предлагает искать строку "Mobi" .

Ответ 4

То, что я понял из вашей проблемы, заключается в том, что вы получаете агент пользователя на каком-то устройстве, а некоторые из устройств отказываются это делать. поэтому я предполагаю, что у вас есть приложение на устройстве Android, которое вызывает ваш сервер через некоторый веб-сервис и из того, что вы пытаетесь извлечь пользовательский агент. так что решение, которое я вижу здесь, находится в приложении android, добавляет параметр пользовательского агента как из кода, поэтому он будет размещен в HTTP-заголовке, а с сервера вы можете легко извлечь

HttpClient httpclient = new DefaultHttpClient();
httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Android");

У меня была такая же проблема, но я решил таким образом.