Wie erkennt man Android-Tablets im Allgemeinen? User-Agent?

103

Ich habe überall gesucht. Wir verwenden einen Motorola Zoom, um unsere Tablet-Site-Tests zu testen. Das Problem ist, dass der Android Useragent ein allgemeiner Useragent ist und es keinen Unterschied zwischen Tablet Android und Mobile Android gibt. Ich möchte nicht nur auf ein bestimmtes Gerät wie den Xoom Useragent abzielen, da Android in naher Zukunft höchstwahrscheinlich auf mehreren Tablet-Geräten installiert sein wird.

Wir verwenden Umbraco CMS und haben die Verwendung der 51Degrees.mobi-Lösung in Betracht gezogen. Derzeit funktioniert dies nicht für unsere Anforderungen. Vielleicht in der Zukunft. Ich weiß, dass 51Degrees und einige der Leute bei Umbraco eine Integration in Umbraco vornehmen werden, aber das endgültige Projekt wird wahrscheinlich erst in ein paar Monaten veröffentlicht.
Aus diesem Grund möchten wir die Useragent-Zeichenfolge eines Android-Tablets erkennen und sie nicht wie derzeit direkt auf unsere mobile Website übertragen.

Wenn jemand weiß, wie man Android Tablet im Allgemeinen erkennt, wäre nicht das jeweilige Gerät sehr hilfreich.

ClosDesign
quelle
2
Ich rate nur, aber vielleicht gibt es auch eine Möglichkeit zu sehen, wie hoch die Anzeigeauflösung ist?
Phonon
@Phonon, Ja, wir versuchen, mithilfe von Javascript einen Res-Wert an den Server zurückzusenden. Wir versuchen uns ein __doPostBack, aber das scheint unseren Wert nicht zurückzusenden. Wir haben einen versteckten Eingabewert, der clientseitig angezeigt wird, aber nicht serverseitig zurückgegeben wird.
ClosDesign
Ich bin mir nicht sicher, ob ich dir hier helfen kann.
Phonon

Antworten:

112

Das Problem ist, dass der Android User-Agent ein allgemeiner User-Agent ist und es keinen Unterschied zwischen Tablet-Android und mobilem Android gibt.

Das ist falsch. Mobile Android hat eine "Mobile" -String im User-Agent-Header. Tablet Android nicht.

Es ist jedoch erwähnenswert, dass es im userAgent einige Tablets gibt, die "Mobile" Safari melden, und letzteres ist nicht die einzige / solide Möglichkeit, zwischen Mobile und Tablet zu unterscheiden .

CommonsWare
quelle
3
Du hast Recht. Ich habe nur nach einer Zeichenfolge gesucht, die Android enthält. Ich musste nach der Zeichenfolge suchen, die Android und! Mobile enthält. Fand den Artikel von Tim Bray darüber.
ClosDesign
6
@yoavf: Das scheint mit dem Android 3.1-Update von XOOM behoben worden zu sein. Ich besitze ein XOOM und habe es gerade getestet - kein "Handy".
CommonsWare
27
Diese Antwort ist nicht ganz richtig. Es gibt einige Tablets - sogar den neuesten Kindle Fire -, die "Mobile" Safari in der userAgent-Zeichenfolge melden. Derzeit scheint es keine solide Möglichkeit zu geben, Tablet oder Telefon zu erkennen, es sei denn, es handelt sich um eine Kombination aus userAgent und möglicher Unterstützung für die Auflösungserkennung.
Vernonk
22
falsch! Samsung Galaxy Tab ist offensichtlich Tablet, aber es hat "Mobile" in seinem User Agent
Puchu
1
Ich glaube, der "mobile" Zusatz war mit Android 4, es gibt immer noch viele Geräte vor 4 ... Für Android 2.x gehe ich von einem Telefon aus, für 3.x von einem Tablet (obwohl es ein paar Fehlalarme geben wird). ... sonst können Sie für Handy testen ...
Tracker1
20

@Carlos: In seinem Artikel empfiehlt Tim Bray dies (wie auch ein anderer Beitrag von Google ), aber leider wird es nicht von allen Tablet-Herstellern angewendet.

... Wir empfehlen Herstellern von Geräten mit großem Formfaktor, "Mobile" aus dem User Agent zu entfernen ...

