일반적으로 Android 태블릿을 어떻게 감지합니까? 사용자 에이전트?


103

나는 모든 곳을 보았다. 우리는 모토로라 줌을 사용하여 태블릿 사이트 테스트를 시도하고 있습니다. 문제는 Android Useragent가 일반 Useragent이며 태블릿 Android와 모바일 Android간에 차이가 없다는 것입니다. Android가 가까운 장래에 여러 태블릿 장치에있을 가능성이 높기 때문에 Xoom Useragent와 같은 특정 장치 만 대상으로하고 싶지는 않습니다.

우리는 Umbraco CMS를 사용하고 있으며 51Degrees.mobi 솔루션을 사용하는 방법을 살펴 봤지만 현재로서는 우리의 요구에 맞지 않을 것입니다. 아마 미래에는. 나는 51Degrees와 Umbraco의 일부 사람들이 Umbraco에 통합 할 것이라는 것을 알고 있지만, 최종 프로젝트는 아마도 몇 달 동안 나오지 않을 것입니다.
따라서 Android 태블릿의 Useragent 문자열을 감지하고 현재처럼 모바일 사이트로 직접 연결하지 않는 이유는 무엇입니까?

일반적으로 Android 태블릿을 감지하는 방법을 아는 사람이 있다면 특정 기기가 아니라면 매우 도움이 될 것입니다.


2
추측하고 있지만보기 해상도도 얼마나 높은지 확인할 수있는 방법이 있을까요?
Phonon 2011 년

@Phonon, 예, 우리는 res 값을 서버로 다시 보내기 위해 Javascript를 사용하려고합니다. 우리는 __doPostBack을 시도하고 있지만 그것은 우리의 가치를 되돌려 보내지 않는 것 같습니다. 숨겨진 입력 값이 있고 클라이언트 측을 보여 주지만 서버 측에서 다시 가져 오지는 않습니다.
ClosDesign 2011 년

여기서 도와 드릴 수 있을지 모르겠습니다.
Phonon 2011 년

답변:


112

문제는 Android User-Agent가 일반 User-Agent이고 태블릿 Android와 모바일 Android간에 차이가 없다는 것입니다.

이것은 올바르지 않습니다. 모바일 Android는 User-Agent 헤더에 "Mobile"문자열이 있습니다. 태블릿 Android는 그렇지 않습니다.

그러나 userAgent에서 "모바일"Safari를보고하는 태블릿이 꽤 많이 있으며 후자 모바일과 태블릿 을 구별하는 유일하고 확실한 방법이 아니라는 점을 언급 할 가치 가 있습니다 .


3
당신이 올바른지. Android가 포함 된 문자열을 찾고있었습니다. Android와! mobile이 포함 된 문자열을 검색해야했습니다. 이에 대한 Tim Bray의 기사를 찾았습니다.
ClosDesign 2011 년

6
@yoavf : XOOM의 Android 3.1 업데이트로 수정 된 것 같습니다. 저는 XOOM을 소유하고 방금 테스트했습니다. "모바일"은 없습니다.
CommonsWare 2011 년

27
이 대답은 완전히 정확하지 않습니다. userAgent 문자열에 "Mobile"Safari를보고하는 태블릿 (최신 Kindle Fire까지 포함)이 꽤 있습니다. userAgent와 가능한 해상도 감지 지원의 조합이 아니라면 현재로서는 태블릿과 전화를 감지하는 확실한 방법이없는 것 같습니다.
버논 크

22
그릇된! 삼성 갤럭시 탭은 분명한 태블릿이지만 사용자 에이전트에 "모바일"이 있습니다
puchu

1
나는 "모바일"추가가 안드로이드 4에 있었다고 생각한다. 4 이전에는 여전히 많은 장치가있다 ... 안드로이드 2.x의 경우 나는 전화, 3.x의 경우 나는 태블릿으로 가정한다 (몇 가지 오탐이있을 것이지만) ... 그렇지 않으면 모바일 테스트를 할 수 있습니다 ...
Tracker1

20

@Carlos : 그의 기사에서 Tim Bray는 이것을 권장하지만 ( Google의 다른 게시물 과 마찬가지로 ) 불행히도 모든 태블릿 제조업체에서 적용하고 있지는 않습니다.

