วิธีตรวจหาแท็บเล็ต Android โดยทั่วไป Useragent?


103

ฉันได้ดูทุกที่ เรากำลังใช้ Motorola Zoom เพื่อลองทดสอบไซต์แท็บเล็ตของเรา ปัญหาคือ Android Useragent เป็น Useragent ทั่วไปและไม่มีความแตกต่างระหว่างแท็บเล็ต Android และ Android บนมือถือ ฉันไม่ต้องการเพียงแค่กำหนดเป้าหมายอุปกรณ์เฉพาะเช่น Xoom Useragent เนื่องจาก Android มักจะอยู่ในอุปกรณ์แท็บเล็ตหลายเครื่องในอนาคตอันใกล้นี้

เรากำลังใช้ Umbraco CMS และเราได้ดูการใช้โซลูชัน 51Degrees.mobi และในขณะนี้สิ่งนี้จะไม่ได้ผลสำหรับความต้องการของเรา อาจจะในอนาคต ฉันรู้ว่า 51Degrees และผู้คนบางส่วนที่ Umbraco กำลังจะทำการรวมเข้ากับ Umbraco แต่โครงการสุดท้ายอาจจะไม่ออกในอีกสองสามเดือน
ดังนั้นทำไมเราจึงต้องการตรวจจับ Useragent String ของแท็บเล็ต Android และไม่ได้ส่งตรงไปยังไซต์บนมือถือของเราเหมือนที่เป็นอยู่ในปัจจุบัน

หากใครรู้วิธีตรวจจับและแท็บเล็ต Android โดยทั่วไปไม่ใช่อุปกรณ์เฉพาะจะเป็นประโยชน์มาก


2
ฉันแค่คาดเดา แต่อาจมีวิธีดูว่าความละเอียดในการรับชมสูงแค่ไหน?
โฟนอน

@Phonon ใช่เรากำลังพยายามใช้ Javascript เพื่อส่งค่า res กลับไปที่เซิร์ฟเวอร์ เราพยายามให้เรา __doPostBack แต่ดูเหมือนว่าจะไม่ส่งค่าของเรากลับมา เรามีค่าอินพุตที่ซ่อนอยู่มันแสดงฝั่งไคลเอ็นต์ แต่เราไม่ได้รับมันกลับฝั่งเซิร์ฟเวอร์
ClosDesign

ไม่แน่ใจว่ามีอะไรให้ช่วยไหม
โฟนอน

คำตอบ:


112

ปัญหาคือ Android User-Agent เป็น User-Agent ทั่วไปและไม่มีความแตกต่างระหว่างแท็บเล็ต Android และ Android บนอุปกรณ์เคลื่อนที่

สิ่งนี้ไม่ถูกต้อง Android มือถือมีสตริง "มือถือ" ในส่วนหัว User-Agent แท็บเล็ต Android ไม่ได้

แต่เป็นที่น่าสังเกตว่ามีแท็บเล็ตจำนวนไม่น้อยที่รายงาน Safari แบบ "มือถือ" ใน userAgent และรุ่นหลังไม่ใช่วิธีเดียว / ที่มั่นคงในการแยกความแตกต่างระหว่างมือถือและแท็บเล็ต


3
คุณถูก. ฉันแค่มองหาสตริงที่มี Android ฉันต้องค้นหาสตริงที่มี Android และ! mobile พบบทความของ Tim Bray เกี่ยวกับเรื่องนี้
ClosDesign

6
@yoavf: ดูเหมือนว่าจะได้รับการแก้ไขด้วยการอัปเดต Android 3.1 ของ XOOM ฉันเป็นเจ้าของ XOOM และเพิ่งทดสอบ - ไม่ใช่ "มือถือ"
CommonsWare

27
คำตอบนี้ไม่ถูกต้องทั้งหมด มีแท็บเล็ตไม่กี่เครื่องแม้แต่ Kindle Fire รุ่นใหม่ล่าสุดที่รายงาน Safari แบบ "มือถือ" ในสตริง userAgent ดูเหมือนว่าจะไม่มีวิธีที่ชัดเจนในการตรวจจับแท็บเล็ตกับโทรศัพท์ในตอนนี้เว้นแต่จะเป็นการรวมกันของ userAgent และการสนับสนุนที่เป็นไปได้สำหรับการตรวจจับความละเอียด
vernonk

22
เท็จ! แท็บ samsung galaxy เป็นแท็บเล็ตที่เห็นได้ชัด แต่มี "มือถือ" ในตัวแทนผู้ใช้
puchu

1
ฉันเชื่อว่าการเพิ่ม "มือถือ" มาพร้อมกับ Android 4 ยังมีอุปกรณ์จำนวนมากก่อน 4 ... สำหรับ Android 2.x ฉันคิดว่าโทรศัพท์สำหรับ 3.x ฉันคิดว่าแท็บเล็ต (แม้ว่าจะมีผลบวกผิด ๆ อยู่บ้าง) ... มิฉะนั้นคุณสามารถทดสอบสำหรับมือถือ ...
Tracker1