Die meisten Benutzer-Agent-Zeichenfolgen für Android-Tablets, die ich gesehen habe, verwenden mobile Safari, z. B. das Samsung Galaxy Tab:

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

Im Moment überprüfe ich die Gerätenamen, um Android-Tablets zu erkennen. Solange es nur wenige Modelle auf dem Markt gibt, ist das in Ordnung, aber bald wird dies eine hässliche Lösung sein.

Zumindest beim XOOM scheint der mobile Teil weg zu sein:

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

Da es derzeit nur Tablets mit Andorid 3.x gibt, würde eine Überprüfung auf Android 3 ausreichen.

Bitwalker
quelle
1
Könnten Sie die Liste der Geräte, gegen die Sie geprüft haben, und die Codierung veröffentlichen?
LTech
12

Mo 'besser auch "mobile" User-Agent zu erkennen

Während Sie möglicherweise immer noch "Android" im User-Agent erkennen möchten, um Android-spezifische Funktionen wie Touchscreen-Optimierungen zu implementieren, lautet unsere Hauptnachricht: Sollte Ihre mobile Website vom UA-Sniffing abhängen, erkennen Sie bitte die Zeichenfolgen "mobil". und "Android" und nicht nur "Android" im User-Agent. Auf diese Weise können Sie sowohl Ihre Handy- als auch Tablet-Besucher ordnungsgemäß bedienen.

Android-Gerät über Browser erkennen

 < 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
quelle
3
Das funktioniert perfekt. Ich habe dies für iPad und iPhone / iPod hinzugefügt. 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
Wie funktioniert es für Mozilla / 5.0 (Linux; U; Android 2.2; En-GB; GT-P1000 Build / Froyo)? drin für das Samsung Galaxy Tablet?
LTech
8

Sie können dieses Skript ausprobieren, da Sie nicht nur auf den Xoom abzielen möchten. Ich habe kein Xoom, sollte aber funktionieren.

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

Ich habe ein Projekt auf Github erstellt. Probieren Sie es aus - https://github.com/codefuze/js-mobile-tablet-redirect . Fühlen Sie sich frei, Probleme einzureichen, wenn etwas nicht stimmt!

CodeFuze
quelle
1
Dies funktioniert nicht für Android-Versionen> 3.0 wie ICS (4.0). Ich denke, die akzeptierte Antwort ist die richtige - prüfen Sie, ob sich "Mobile Safari" im Useragent befindet.
Suman
Ich bin mir bei anderen Kindles nicht sicher, aber der Kindle Fire 1 hat KEIN "Kindle" in seiner User-Agent-Zeichenfolge - und enthält auch kein "Android". Die einzigen Hinweise sind die Wörter "Silk" und "Silk-Accelerated".
mklement0
6

Sobald ich Android im Benutzeragenten erkannt habe, unterscheide ich auf folgende Weise zwischen Tablet- und Smartphone-Browsern (dies verwendet Python, ist aber für andere Programmiersprachen ähnlich einfach):

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

AKTUALISIERT: Um die Verwendung von Chrome unter Android gemäß den Kommentaren unten widerzuspiegeln.

Suman
quelle
Warum nicht einfach im Agenten nach "Mobile" suchen?
Eren Tantekin
Ich denke, das könnte auch funktionieren, aber ich denke, es kann gefährlich sein, nur nach "Mobile" zu suchen - es könnte Geräte mit Namen geben, z. B. "HTC Mobile" usw. Ich denke, dies ist der empfohlene Ansatz.
Suman
1
Nachdem Google Chrome für Android veröffentlicht hat, wird Ihr Ansatz möglicherweise etwas problematisch. Denn Chrome auf Android meldet sich als "Chrome Mobile" anstelle der üblichen "Mobile Safari", wie es der Standard-Android-Browser tut. Für einige offizielle Empfehlungen: developer.google.com/chrome/mobile/docs/user-agent
Eren Tantekin
4

Basierend auf Agentenzeichenfolgen auf dieser Site:

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

Diese Ergebnisse wurden angezeigt:
Erstens:

Alle Tablet-Geräte haben:
1. Tablet
2. iPad

Zweite:

Alle Telefongeräte haben:
1. Handy
2. Telefon

Dritte:

Tablet- und Telefongeräte haben:
1. Android

Wenn Sie Level für Level erkennen können, ist das Ergebnis zu 90 Prozent wahr. Wie SharePoint-Gerätekanäle.

