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.