Не удается обнаружить 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
Ответы
Ответ 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");
У меня была такая же проблема, но я решил таким образом.