... 대형 폼 팩터 장치 제조업체는 사용자 에이전트에서 "모바일"을 제거하는 것이 좋습니다.

내가 본 대부분의 Android 태블릿 사용자 에이전트 문자열은 모바일 사파리 (예 : Samsung Galaxy Tab)를 사용합니다.

Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (Gecko와 같은 KHTML) 버전 /4.0 Mobile Safari / 533.1

그래서 현재 Android 태블릿을 감지하기 위해 기기 이름을 확인하고 있습니다. 시장에 몇 가지 모델 만있는 한 괜찮지 만 곧 이것은 추악한 해결책이 될 것입니다.

적어도 XOOM의 경우 모바일 부분이 사라진 것 같습니다.

Mozilla / 5.0 (Linux, U, Android 3.0, en-us, Xoom Build / HRI39) AppleWebKit / 534.13 (Gecko와 같은 KHTML) 버전 /4.0 Safari / 534.13

그러나 현재 Andorid 3.x가 설치된 태블릿 만 있으므로 Android 3에서 확인하는 것으로 충분합니다.


1
확인한 장치 목록과 코딩을 게시 할 수 있습니까?
LTech 2013-08-15

12

"모바일"사용자 에이전트도 감지하는 것이 좋습니다.

터치 스크린 최적화와 같은 Android 관련 기능을 구현하기 위해 User-Agent에서 "android"를 여전히 감지하고 싶을 수 있지만, 우리의 주요 메시지는 다음과 같습니다. 모바일 사이트가 UA 스니핑에 의존하는 경우 "mobile"문자열을 감지하십시오. 그리고 User-Agent에서 "android"가 아닌 "android"가 있습니다. 이는 모바일 및 태블릿 방문자 모두에게 적절하게 서비스를 제공하는 데 도움이됩니다.

브라우저를 통해 Android 장치 감지

 < 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
이것은 완벽하게 작동합니다. iPad 및 iPhone / iPod 용으로 추가했습니다. 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

mozilla / 5.0 (linux; u; android 2.2; en-gb; gt-p1000 build / froyo) applewebkit / 533.1 (khtml, like gecko) 버전 /4.0 mobile safari / 533.1에서 어떻게 작동합니까? 삼성 갤럭시 태블릿을 위해?
LTech

8

Xoom만을 대상으로하지 않기 때문에이 스크립트를 사용해 볼 수 있습니다. Xoom이 없지만 작동합니다.

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

github에서 프로젝트를 만들었습니다. https://github.com/codefuze/js-mobile-tablet-redirect를 확인 하십시오 . 문제가 있으면 언제든지 문제를 제출하십시오!


1
ICS (4.0)와 같은 3.0 이상의 Android 버전에서는 작동하지 않습니다. 받아 들인 대답이 옳다고 생각합니다. "Mobile Safari"가 useragent에 있는지 확인하십시오.
Suman

다른 Kindle에 대해서는 확실하지 않지만 Kindle Fire 1은 사용자 에이전트 문자열에 'kindle'이 없으며 'android'도 포함하지 않습니다. 유일한 단서는 '실크'와 '실크 가속'이라는 단어입니다.
mklement0

6

사용자 에이전트에서 Android를 감지하면 다음과 같이 태블릿과 스마트 폰 브라우저를 구분합니다 (Python을 사용하지만 다른 프로그래밍 언어에서도 비슷하게 간단합니다).

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

업데이트 됨 : 아래 댓글에 따라 Android에서 Chrome 사용을 반영합니다.


에이전트에서 "모바일"을 찾지 않는 이유는 무엇입니까?
Eren Tantekin

그것도 잘 작동 할 것 같지만, "Mobile"만 검색하는 것은 위험 할 수 있다고 생각합니다. "HTC Mobile"과 같은 이름의 장치가있을 수 있습니다. 이것이 권장되는 접근 방식이라고 생각합니다.
Suman

1
이제 Google이 Android 용 Chrome을 출시 했으므로 접근 방식이 약간 문제가 될 수 있습니다. Android의 Chrome은 기본 Android 브라우저가 수행하는 것처럼 일반적인 "Mobile Safari"대신 "Chrome Mobile"로보고되기 때문입니다. 공식 권장 사항 : developers.google.com/chrome/mobile/docs/user-agent
Eren Tantekin

4

