Как обнаружить планшеты Android в целом. UserAgent? - PullRequest
102 голосов
/ 17 марта 2011

Я посмотрел везде. Мы используем Motorola Zoom для тестирования нашего планшета. Проблема заключается в том, что Android Useragent является обычным Useragent, и между планшетным Android и мобильным Android нет никакой разницы. Я не хочу ориентироваться только на определенное устройство, например на Xoom Useragent, поскольку в ближайшем будущем Android, скорее всего, будет на нескольких планшетных устройствах.

Мы используем Umbraco CMS, и мы рассмотрели использование решения 51Degrees.mobi, и в данный момент это не будет работать для наших нужд. Может быть в будущем. Я знаю, что 51 градус и некоторые сотрудники Umbraco собираются интегрироваться в Umbraco, но окончательный проект, вероятно, не будет готов в течение нескольких месяцев.
Следовательно, почему мы хотели бы обнаружить строку Useragent на планшете Android и не направлять ее на наш мобильный сайт, как в настоящее время.

Если кто-то знает, как обнаружить Android и планшет в целом, не конкретное устройство будет очень полезным.

Ответы [ 15 ]

111 голосов
/ 17 марта 2011

Проблема в том, что пользовательский агент Android является обычным пользовательским агентом, и между планшетным Android и мобильным Android нет никакой разницы.

Это неверно. Мобильный Android имеет строку «Mobile» в заголовке User-Agent. Планшета Android нет.

Но стоит упомянуть , что существует довольно много планшетов, которые сообщают о «мобильном» Safari в userAgent, и последний - не единственный / надежный способ дифференцировать между мобильным и планшет.

20 голосов
/ 08 апреля 2011

@ Карлос: В своей статье Тим Брэй рекомендует это (как и другой пост от Google ), но, к сожалению, он применяется не всеми производителями планшетов.

... Мы рекомендуем производителям устройств большого форм-фактора удалить «Мобильный» из User Agent ...

Большинство строк пользовательских планшетов Android, которые я видел, используют мобильное сафари, например, вкладка Samsung Galaxy:

Mozilla / 5.0 (Linux; U; Android 2.2; ru-ru; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, как Gecko) Версия / 4.0 Mobile Safari / 533.1

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

По крайней мере, в случае XOOM мобильная часть, кажется, исчезла:

Mozilla / 5.0 (Linux; U; Android 3.0; ru-ru; Xoom Build / HRI39) AppleWebKit / 534.13 (KHTML, как Gecko) Версия / 4.0 Safari / 534.13

Но поскольку в настоящее время есть только планшеты с Andorid 3.x, проверки на Android 3 будет достаточно.

12 голосов
/ 14 октября 2011

Мо 'лучше также обнаруживать «мобильный» пользовательский агент

Хотя вы все еще можете обнаружить «android» в User-Агент для реализации специфичных для Android функций, таких как оптимизация сенсорного экрана, наше основное сообщение: если ваш мобильный сайт зависит от сниффинга UA, пожалуйста, определите строки «mobile» и «android», а не просто «android» вUser-Agent.Это помогает правильно обслуживать посетителей вашего мобильного телефона и планшета.

Обнаружение устройства Android через браузер

 < script language="javascript"> <!--
     var mobile = (/iphone|ipad|ipod|android|blackberry|mini|windows\sce|palm/i.test(navigator.userAgent.toLowerCase()));
              if (mobile) {
                  alert("MOBILE DEVICE DETECTED");
                  document.write("<b>----------------------------------------<br>")
                  document.write("<b>" + navigator.userAgent + "<br>")
                  document.write("<b>----------------------------------------<br>")
                  var userAgent = navigator.userAgent.toLowerCase();
                  if ((userAgent.search("android") > -1) && (userAgent.search("mobile") > -1))
                         document.write("<b> ANDROID MOBILE <br>")
                   else if ((userAgent.search("android") > -1) && !(userAgent.search("mobile") > -1))
                       document.write("<b> ANDROID TABLET <br>")
              }
              else
                  alert("NO MOBILE DEVICE DETECTED"); //--> </script>
