HTML5 Mobile

Die wichtigsten mobilen User Agents

In manchen Fällen ist es notwendig, mobile Devices anhand ihres User Agents zu erkennen (z.B. serverseitige Weiterleitung auf mobile Website). Im Folgenden ein Überblick über die User Agents der populärsten Devices (iOS, Android, BlackBerry, Kindle, Windows Phone).

Zur Erinnerung: Stellt ein Browser einen Request an einen Server, überträgt er seinen Namen („User Agent”) im HTTP-Header. Der Name wird in Form eines Strings übertragen, der z.B. über das Gerät, Betriebssystem und Browser inklusive entsprechender Version Auskunft gibt. Aus historischen Gründen sind auch einige Altlasten enthalten, so beginnen z.B. alle Browser mit Mozilla/5.0, nicht nur Firefox.

User Agent vs. Feature Detection

Grundsätzlich sollte man vorsichtig, einzelne Features und Funktionen anhand des User Agents (UA) auszuliefern. Das Problem hierbei ist, dass ständig neue User Agents im Umlauf sind und es schwierig ist, immer eine aktuelle und korrekte Zuordnung zu gewährleisten.

Sinnvoller ist stattdessen der Ansatz, über eine Feature Detection (z.B. mit der JavaScript-Bibliothek Modernizr) zu prüfen, was der Browser tatsächlich kann. Auch jQuery Mobile bietet eine JavaScript-Funktion gradeA, die zurückgibt, ob ein Device vollständig unterstützt wird und alle benötigten Funktion bietet.

Serverseitige Weiterleitung auf mobile Website

Nichtsdestotrotz gibt es Fälle, in denen man nicht am Auslesen des User Agents vorbeikommt. Hat man z.B. eine Website (www.domain..), die eine Startseite mit hoher Datenmenge besitzt, möchte man mobile Devices beim Aufrufen dieser direkt auf eine mobile Variante weiterleiten (m.domain..). Dies wäre mit einer Feature Detection in JavaScript nur bedingt sinnvoll, da das Device die „schwergewichtige” Startseite herunterladen muss.

Besser ist es, den User Agent serverseitig z.B. über den Apache oder PHP auszulesen und das Device direkt auf die mobile Website weiterzuleiten. So wird nur die mobile und optimierte Startseite mit geringer Datenmenge heruntergeladen, auf der man den Nutzer dann per Dialog noch fragen kann, ob er auch tatsächlich die mobile Website ansehen möchte.

Übersicht der wichtigsten User Agents

Im Folgenden eine Sammlung der wichtigsten User Agents und entsprechender Quellenangaben. Es handelt sich übrigens um Devices, die auch von jQuery Mobile unterstützt werden.

Außerdem habe ich jeweils einige Vorschläge für Regular Expressions hinzugefügt, um den User Agent abzufragen (am Beispiel einer PHP-Konstanten). Zum einen in einer recht einfachen Variante (die im Zweifel eher öfters greift), als auch ein exakteren Variante mit Versionsnummern.

iOS

Der User Agent unterscheidet sich bei den iOS-Geräten nur an der Stelle, die Auskunft über das Gerät (iPod, iPhone, iPad) gibt.

iPhone (Smartphone)