이 사이트의 에이전트 문자열을 기반으로 :

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

이 결과가 나왔습니다.
첫째 :

모든 태블릿 장치에는 다음이 있습니다.
1. 태블릿
2. iPad

둘째:

모든 전화 장치에는 다음이 있습니다.
1. 모바일
2. 전화

제삼:

태블릿 및 전화 장치 :
1. Android

수준별로 감지 할 수 있다면 결과는 90 % 사실입니다. SharePoint 장치 채널과 같습니다.


2

내가 사용하는 것은 다음과 같습니다.

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

일부 태블릿이 "모바일"을 생략한다고 말할 수는 없지만 삼성 갤럭시 탭을 포함한 많은 태블릿 자신의 사용자 에이전트에 모바일이 모델의 세부 사항을 확인 의지하지 않고는 불가능 안드로이드 타블렛과 안드로이드 폰 사이에 감지 할 수있다. 이 IMHO는 매월 장치 목록을 업데이트하고 확장 할 계획이없는 한 시간 낭비입니다.

안타깝게도 여기에서 가장 좋은 해결책은 이에 대해 Google에 불만을 제기하고 Android 용 Chrome을 수정하여 휴대 기기와 태블릿간에 식별 할 텍스트를 추가하도록하는 것입니다. 문자열의 특정 위치에 단일 문자 M OR T만으로도 충분하지만 너무 말이되는 것 같습니다.


1

Xoom은 사용자 에이전트에 Xoom이라는 단어가 있습니다. Mozilla / 5.0 (Linux; U; Android 3.0.1; en-us; Xoom Build / HRI66) AppleWebKit / 534.13 (Gecko와 같은 KHTML) 버전 /4.0 Safari / 534.13

Galaxy Tab은 사용자 에이전트에 "Mobile"이 있습니다 : Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, like Gecko) Version / 4.0 Mobile Safari / 533.1

따라서 특정 Android 버전이 모바일인지 여부를 감지하기 어렵고 Xoom을 감지하기가 쉽습니다.


1

대부분의 최신 태블릿은 벌집 일명 3.x를 실행합니다. 기본적으로 3.x를 실행하는 전화기는 없습니다. 현재 2.x를 실행하는 대부분의 태블릿은 용량이 적고 어쨌든 모바일 사이트가 표시 될 때 더 좋을 수 있습니다. 무결점은 아니지만 .. 모바일이없는 것보다 훨씬 더 정확한 것 같아요 ..


1
실제로 휴대폰은 태블릿 전용 Android 릴리스이고 오픈 소스가 아니기 때문에 3.x를 실행할 수 없습니다.
Eren Tantekin 2012

1

Mobile Android는 user-agent 문자열에 "mobile"이있을 수 있지만 태블릿에서 Android 용 Opera Mobile을 사용하는 경우 어떻게됩니까? user-agent 문자열에는 여전히 "mobile"이 있지만 태블릿 크기의 사이트를 표시해야합니다. "mobile"이 아니라 "opera"가 앞에없는 "mobile"을 테스트해야합니다.

아니면 Opera Mobile을 잊어 버릴 수도 있습니다.


1
Opera mobile은 사용자 문자열에 'mobile'을 사용하지 않고 'mobi'를 사용합니다. 보다 여기에
이안 Stanway에게

2
모바일 용 Opera Mobile은 사용자 에이전트 문자열에 "Opera Mobi"가 있지만 태블릿 용 Opera Mobile은 사용자 에이전트 문자열에 "Opera Tablet"이 있습니다.
타가

1

사용자가 태블릿을 사용하는지 감지하기 위해 Categorizr 를 사용하는 것이 좋습니다 . 여기에서 분류기 테스트 결과를 볼 수 있습니다 .


1

"모바일"의 부재를 사용하면 거의 정확합니다. 하지만 모바일 키워드를 보내지 않는 HTC Sensation 4G (안드로이드 2.X의 4.3 인치)가 있습니다.

별도로 취급하고 싶은 이유는 iframes등 때문입니다 .


0

51Degrees 베타, 1.0.1.6 및 최신 안정 릴리스 1.0.2.2 (2011 년 4 월 28 일)는 이제 태블릿에서 스니핑 할 수 있습니다. 기본적으로 :

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

도움이 되었기를 바랍니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.