Jak ogólnie wykrywać tablety z Androidem. Agent użytkownika?

103

Szukałem wszędzie. Używamy Motorola Zoom, aby wypróbować naszą witrynę internetową dla tabletów. Problem polega na tym, że Android Useragent jest ogólnym Useragentem i nie ma różnicy między Androidem tabletu a Androidem mobilnym. Nie chcę tylko kierować reklamy na określone urządzenie, takie jak Xoom Useragent, ponieważ Android najprawdopodobniej będzie w najbliższej przyszłości na wielu tabletach.

Używamy Umbraco CMS i patrzyliśmy na użycie rozwiązania 51Degrees.mobi, i w tej chwili nie będzie to działać dla naszych potrzeb. Może w przyszłości. Wiem, że 51Degrees i niektórzy ludzie w Umbraco zamierzają przeprowadzić integrację z Umbraco, ale ostateczny projekt prawdopodobnie nie będzie dostępny przez kilka miesięcy.
Dlatego chcielibyśmy wykryć ciąg Useragent tabletu z Androidem i nie kierować go do naszej witryny mobilnej, jak to jest obecnie.

Jeśli ktoś wie, jak wykryć i ogólnie tablet z Androidem, nie konkretne urządzenie byłoby bardzo pomocne.

ClosDesign
źródło
2
Zgaduję, ale może jest sposób, aby sprawdzić, jak wysoka jest rozdzielczość oglądania?
Phonon
@Phonon, Tak, próbujemy użyć Javascript do wysłania wartości res z powrotem na serwer. Próbujemy uzyskać __doPostBack, ale wygląda na to, że nie odsyła to naszej wartości. Mamy ukrytą wartość wejściową, pokazuje ona stronę klienta, ale nie otrzymujemy jej po stronie serwera.
ClosDesign
Nie jestem pewien, czy mogę Ci tutaj pomóc.
Phonon

Odpowiedzi:

112

Problem polega na tym, że Android User-Agent to ogólny User-Agent i nie ma różnicy między Androidem tabletu a Androidem mobilnym.

To jest niepoprawne. Mobilny system Android ma ciąg „Mobile” w nagłówku User-Agent. Tablet z Androidem nie.

Ale warto wspomnieć , że istnieje sporo tabletek, że raport „Mobile” Safari w userAgent a ten ostatni nie jest jedynym / ciało stałe sposobem odróżnienia między komórki i tablety.

CommonsWare
źródło
3
masz rację. Szukałem tylko ciągu zawierającego Androida. Musiałem wyszukać ciąg zawierający Androida i! Mobile. Znalazłem artykuł Tima Braya na ten temat.
ClosDesign
6
@yoavf: Wygląda na to, że zostało to naprawione w aktualizacji XOOM do Androida 3.1. Mam XOOM i właśnie go przetestowałem - bez „telefonu”.
CommonsWare
27
Ta odpowiedź nie jest całkowicie poprawna. Jest sporo tabletów - nawet najnowszy Kindle Fire - które raportują „Mobile” Safari w ciągu userAgent. Wydaje się, że w tej chwili nie ma solidnego sposobu na wykrycie tabletu w porównaniu z telefonem, chyba że jest to połączenie userAgent i możliwej obsługi wykrywania rozdzielczości.
vernonk,
22
fałszywe! Samsung galaxy tab to oczywisty tablet, ale ma w swoim
kliencie
1
Wydaje mi się, że dodatek „mobilny” był z Androidem 4, wciąż jest wiele urządzeń przed 4 ... Dla Androida 2.x zakładam telefon, dla 3.x zakładam tablet (choć będzie kilka fałszywych alarmów) ... w przeciwnym razie możesz przetestować na telefonie komórkowym ...
Tracker1
20

@Carlos: W swoim artykule Tim Bray zaleca to (podobnie jak inny post Google ), ale niestety nie jest to stosowane przez wszystkich producentów tabletów.

... Zalecamy, aby producenci urządzeń wielkoformatowych usunęli „Mobile” z agenta użytkownika ...

Większość ciągów agentów użytkownika tabletów z Androidem, które widziałem, używa mobilnego safari, np. Samsung Galaxy Tab:

Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, jak Gecko) Wersja / 4.0 Mobile Safari / 533.1