Jalali Shakib
quelle
2

Folgendes benutze ich:

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
quelle
2

Während wir nicht sagen können, ob einige Tablets "mobil" weglassen, tun dies viele, einschließlich des Samsung Galaxy Tab ein Handy in ihrem Benutzeragenten, was es unmöglich macht, zwischen einem Android-Tablet und einem Android-Telefon zu erkennen, ohne die Modellspezifikationen zu überprüfen. Dieses IMHO ist Zeitverschwendung, es sei denn, Sie planen, Ihre Geräteliste monatlich zu aktualisieren und zu erweitern.

Leider besteht die beste Lösung darin, sich bei Google darüber zu beschweren und sie dazu zu bringen, Chrome für Android zu reparieren, damit Text hinzugefügt wird, um zwischen einem mobilen Gerät und einem Tablet zu identifizieren. Zur Hölle, sogar ein einzelner Buchstabe M ODER T an einer bestimmten Stelle in der Zeichenfolge würde ausreichen, aber ich denke, das macht zu viel Sinn.

D Langhorne
quelle
1

Xoom hat das Wort Xoom im Benutzeragenten: Mozilla / 5.0 (Linux; U; Android 3.0.1; en-us; Xoom Build / HRI66) AppleWebKit / 534.13 (KHTML, wie Gecko) Version / 4.0 Safari / 534.13

Galaxy Tab hat "Mobile" im Benutzeragenten: Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, wie Gecko) Version / 4.0 Mobile Safari / 533.1

So ist es einfach, den Xoom zu erkennen, schwer zu erkennen, ob eine bestimmte Android-Version mobil ist oder nicht.

Travyo
quelle
1

Auf den meisten modernen Tablets wird Honeycomb aka 3.x ausgeführt. Standardmäßig laufen keine Telefone mit 3.x. Die meisten Tablets, auf denen derzeit 2.x ausgeführt wird, haben eine geringere Kapazität und sind möglicherweise besser, wenn sie ohnehin mit einer mobilen Site präsentiert werden. Ich weiß, dass es nicht fehlerfrei ist. Aber ich denke, es ist viel genauer als das Fehlen eines Mobiltelefons.

gjr
quelle
1
Tatsächlich können Telefone nicht einmal 3.x ausführen, da es sich um eine reine Tablet-Version von Android handelt und keine Open-Source-Version ist.
Eren Tantekin
1

Während Mobile Android möglicherweise "Mobile" in seiner Benutzeragentenzeichenfolge enthält, was ist, wenn Opera Mobile für Android auf einem Tablet verwendet wird? Die Benutzeragentenzeichenfolge enthält weiterhin "mobil", sollte jedoch Websites in Tablet-Größe anzeigen. Sie müssen auf "mobil" testen, dem nicht "Oper" vorangestellt ist, sondern nur "mobil".

oder Sie könnten Opera Mobile einfach vergessen.

GeeItSomeLaldy
quelle
1
Opera Mobile verwendet nicht 'mobile' in der Benutzerzeichenfolge, sondern 'mobi'. Siehe hier
Ian Stanway
2
Opera Mobile für Handys enthält "Opera Mobi" in der Benutzeragentenzeichenfolge, Opera Mobile für Tablets jedoch "Opera Tablet" in der Benutzeragentenzeichenfolge.
Tagawa
1

Ich würde empfehlen, Categorizr zu verwenden, um festzustellen, ob sich der Benutzer auf einem Tablet befindet. Sie können categorizr Testergebnisse sehen hier .

Hybrid
quelle
1

Wenn Sie das Fehlen von "Mobile" verwenden, ist es fast korrekt. Es gibt jedoch HTC Sensation 4G (4,3 Zoll mit Android 2.X), das kein Mobile-Keyword sendet.

Der Grund, warum Sie es möglicherweise separat behandeln möchten, ist iframesusw.

zel
quelle
0

Die 51Degrees Beta, 1.0.1.6 und die neueste stabile Version 1.0.2.2 (28.04.2011) können jetzt nach Tablets schnüffeln. Grundsätzlich im Sinne von:

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

Hoffe das hilft dir.

Joey Schluchter
quelle
0

Probieren Sie OpenDDR aus , es ist im Gegensatz zu den meisten anderen genannten Lösungen kostenlos.

Werner Keil
quelle