20

@Carlos: ในบทความของเขา Tim Bray แนะนำสิ่งนี้ (เช่นเดียวกับโพสต์อื่นของ Google ) แต่น่าเสียดายที่ผู้ผลิตแท็บเล็ตทั้งหมดไม่ได้นำไปใช้

... ขอแนะนำให้ผู้ผลิตอุปกรณ์ฟอร์มแฟคเตอร์ขนาดใหญ่ลบ "มือถือ" ออกจาก User Agent ...

สายตัวแทนผู้ใช้แท็บเล็ต Android ส่วนใหญ่ที่ฉันเคยเห็นใช้ซาฟารีมือถือเช่น Samsung Galaxy Tab:

Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML เช่น Gecko) เวอร์ชัน / 4.0 Mobile Safari / 533.1

ดังนั้นในขณะนี้ฉันกำลังตรวจสอบชื่ออุปกรณ์เพื่อตรวจหาแท็บเล็ต Android ตราบใดที่มีเพียงไม่กี่รุ่นในตลาดก็โอเค แต่เร็ว ๆ นี้จะเป็นทางออกที่น่าเกลียด

อย่างน้อยในกรณีของ XOOM ดูเหมือนว่าส่วนของมือถือจะหายไป:

Mozilla / 5.0 (Linux; U; Android 3.0; en-us; Xoom Build / HRI39) AppleWebKit / 534.13 (KHTML เช่น Gecko) เวอร์ชัน / 4.0 Safari / 534.13

แต่เนื่องจากปัจจุบันมีเพียงแท็บเล็ตที่มี Andorid 3.x การตรวจสอบบน Android 3 ก็เพียงพอแล้ว


1
คุณช่วยโพสต์รายการอุปกรณ์ที่คุณตรวจสอบและการเข้ารหัสได้ไหม
LTech

12

Mo 'ดีกว่าที่จะตรวจหาตัวแทนผู้ใช้ "อุปกรณ์เคลื่อนที่" ด้วย

แม้ว่าคุณอาจต้องการตรวจจับ "android" ใน User-Agent เพื่อใช้คุณลักษณะเฉพาะของ Android เช่นการเพิ่มประสิทธิภาพหน้าจอสัมผัสข้อความหลักของเราคือ: หากไซต์บนมือถือของคุณขึ้นอยู่กับการดมกลิ่น UA โปรดตรวจหาสตริง "มือถือ" และ“ android” แทนที่จะเป็นแค่“ android” ใน User-Agent ซึ่งจะช่วยให้บริการผู้เยี่ยมชมทั้งมือถือและแท็บเล็ตของคุณได้อย่างเหมาะสม

การตรวจจับอุปกรณ์ 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 เช่น gecko) เวอร์ชัน / 4.0 mobile safari / 533.1 ซึ่งมีคำว่า 'mobile' ในแท็บเล็ต Samsung Galaxy?
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
ซึ่งจะใช้ไม่ได้กับ Android เวอร์ชัน> 3.0 เช่น ICS (4.0) ฉันคิดว่าคำตอบที่ยอมรับนั้นถูกต้อง - ตรวจสอบว่า "Mobile Safari" อยู่ใน useragent หรือไม่
Suman

ไม่แน่ใจเกี่ยวกับ Kindles อื่น ๆ แต่ Kindle Fire 1 ไม่มี 'kindle' ในสตริง user-agent - และไม่มี 'android'; เบาะแสเดียวคือคำว่า 'Silk' และ 'Silk-Accelerated'
mklement0

6

เมื่อฉันตรวจพบ Android ในตัวแทนผู้ใช้นี่คือวิธีที่ฉันแยกความแตกต่างระหว่างเบราว์เซอร์แท็บเล็ตและสมาร์ทโฟน (นี่คือการใช้ Python แต่ก็ง่ายเหมือนกันสำหรับภาษาโปรแกรมอื่น ๆ ):

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

อัปเดต: เพื่อแสดงการใช้ Chrome บน Android ตามความคิดเห็นด้านล่าง


ทำไมไม่มองหา "มือถือ" ในตัวแทนล่ะ?
Eren Tantekin

ฉันคิดว่าอาจได้ผลเช่นกัน แต่ฉันคิดว่าการค้นหาเฉพาะ "มือถือ" อาจเป็นอันตราย - อาจมีอุปกรณ์ที่มีชื่อพูดว่า "HTC Mobile" เป็นต้นฉันคิดว่านี่เป็นแนวทางที่แนะนำ
Suman

