Как вообще обнаруживать планшеты Android. Useragent?

103

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

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

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

ClosDesign
источник
2
Я просто догадываюсь, но, может быть, есть способ увидеть, насколько высокое разрешение просмотра?
Phonon
@Phonon, Да, мы пытаемся использовать Javascript для отправки значения res обратно на сервер. Мы пытаемся получить __doPostBack, но это, похоже, не возвращает наше значение. У нас есть скрытое входное значение, оно показывает клиентскую сторону, но мы не получаем его обратно на стороне сервера.
ClosDesign
Не уверен, что смогу вам здесь помочь.
Phonon

Ответы:

112

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

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

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

CommonsWare
источник
3
ты прав. Я просто искал строку, содержащую Android. Мне пришлось искать строку, содержащую Android и! Mobile. Нашел статью Тима Брея об этом.
ClosDesign
6
@yoavf: Похоже, это было исправлено с обновлением XOOM Android 3.1. У меня есть XOOM, и я только что его протестировал - никакого "мобильного".
CommonsWare
27
Это не совсем правильный ответ. Есть довольно много планшетов - даже новейший Kindle Fire - которые сообщают "Mobile" Safari в строке userAgent. На данный момент, похоже, не существует надежного способа обнаружения планшета по сравнению с телефоном, если только это не комбинация userAgent и возможной поддержки определения разрешения.
Vernonk
22
ложный! samsung galaxy tab - очевидный планшет, но в его пользовательском агенте есть
слово
1
Я считаю, что «мобильное» дополнение было с Android 4, есть еще много устройств до 4 ... Для Android 2.x я предполагаю телефон, для 3.x я предполагаю планшет (хотя будет несколько ложных срабатываний) ... в противном случае вы можете проверить мобильность ...
Tracker1 01
20

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

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

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

Mozilla / 5.0 (Linux; U; Android 2.2; en-us; 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; en-us; Xoom Build / HRI39) AppleWebKit / 534.13 (KHTML, как Gecko) Версия / 4.0 Safari / 534.13

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

Bitwalker
источник
1
не могли бы вы опубликовать список устройств, с которыми вы проверяли, и кодировку.
LTech
12

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

Хотя вы можете по-прежнему обнаруживать «android» в User-Agent для реализации специфичных для 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>
Jorgesys
источник
3
Это прекрасно работает. Я добавил это для iPad и iPhone / iPod. else if (userAgent.search("ipad") > -1) document.write("<b> iPad <br>") else if ((userAgent.search("iphone") > -1)||(userAgent.search("ipod") > -1)) document.write("<b> iPhone or iPod <br>")
Спенсер Коул
Как это работает для mozilla / 5.0 (linux; u; android 2.2; en-gb; gt-p1000 build / froyo) applewebkit / 533.1 (khtml, как gecko) version / 4.0 mobile safari / 533.1, в котором есть слово «мобильный» в нем для планшета Samsung Galaxy?
LTech
8

Вы можете попробовать этот скрипт, поскольку вы не хотите ориентироваться только на 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 . Не стесняйтесь задавать вопросы, если что-то не так!

CodeFuze
источник
1
Это не будет работать для версий Android> 3.0, таких как ICS (4.0). Я думаю, что принятый ответ правильный - проверьте, есть ли «Mobile Safari» в пользовательском агенте.
Suman
Не уверен насчет других Kindles, но Kindle Fire 1 НЕ содержит «kindle» в строке пользовательского агента - и не содержит «android»; единственные подсказки - это слова «шелк» и «шелк-ускоренный».
mklement0
6

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

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

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

Суман
источник
Почему бы просто не поискать "Мобильный" в агенте?
Eren Tantekin
Я думаю, что это тоже может сработать, но я думаю, что может быть опасно искать просто «Мобильный» - могут быть устройства с именами, например «HTC Mobile» и т. Д. Я думаю, что это рекомендуемый подход.
Suman
1
Теперь, когда Google выпустил Chrome для Android, ваш подход может стать немного проблематичным. Потому что Chrome на Android будет сообщать о себе как «Chrome Mobile» вместо обычного «Mobile Safari», как это делает стандартный браузер Android. Некоторые официальные рекомендации: developers.google.com/chrome/mobile/docs/user-agent
Eren Tantekin
4

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

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

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

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

Второй:

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

Третий:

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

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

Джалали Шакиб
источник
2

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

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
    }
Regis St-Gelais
источник
2

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

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

D Langhorne
источник
1

Xoom имеет слово Xoom в пользовательском агенте: Mozilla / 5.0 (Linux; U; Android 3.0.1; en-us; Xoom Build / HRI66) AppleWebKit / 534.13 (KHTML, как Gecko) Версия / 4.0 Safari / 534.13

Galaxy Tab имеет "Mobile" в пользовательском агенте: Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, как Gecko) Версия / 4.0 Mobile Safari / 533.1

Итак, Xoom легко обнаружить, но трудно определить, является ли конкретная версия Android мобильной или нет.

Travyo
источник
1

Большинство современных планшетов используют сотовую версию 3.x. По умолчанию на телефонах не установлена ​​версия 3.x. Большинство планшетов, на которых в настоящее время установлена ​​версия 2.x, имеют меньшую емкость и в любом случае могут быть лучше, если будут представлены с мобильным сайтом. Я знаю, что это не безупречно .. но я думаю, что это намного точнее, чем отсутствие мобильного телефона ..

gjr
источник
1
На самом деле телефоны не могут запускать даже 3.x, потому что это был выпуск Android только для планшетов и не был открытым исходным кодом.
Eren Tantekin
1

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

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

GeeItSomeLaldy
источник
1
Opera Mobile не использует слово «мобильный» в строке пользователя, а использует «mobi». Смотрите здесь
Ян Стэнвей
2
Opera Mobile для мобильных устройств содержит «Opera Mobi» в строке пользовательского агента, а Opera Mobile для планшетов содержит «Opera Tablet» в строке пользовательского агента.
tagawa
1

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

гибридный
источник
1

Если использовать отсутствие «Мобильного», то это почти правильно. Но есть HTC Sensation 4G (4,3 дюйма с Android 2.X), который не отправляет ключевое слово Mobile.

Причина, по которой вы можете захотеть лечить его отдельно, связана с iframesт. Д.

зел
источник
0

Бета-версия 51Degrees, 1.0.1.6 и последний стабильный выпуск 1.0.2.2 (28 апреля 2011 г.) теперь имеют возможность сниффинга для планшета. В основном по линиям:

string capability = Request.Browser["is_tablet"];

Надеюсь, это тебе поможет.

Джои Шлухтер
источник
0

Попробуйте OpenDDR , это бесплатно, в отличие от большинства других упомянутых решений.

Вернер Кейл
источник