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.


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.


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.


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>

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!


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.


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.


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
    }

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.


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.


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 ...


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.


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

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.


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.


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.