1
ตอนนี้ Google เปิดตัว Chrome สำหรับ Android แนวทางของคุณอาจมีปัญหาเล็กน้อย เนื่องจาก Chrome บน Android จะรายงานตัวเองว่าเป็น "Chrome Mobile" แทนที่จะเป็น "Mobile Safari" ตามที่เบราว์เซอร์ Android ที่ใช้กันอยู่ สำหรับคำแนะนำอย่างเป็นทางการบางประการ: 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

ขณะที่เราไม่สามารถบอกว่าแท็บเล็ตบางละเว้น "มือถือ" หลายคนรวมทั้ง Samsung Galaxy Tab ทำมีมือถือใน user-agent ของพวกเขาทำให้มันเป็นไปไม่ได้ในการตรวจสอบระหว่างหุ่นยนต์แท็บเล็ตและโทรศัพท์มือถือ Android โดยไม่ต้อง resorting การตรวจสอบข้อมูลเฉพาะรุ่น IMHO นี้เสียเวลาเว้นแต่คุณจะวางแผนอัปเดตและขยายรายการอุปกรณ์เป็นประจำทุกเดือน

น่าเสียดายที่ทางออกที่ดีที่สุดคือร้องเรียนกับ Google เกี่ยวกับเรื่องนี้และให้พวกเขาแก้ไข Chrome สำหรับ Android ดังนั้นจึงเพิ่มข้อความเพื่อระบุระหว่างอุปกรณ์มือถือและแท็บเล็ต นรกแม้แต่ตัวอักษร M OR T ตัวเดียวในตำแหน่งเฉพาะในสตริงก็เพียงพอแล้ว แต่ฉันเดาว่ามันสมเหตุสมผลเกินไป


1

Xoom มีคำว่า Xoom ใน user-agent: Mozilla / 5.0 (Linux; U; Android 3.0.1; en-us; Xoom Build / HRI66) AppleWebKit / 534.13 (KHTML เช่น Gecko) เวอร์ชัน / 4.0 Safari / 534.13

Galaxy Tab มี "มือถือ" ใน user-agent: Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML เช่น Gecko) เวอร์ชัน / 4.0 Mobile Safari / 533.1

ดังนั้นจึงง่ายต่อการตรวจจับ Xoom ซึ่งยากที่จะตรวจพบว่า Android เวอร์ชันใดรุ่นหนึ่งเป็นอุปกรณ์เคลื่อนที่หรือไม่


1

แท็บเล็ตที่ทันสมัยส่วนใหญ่ใช้รังผึ้ง aka 3.x ไม่มีโทรศัพท์ที่ใช้ 3.x เป็นค่าเริ่มต้น แท็บเล็ตส่วนใหญ่ที่ใช้งาน 2.x ในปัจจุบันมีความจุน้อยกว่าและอาจดีกว่าเมื่อนำเสนอด้วยไซต์บนอุปกรณ์เคลื่อนที่ ฉันรู้ว่ามันไม่ได้ไร้ที่ติ .. แต่ฉันเดาว่ามันแม่นยำกว่าการไม่มีมือถือมาก ..


1
โทรศัพท์จริงไม่สามารถรัน 3.x ได้เนื่องจากเป็น Android รุ่นแท็บเล็ตเท่านั้นและไม่ได้เปิดแหล่งที่มา
Eren Tantekin

1

ในขณะที่ Mobile Android อาจมี "มือถือ" อยู่ในสตริง User-agent แล้วถ้าใช้ Opera Mobile สำหรับ Android บนแท็บเล็ตล่ะ มันจะยังคงมี "มือถือ" อยู่ในสตริง user-agent แต่ควรแสดงไซต์ขนาดแท็บเล็ต คุณจะต้องทดสอบ "มือถือ" ที่ไม่ได้นำหน้าด้วย "โอเปร่า" แทนที่จะเป็น "มือถือ"

หรือคุณอาจลืมเกี่ยวกับ Opera Mobile


1
Opera mobile ไม่ใช้ 'mobile' ในสตริงผู้ใช้ แต่ใช้ 'mobi' ดูที่นี่
Ian Stanway

2
Opera Mobile สำหรับโทรศัพท์มือถือมี "Opera Mobi" ในสตริงตัวแทนผู้ใช้ แต่ Opera Mobile สำหรับแท็บเล็ตมี "Opera Tablet" ในสตริงตัวแทนผู้ใช้
tagawa


1

หากคุณใช้โดยไม่มี "มือถือ" แสดงว่าเกือบถูกต้อง แต่มี HTC Sensation 4G (4.3 นิ้วพร้อม android 2.X) ซึ่งไม่ส่งคำสำคัญมือถือ

สาเหตุที่คุณอาจต้องการรักษาแยกกันเนื่องจากiframesฯลฯ


0

51Degrees beta, 1.0.1.6 และรุ่นเสถียรล่าสุด 1.0.2.2 (4/28/2011) มีความสามารถในการดมกลิ่นสำหรับแท็บเล็ตแล้ว โดยทั่วไปตามแนวของ:

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

หวังว่านี่จะช่วยคุณได้


โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.