8 голосов
/ 31 декабря 2011

Вы можете попробовать этот скрипт, так как вы не хотите нацеливаться только на Xoom. У меня нет Xoom, но должен работать.

function mobile_detect(mobile,tablet,mobile_redirect,tablet_redirect,debug) {
var ismobile = (/iphone|ipod|android|blackberry|opera|mini|windows\sce|palm|smartphone|iemobile/i.test(navigator.userAgent.toLowerCase()));
var istablet = (/ipad|android|android 3.0|xoom|sch-i800|playbook|tablet|kindle/i.test(navigator.userAgent.toLowerCase()));

if (debug == true) {
    alert(navigator.userAgent);
}

if (ismobile && mobile==true) {
    if (debug == true) {
        alert("Mobile Browser");
    }
    window.location = mobile_redirect;
} else if (istablet && tablet==true) {
    if (debug == true) {
        alert("Tablet Browser");
    }
    window.location = tablet_redirect;
}
}

Я создал проект на github. Проверьте это - https://github.com/codefuze/js-mobile-tablet-redirect. Не стесняйтесь задавать вопросы, если что-то не так!

6 голосов
/ 29 марта 2012

После того, как я обнаружил Android в пользовательском агенте, я различаю браузеры для планшетов и смартфонов (это использует Python, но аналогично прост для других языков программирования):

if ("Android" in agent):
  if ("Mobile" in agent):
    deviceType = "Phone"
  else:
    deviceType = "Tablet"

ОБНОВЛЕНО:чтобы отразить использование Chrome на Android согласно комментариям ниже.

3 голосов
/ 23 сентября 2015

На основе строк Агентов на этом сайте:

http://www.webapps-online.com/online-tools/user-agent-strings

Получены следующие результаты:
Первое:

Все планшетные устройства имеют:
1. Планшет
2. iPad

Второй:

Все телефонные устройства имеют:
1. Мобильный
2. Телефон

Третий:

Планшетные и телефонные устройства имеют:
1. Android

Если вы можете определять уровень за уровнем, то я считаю, что результат равен 90%,Как каналы устройств SharePoint.

2 голосов
/ 27 июля 2012

Хотя мы не можем сказать, что в некоторых планшетах отсутствует «мобильный», многие, в том числе Samsung Galaxy Tab do , имеют мобильный агент в своем пользовательском агенте, что делает невозможным обнаружение между планшетом Android и телефоном Android не прибегая к проверке специфики модели. Это ИМХО - пустая трата времени, если вы не планируете ежемесячно обновлять и расширять список своих устройств.

К сожалению, лучшим решением здесь является пожаловаться Google на это и заставить их исправить Chrome для Android, чтобы он добавил текст для идентификации между мобильным устройством и планшетом. Черт возьми, даже одной буквы M ИЛИ T в определенном месте строки будет достаточно, но я думаю, в этом слишком много смысла.

2 голосов
/ 11 апреля 2012

Вот что я использую:

public static boolean onTablet()
    {
    int intScreenSize = getResources().getConfiguration().screenLayout & Configuration.SCREENLAYOUT_SIZE_MASK;

    return (intScreenSize == Configuration.SCREENLAYOUT_SIZE_LARGE) // LARGE
    || (intScreenSize == Configuration.SCREENLAYOUT_SIZE_LARGE + 1); // Configuration.SCREENLAYOUT_SIZE_XLARGE
    }
1 голос
/ 01 марта 2012

Я бы рекомендовал использовать Категоризр , чтобы определить, находится ли пользователь на планшете. Вы можете посмотреть результаты теста категоризации здесь .

1 голос
/ 15 декабря 2011

Несмотря на то, что Mobile Android может иметь «mobile» в строке пользовательского агента, что, если он использует Opera Mobile для Android на планшете? В строке user-agent он все еще будет содержать «mobile», но должен отображать сайты размером с планшет. Вам нужно будет проверить «мобильный», которому предшествует «опера», а не просто «мобильный»

или вы можете просто забыть об Opera Mobile.

...