W tej chwili sprawdzam nazwy urządzeń, aby wykryć tablety z Androidem. Tak długo, jak na rynku jest tylko kilka modeli, to jest w porządku, ale wkrótce będzie to brzydkie rozwiązanie.

Przynajmniej w przypadku XOOM wydaje się, że część mobilna zniknęła:

Mozilla / 5.0 (Linux; U; Android 3.0; en-us; Xoom Build / HRI39) AppleWebKit / 534.13 (KHTML, jak Gecko) Wersja / 4.0 Safari / 534.13

Ale ponieważ obecnie istnieją tylko tablety z Andoridem 3.x, wystarczy sprawdzić system Android 3.

Bitwalker
źródło
1
czy możesz opublikować listę sprawdzonych urządzeń i kodowania.
LTech
12

Lepiej też wykryć „mobilnego” klienta użytkownika

Chociaż nadal możesz chcieć wykryć „android” w kliencie użytkownika, aby zaimplementować funkcje specyficzne dla Androida, takie jak optymalizacja ekranu dotykowego, nasz główny komunikat brzmi: Jeśli Twoja witryna mobilna zależy od wykrywania UA, wykryj ciągi „mobile” i „android” zamiast „android” w User-Agent. Pomaga to prawidłowo obsługiwać zarówno użytkowników telefonów komórkowych, jak i tabletów.

Wykrywanie urządzenia z systemem Android za pomocą przeglądarki

 < 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
źródło
3
To działa doskonale. Dodałem do tego dla iPada i iPhone'a / iPoda. 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>")
Spencer Cole
Jak to działa w przypadku mozilla / 5.0 (linux; u; android 2.2; en-gb; gt-p1000 build / froyo) applewebkit / 533.1 (khtml, jak gecko) wersja / 4.0 mobile safari / 533.1, która ma słowo „mobile” w tym dla tabletu Samsung Galaxy?
LTech
8

Możesz wypróbować ten skrypt, ponieważ nie chcesz kierować tylko na Xoom. Nie mam Xoom, ale powinno działać.

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;
}
}

Stworzyłem projekt na githubie. Sprawdź to - https://github.com/codefuze/js-mobile-tablet-redirect . Jeśli coś jest nie tak, możesz zgłaszać problemy!

CodeFuze
źródło
1
To nie zadziała dla wersji Androida> 3.0, takich jak ICS (4.0). Myślę, że zaakceptowana odpowiedź jest właściwa - sprawdź, czy w useragencie jest „Mobile Safari”.
Suman
Nie jestem pewien co do innych Kindle, ale Kindle Fire 1 NIE ma słowa „kindle” w ciągu agenta użytkownika - ani nie zawiera „android”; jedynymi wskazówkami są słowa „Silk” i „Silk-Accelerated”.
mklement0
6

Po wykryciu Androida w kliencie użytkownika rozróżniam przeglądarki tabletów i smartfonów (jest to Python, ale jest podobnie proste w przypadku innych języków programowania):

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

AKTUALIZACJA: aby odzwierciedlić korzystanie z Chrome na Androidzie, zgodnie z komentarzami poniżej.

Suman
źródło
Dlaczego nie poszukać po prostu „Mobile” w agencie?
Eren Tantekin
Myślę, że to również może zadziałać, ale myślę, że wyszukiwanie samego hasła „telefon komórkowy” może być niebezpieczne - mogą istnieć urządzenia z nazwami, na przykład „HTC Mobile” itp. Myślę, że jest to zalecane podejście.
Suman
1
Teraz, gdy Google wypuściło Chrome na Androida, Twoje podejście może być trochę problematyczne. Ponieważ przeglądarka Chrome na Androida zgłosi się jako „Chrome Mobile”, a nie zwykłe „Mobile Safari”, jak robi to standardowa przeglądarka Androida. Aby uzyskać oficjalne zalecenia: developers.google.com/chrome/mobile/docs/user-agent
Eren Tantekin
4

Na podstawie ciągów agentów w tej witrynie:

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

Oto wyniki:
Po pierwsze:

Wszystkie tablety mają:
1. Tablet
2. iPad

Druga:

Wszystkie urządzenia telefoniczne mają:
1. Telefon komórkowy
2. Telefon

Trzeci:

Tablety i telefony mają:
1. Android

