2013-02-01 15 views
14

Oczywistym sposobem wykrywania Androida na serwerze jest wyszukanie ciągu "Android" z nagłówka HTTP User-Agent. Ale - Miałem skargi, że to nie działa na niektórych urządzeniach (np. W moim HTC Evo), nie są wykrywane jako Android. whatsmyuseragent.com podaje dla mojej przeglądarki internetowej HTC Evo 3D: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, jak Gecko) Chrome/11.0.696.34 Safari/534.24. Brak ciągów lub wersji Androida. Może to być oprogramowanie zabezpieczające na urządzeniu, które je zmienia, lub problem specyficzny dla HTC, nie jest pewien.Nie można wykryć Androida na serwerze WWW

Oczywiście Android Chrome na tym samym urządzeniu jest inny i lepszy UA: Mozilla/5.0 (Linux; Android 4.0.3; HTC EVO 3D X515m Build/IML74K) AppleWebKit/535,19 (KHTML, like Gecko) Chrome/18,0. 1025.166 Mobile Safari/535.19, ale nie mogę po prostu mieć nadziei, że np. Aplikacja czytnika kodów QR otwiera Chrome, a nie wbudowaną przeglądarkę systemu Android, która ma nieprawidłowy adres UA.

Czy istnieje dobra sztuczka (wywołanie javascript?), Aby wykrywać niezawodny system Android na urządzeniach i przeglądarkach?

Edit: wygląda sam problem z Galaxy S III, sam ciąg User-Agent: Android Phone Browser Detection

+0

Nie rozwiązuje to twojego problemu, ale może możesz poszukać rozwiązania przeglądarki wraz z User-Agent? – RMalke

+1

Może dałoby to dodatkowe informacje, ale chciałbym użyć trochę gotowego i mniej lub bardziej kuloodpornego rozwiązania, zamiast rozpoczynać zarządzanie bazą danych urządzeń z różnymi identyfikatorami użytkownika/kolejnymi kombinacjami nagłówków. – JaakL

Odpowiedz

8

Wygląda na to, że wybrałem opcję "Pokaż wersję pulpitu" w ustawieniach przeglądarki internetowej systemu Android. Po wyłączeniu agent użytkownika jest w systemie Android. Wydaje się, że jest to funkcja ICS, nie należy obwiniać HTC: google za niewłaściwego agenta użytkownika dałem do zrozumienia, że ​​dzieje się to na wielu różnych telefonach.

2

dla tego konkretnego zadania, mogę zasugerować używając wurfl po stronie serwera.

Można wykryć androida robiąc coś bardzo proste:

$requestingDevice = $wurflManager->getDeviceForHttpRequest($_SERVER); 
if ($requestingDevice->getCapability("device_os") == "Android") { 
    //the magic 
} 
+1

Jestem bardzo sceptyczny, jeśli wurfl użyje czegoś lepszego niż User-Agent, więc prawdopodobnie nie zadziała. Testowałem z t.wurfl.com i to nie wyjawiło device_os – JaakL

+0

Widzę, co masz na myśli - moje badania wskazują, że jeśli "orientacja" jest zdefiniowana, a także "ontouchstart" - i NIE jest to telefon iPhone, BlackBerry lub Windows od agenta użytkownika, może Załóżmy, że to prawdopodobnie android - ale niestety, jest to tak dokładne, jak można uzyskać, jeśli nie wysyłają swojego właściwego UA :( –

0

Co zrozumiałem z twojego problemu jest otrzymujesz agenta użytkownika na jakimś urządzeniu i na niewiele urządzenia odmawiając tego. więc zakładam, że masz aplikację na urządzeniu z Androidem, która wywołuje twój serwer przez jakiś serwis internetowy i od którego próbujesz wyodrębnić klienta użytkownika. więc jakie rozwiązanie widzę tutaj jest w Android dodać parametr agenta użytkownika od kodu tak zostanie on opublikowany w nagłówku HTTP i od serwera można wyodrębnić że łatwo

HttpClient httpclient = new DefaultHttpClient(); 
httpclient.getParams().setParameter(CoreProtocolPNames.USER_AGENT, "Android"); 

miałem ten sam problem, ale ja rozwiązany w ten sposób.

+0

Kilka razy stwierdza w pytaniu, że chce wykryć urządzenia z Androidem w przeglądarce, a nie przez zużywając usługę sieciową – crazylpfan

+0

Następnie napisz mały program narzędziowy z podglądem, który będzie wywoływał natywną wersję kompilacji Androida, która potwierdza, że ​​jest to urządzenie z Androidem. Android.os.Build.VERSION. –

+1

Przypadek użycia jest w rzeczywistości dla kodu QR do pobrania aplikacji: oryginalny problem jest ten czytnik QR z przeglądarką internetową nie został wykryty poprawnie, jakiekolwiek dodatkowe narzędzie do tego byłoby bezcelowe – JaakL

1

Sprawdzanie agenta użytkownika zawsze było zalecanym sposobem niezawodnego określenia urządzenia użytkownika (przynajmniej z ustawieniami domyślnymi). Być może mógłbyś spróbować poprawić swoje wyszukiwanie? Mozilla sugeruje wyszukiwanie ciągu znaków "Mobi" zamiast tego.

+2

Podałem próbkę agenta użytkownika: "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.24 (KHTML, jak Gecko) Chrome/11.0.696.34 Safari/534.24". Nie ma Mobi, Androida itp – JaakL

Powiązane problemy