Mozilla/5.0 (iPhone; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5

/*
* Simple:	iPhone
* Exact:	iPhone with iOS 3_2/3_2_ oder higher
*/
const iPhone_simple = "/iPhone/";	
const iPhone_exact = "/iPhone.* (([3]_[2-9](_| ))|([4-9]_[0-9](_| )))/";

iPod (Smartphone)

Mozilla/5.0 (iPod; U; CPU iPhone OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5

iPad (Tablet)

Mozilla/5.0 (iPad; U; CPU OS 4_3_3 like Mac OS X; en-us) AppleWebKit/533.17.9 (KHTML, like Gecko) Version/5.0.2 Mobile/8J2 Safari/6533.18.5

/*
* Simple:	iPad
* Exact:	iPad with iOS 3_2/3_2_ oder higher
*/
const iPad_simple = "/iPad/";	
const iPad_exact = "/iPad.* (([3]_[2-9](_| ))|([4-9]_[0-9](_| )))/";

Link: Apple Safari Web Content Guide

Android

Erwähneswert ist, dass bei Android-Smartphone immer die Kombination Android … Mobile vorkommt, während Android-Tablets lediglich Android (ohne Mobile) haben.

Mozilla/5.0 (Linux; U; Android 2.2.1; en-us; Nexus One Build/FRG83) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

/*
* Simple:	Android
* Exact:	Android Smartphone
*/
const Android_exact = "/Android/";
const Android_exact = "/Android.*Mobile/";

Link: Best Practices for Web Apps

BlackBerry

BlackBerry 6 and 7 (Smartphone)

Mozilla/5.0 (BlackBerry; U; BlackBerry AAAA; en-US) AppleWebKit/534.11+ (KHTML, like Gecko) Version/X.X.X.X Mobile Safari/534.11+

/*
* Simple:	BlackBerry
* Exact:	BlackBerry 6 or higher 
*/
const BlackBerry_simple = "/BlackBerry/";	
const BlackBerry_exact = "/BlackBerry.*Version\/[6-9]\./";

PlayBook (Tablet)

Mozilla/5.0 (PlayBook; U; RIM Tablet OS 1.0.0; en-US) AppleWebKit/534.8+ (KHTML, like Gecko) Version/0.0.1 Safari/534.8+

/*
* Simple:	PlayBook
* Exact:	PlayBook with OS 1.0 or greater
*/
const PlayBook_simple = "/PlayBook/";	
const PlayBook_exact = "/PlayBook.*OS [1-9]\./";

Link: How to detect the BlackBerry Browser

Kindle

Kindle (Tablet)

Mozilla/5.0 (Linux; U; en-US) AppleWebKit/528.5+ (KHTML, like Gecko, Safari/528.5+) Version/4.0 Kindle/3.0 (screen 600×800; rotate)

/*
* Simple:	Kindle
* Exact:	Kindle 3 or higher
*/
const Kindle_simple = "/Kindle/";	
const Kindle_exact = "/Kindle\/[3-9]/";

Kindle Fire (Tablet)

Mozilla/5.0 (Linux; U; Android 2.3.4; en-us; Kindle Fire Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1

const KindleFire_simple = "/Kindle Fire/";

Link: The User Agent String of Kindle Fire Revealed

Opera Mobile

Opera Mobile

Opera/9.80 ($OS; Opera Mobi/$BUILD_NUMBER; U; $LANGUAGE) Presto/$PRESTO_VERSION Version/$VERSION

Link: Opera’s User Agent String

Windows Phone

IE9 on Mango

Mozilla/5.0 (compatible; MSIE 9.0; Windows Phone OS 7.5; Trident/5.0; IEMobile/9.0; <manufacturer>; <model> [;<operator])

/*
* Simple:	Windows Phone
* Exact:	Windows Phone 7 or higher
*/
const WindowsPhone_simple = "/Windows Phone/";	
const WindowsPhone_exact = "/Windows Phone OS [7-9]/";

Link: Introducing the IE9 on Windows Phone “Mango” User Agent String
Link: Introducing IE9’s User Agent String

6 Kommentare zu: Die wichtigsten mobilen User Agents

FranKee
19. Juni 2012, 10:39

a) Sehr cool :)

b) Bei Android ist nicht so ganz klar ob der Muster Header ein Tablett meint oder ein phone (nach genannten regeln wohl ein tablet? Jedenfalls irritiert mich etwas, daß dort AppleWebKit mit drin steht(?) )

Die const zu Android ist falsch benannt und kommentiert (i-phony..)

Ansonsten prima, grad auch die Tablett-unterscheidung… da spricht viel Praxis…

flo
19. Juni 2012, 17:48

Danke. Zu b) Das Beispiel ist ein Smartphone, da es “Mobile” enthält.

Einer der Gründe, was die User Agent Abfrage nach sich zieht, ist, dass in den User Agent immer etwas drin steht was eigentlich nicht reingehört (z.B. Apple WebKit bei Android). Jeder, der etwas Neues bringt, würde zuerst einmal nicht erkannt – es sei denn, er schreibt etwas Vorhandenes rein. Deshalb steht historisch bedingt auch überall “Mozilla” drin …

Den Android-Fehler habe ich korrigiert, danke.

David
19. September 2012, 16:21

Dass bei Android im UA-String “AppleWebKit” steht liegt daran, dass das die genutzte Renderengine ist, welche von der Firma mit dem angebissenen Apfel stammt – der offizielle Name also “AppleWebKit” lautet.

Dag
29. November 2012, 10:37

“bei Android-Smartphone immer die Kombination Android … Mobile” – Beim Kindle Fire haben wir hier eine Ausnahme: es ist ein Tablet und enthält dennoch neben “Android” das alleinstehende Wort “Mobile”. Man müsste also “Kindle Fire” zusätzlich abfragen, um es nicht als Smartphone zu identifizieren?

Jürgen Kühne
30. Januar 2013, 14:05

Dein Blog ist schonmal ein guter Anfang, wenn man etwas über die User-Agents (Browser-Strings) wissen will.

Die Definitionen / Inhalte vom User-Agent verwischen wohl mehr und mehr…
Ich habe ein i.onik-Tablet 10,1 Zoll, Android 4.1.1

Der “normale” vorinstallierter Android-Browser meldet sich so

“Mozilla/5.0 (Linux; U; Android 4.1.1; de-de; TP10.1-1500DC Dark grey metal Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Safari/534.30″ “-”

Dagegen meldet sich der ebenfalls vorinstallierte Chrome-Browser

“Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B367 Safari/531.21.10″

Ich hab aber wirklich kein iPad und auch kein iPhone, auch keine englische Sprache eingestellt.
Deine Unterscheidung auf “Mobile” nur bei Smartphone kann aber “auch” nicht stimmen.

Woher der jeweilige Browser (als Software) die den Agent-Namen herbekommt, ist mir noch schleierhaft. Die Hotline meines Tablet-Herstellers wusste noch nicht, dass sich beide vorinstallierte Browser “anders verhalten” ;-) ) Ich weiss es auch nicht.
Wobei ich nicht böse drum bin, dass beide Browser vorinstalliert waren wie viele andere Dinge auch…

Jürgen

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

*