Jeśli potrafisz wykryć poziom po poziomie, wydaje mi się, że wynik jest prawdziwy w 90%. Podobnie jak kanały urządzeń SharePoint.

Jalali Shakib
źródło
2

Oto czego używam:

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
źródło
2

Chociaż nie możemy powiedzieć, czy niektóre tablety pomijają „telefon komórkowy”, wiele z nich, w tym Samsung Galaxy Tab , ma telefon komórkowy w swoim kliencie użytkownika, co uniemożliwia wykrycie między tabletem z Androidem a telefonem z Androidem bez konieczności sprawdzania szczegółów modelu. To IMHO to strata czasu, chyba że planujesz aktualizować i rozszerzać listę urządzeń co miesiąc.

Niestety najlepszym rozwiązaniem jest złożenie skargi do Google i nakłonienie ich do naprawy Chrome dla Androida, aby dodać tekst do identyfikacji między urządzeniem mobilnym a tabletem. Do diabła, wystarczyłaby nawet jedna litera M LUB T w określonym miejscu w ciągu, ale myślę, że to ma zbyt duży sens.

D Langhorne
źródło
1

Xoom ma słowo Xoom w user-agent: Mozilla / 5.0 (Linux; U; Android 3.0.1; en-us; Xoom Build / HRI66) AppleWebKit / 534.13 (KHTML, jak Gecko) Version / 4.0 Safari / 534.13

Galaxy Tab ma „Mobile” w kliencie użytkownika: Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, jak Gecko) Version / 4.0 Mobile Safari / 533.1

Tak więc łatwo jest wykryć Xoom, trudne do wykrycia, czy określona wersja Androida jest mobilna, czy nie.

travyo
źródło
1

Większość nowoczesnych tabletów działa domyślnie na plaster miodu, czyli w wersji 3.x. Żaden telefon nie obsługuje domyślnie wersji 3.x. Większość tabletów, które obecnie działają w wersji 2.x, ma mniejszą pojemność i mimo to może być lepsza, gdy zostanie wyświetlona strona mobilna. Wiem, że to nie jest bezbłędne ... ale wydaje mi się, że jest o wiele dokładniejsze niż brak telefonu komórkowego ...

gjr
źródło
1
W rzeczywistości telefony nie mogą nawet działać w wersji 3.x, ponieważ była to wersja Androida przeznaczona tylko na tablety i nie była to wersja open source.
Eren Tantekin
1

Chociaż Mobile Android może mieć słowo „mobile” w swoim ciągu klienta użytkownika, co zrobić, jeśli używa Opera Mobile dla Androida na tablecie? Nadal będzie zawierał słowo „mobile” w swoim ciągu klienta użytkownika, ale powinien wyświetlać witryny wielkości tabletu. Musisz przetestować pod kątem „urządzenia przenośnego”, które nie jest poprzedzone słowem „opera”, a nie tylko „telefon komórkowy”

lub możesz po prostu zapomnieć o Operze Mobile.

GeeItSomeLaldy
źródło
1
Opera mobile nie używa słowa „mobile” w ciągu użytkownika, używa „mobi”. Zobacz tutaj
Ian Stanway
2
Opera Mobile na telefony komórkowe ma „Opera Mobi” w ciągu agenta użytkownika, ale Opera Mobile na tablety ma „Opera Tablet” w ciągu agenta użytkownika.
tagawa
1

Polecam użycie Categorizr do wykrywania, czy użytkownik korzysta z tabletu. Możesz wyświetlić wyniki testu Categorizr tutaj .

hybrydowy
źródło
1

Jeśli używasz braku „Mobile”, to jest prawie poprawne. Ale są HTC Sensation 4G (4,3 cala z Androidem 2.X), który nie wysyła słowa kluczowego Mobile.

Powodem, dla którego możesz chcieć traktować go osobno, jest iframesitp.

zel
źródło
0

51Degrees beta, 1.0.1.6 i najnowsza stabilna wersja 1.0.2.2 (28.04.2011) mają teraz możliwość wykrywania tabletu. Zasadniczo na wzór:

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

Mam nadzieję, że to ci pomoże.

Joey Schluchter
źródło
0

Wypróbuj OpenDDR , jest darmowy w przeciwieństwie do większości innych wymienionych rozwiązań.

Werner Keil
źródło