Як виявити планшети Android взагалі. Корисний реагент?


103

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

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

Якщо хтось знає, як виявити та планшет Android в цілому, не конкретний пристрій був би дуже корисним.


2
Я просто здогадуюсь, але, можливо, є спосіб побачити, наскільки висока роздільна здатність перегляду?
Фонон

@Phonon, так, ми намагаємось використовувати Javascript для повернення значення res на сервер. Ми намагаємось отримати __doPostBack, але це, здається, не повертає наше значення назад. У нас є приховане значення введення, воно показує сторону клієнта, але ми не отримуємо його назад на сервері.
ClosDesign

Не впевнений, чи можу я вам тут допомогти.
Phonon

Відповіді:


112

Проблема полягає в тому, що Android-агент Android є загальним User-Agent і немає різниці між Android-планшетом та мобільним Android.

Це неправильно. Мобільний Android має рядок "Мобільний" у заголовку User-Agent. Планшетний Android ні.

Але варто згадати, що є досить багато планшетів, які повідомляють про "мобільний" Safari в userAgent, і останній не є єдиним / надійним способом розмежування мобільного та планшетного ПК.


3
Ви праві. Я просто шукав рядок, який містить Android. Мені довелося шукати рядок, який містить Android та! Mobile. Про це знайшов статтю Тіма Брей.
ClosDesign

6
@yoavf: Схоже, виправлено оновлення Android 3.1 XOOM. Я є власником XOOM і просто тестував його - не "мобільний".
CommonsWare

27
Ця відповідь не зовсім коректна. Існує досить багато планшетів - навіть найновіший Kindle Fire -, який повідомляє Safari "Mobile" у рядку userAgent. На сьогоднішній день, здається, не існує надійного способу виявлення планшетного ПК та телефону на даний момент, якщо це не поєднання userAgent та можливої ​​підтримки для виявлення роздільної здатності.
вернонк

22
помилковий! вкладка samsung galaxy - це очевидний планшет, але він має "мобільний" у своєму користувальницькому агенті
puchu

1
Я вважаю, що додаток "для мобільних пристроїв" було в Android 4, ще багато пристроїв до 4 ... Для android 2.x я вважаю телефон, для 3.x я припускаю планшет (хоча буде кілька помилкових позитивів) ... інакше ви можете протестувати на мобільний ...
Tracker1

20

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

... Ми рекомендуємо виробникам пристроїв великих форм-факторів видаляти "Мобільний" з Агента користувача ...

Більшість рядків користувачів агентів планшетів Android, яких я бачив, використовують мобільне сафарі, наприклад, Samsung 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 буде достатньо.


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>

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) версія / 4.0 мобільний 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 . Не соромтеся подавати питання, якщо щось не так!


1
Це не працюватиме для версій Android> 3.0, таких як ICS (4.0). Я вважаю, що прийнята відповідь є правильною - перевірте, чи є «Мобільний сафарі» у корисному засобі.
Суман

Не впевнений в інших Kindles, але Kindle Fire 1 НЕ має "запалу" в його рядку користувача-агента - а також не містить "android"; єдині підказки - це слова «Шовк» та «Шовковий прискорений».
mklement0

6

Як тільки я виявив Android у користувальницькому агенті, саме так я розрізняю браузери планшетів та смартфонів (для цього використовується Python, але це так само просто для інших мов програмування):

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

ОНОВЛЕНО: відображати використання Chrome на Android, відповідно до коментарів нижче.


Чому б просто не шукати "Мобільний" в агенті?
Ерен Тантекін,

Я думаю, що це може також працювати, але я думаю, що це може бути небезпечно шукати лише "Мобільний" - там можуть бути пристрої з іменами, скажімо, "HTC Mobile" тощо. Я думаю, що це рекомендований підхід.
Суман

1
Тепер, коли Google випустила Chrome для Android, ваш підхід може стати трохи проблематичним. Тому що Chrome на Android вважатиме себе "Chrome Mobile" замість звичного "Mobile Safari", як це робить браузер Android. Деякі офіційні рекомендації: developers.google.com/chrome/mobile/docs/user-agent
Ерен Тантекін

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
    }

2

Поки ми не можемо сказати , якщо деякі таблетки опустити «мобільними», багато в тому числі Samsung Galaxy Tab зробити мають мобільний телефон у своєму користувальницькому агенті, що робить неможливим виявлення між планшетом Android та android телефоном, не вдаючись до перевірки специфіки моделі. Цей IMHO - це марна трата часу, якщо ви не плануєте оновлювати та розширювати список своїх пристроїв щомісяця.

На жаль, найкраще рішення тут скаржитися на це в Google та змусити їх виправити Chrome для Android, щоб він додав текст для ідентифікації мобільного пристрою та планшета. Пекло навіть однієї літери M OR T у певному місці рядка було б достатньо, але я думаю, це має занадто великий сенс.


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 має "Мобільний" в користувальницькому агенті: 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 мобільна чи ні.


1

У більшості сучасних планшетів працює стільниця ака 3.x Немає телефонів, які працюють за замовчуванням 3.x. Більшість планшетів, які зараз працюють у форматі 2.x, мають меншу ємність і можуть бути кращими, коли вони в будь-якому разі представлені з мобільним сайтом. Я знаю, що це не бездоганно .. але, мабуть, це набагато точніше, ніж відсутність мобільних ..


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

1

Хоча мобільний Android може мати "мобільний" в його рядку-агента користувача, що робити, якщо він використовує Opera Mobile для Android на планшеті? Він все ще матиме "мобільний" в його рядку з користувацьким агентом, але має відображати сайти розміром планшетного ПК. Вам потрібно буде перевірити "мобільний", якому не передує "опера", а не просто "мобільний"

або ви могли просто забути про Opera Mobile.


1
Opera mobile не використовує "mobile" в рядку користувача, він використовує "mobi". Дивіться тут
Ian Stanway

2
Opera Mobile для мобільних пристроїв має "Opera Mobi" в рядку агента користувача, але Opera Mobile для планшетів має "Opera Tablet" в рядку агента користувача.
tagawa

1

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


1

Якщо ви використовуєте відсутність "Мобільного", то це майже правильно. Але є HTC Sensation 4G (4,3 дюйма з android 2.X), який не надсилає ключове слово для мобільних пристроїв.

Причина, через яку ви можете розглянути це окремо, пов’язана з iframesтощо.


0

У бета-версії 51Degrees, 1.0.1.6 та останньому стабільному випуску 1.0.2.2 (28.04.2011) тепер є можливість нюхати планшет. В основному по лінії:

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

Сподіваюся, це вам допоможе.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.