Cách phát hiện Máy tính bảng Android nói chung. Đại lý người dùng?


103

Tôi đã tìm khắp mọi nơi. Chúng tôi đang sử dụng Motorola Zoom để thử kiểm tra trang web máy tính bảng của mình. Vấn đề là Android Useragent là một Useragent chung và không có sự khác biệt giữa Android máy tính bảng và Android di động. Tôi không muốn chỉ nhắm mục tiêu một thiết bị cụ thể như Xoom Useragent vì Android rất có thể sẽ có trên nhiều thiết bị máy tính bảng trong tương lai gần.

Chúng tôi đang sử dụng Umbraco CMS và chúng tôi đã xem xét việc sử dụng giải pháp 51Degrees.mobi và tại thời điểm này, giải pháp này sẽ không hoạt động đối với nhu cầu của chúng tôi. Có thể trong tương lai. Tôi biết 51Degrees và một số người ở Umbraco sẽ tiến hành một số hoạt động tích hợp vào Umbraco, nhưng dự án cuối cùng có thể sẽ không ra mắt trong vài tháng.
Do đó, tại sao chúng tôi muốn phát hiện Chuỗi sử dụng của máy tính bảng Android và nó không hướng trực tiếp đến trang web di động của chúng tôi như hiện tại.

Nếu ai đó biết cách phát hiện và Android Tablet nói chung, không phải thiết bị cụ thể sẽ rất hữu ích.


2
Tôi chỉ đoán, nhưng có lẽ có một cách để xem độ phân giải xem cao như thế nào?
Phonon

@Phonon, Có, chúng tôi đang cố gắng sử dụng Javascript để gửi giá trị res trở lại máy chủ. Chúng tôi đang cố gắng cung cấp cho chúng tôi một __doPostBack nhưng điều đó dường như không làm giá trị của chúng tôi trở lại. Chúng tôi có một giá trị đầu vào ẩn, nó hiển thị phía máy khách nhưng chúng tôi không lấy lại phía máy chủ.
ClosDesign

Không chắc tôi có thể giúp bạn ở đây không.
Phonon,

Câu trả lời:


112

Vấn đề là Tác nhân người dùng Android là Tác nhân người dùng chung và không có sự khác biệt giữa máy tính bảng Android và Android di động.

Điều này là không đúng. Di động Android có chuỗi "Di động" trong tiêu đề Tác nhân người dùng. Máy tính bảng Android thì không.

Nhưng điều đáng nói là có khá nhiều máy tính bảng báo cáo Safari "Di động" trong userAgent và sau này không phải là cách duy nhất / chắc chắn để phân biệt giữa Di động và Máy tính bảng.


3
bạn nói đúng. Tôi chỉ đang tìm kiếm một chuỗi có chứa Android. Tôi đã phải tìm kiếm chuỗi chứa Android và! Mobile. Tìm thấy bài viết của Tim Bray về điều này.
ClosDesign

6
@yoavf: Điều đó dường như đã được khắc phục với bản cập nhật Android 3.1 của XOOM. Tôi sở hữu một XOOM và vừa thử nghiệm nó - không có "điện thoại di động".
CommonsWare

27
Câu trả lời này không hoàn toàn chính xác. Có khá nhiều máy tính bảng - ngay cả Kindle Fire mới nhất - báo cáo Safari "Di động" trong chuỗi userAgent. Dường như không có một cách chắc chắn nào để phát hiện máy tính bảng so với điện thoại tại thời điểm này trừ khi đó là sự kết hợp giữa userAgent và khả năng hỗ trợ phát hiện độ phân giải.
vernonk

22
sai! tab samsung galaxy là tablet rõ ràng nhưng nó có "di động" trong user agent của nó
Puchu

1
Tôi tin rằng việc bổ sung "di động" là với Android 4, vẫn còn rất nhiều thiết bị trước 4 ... Đối với Android 2.x, tôi giả sử là điện thoại, đối với 3.x, tôi giả định là máy tính bảng (mặc dù sẽ có một vài kết quả dương tính giả) ... nếu không, bạn có thể kiểm tra điện thoại di động ...
Tracker1 Ngày

20

@Carlos: Trong bài viết của mình, Tim Bray khuyến nghị điều này (cũng như một bài đăng khác của Google ), nhưng tiếc là nó không được tất cả các nhà sản xuất máy tính bảng áp dụng.

... Chúng tôi khuyên các nhà sản xuất thiết bị có kích thước lớn nên xóa "Di động" khỏi Tác nhân người dùng ...

Hầu hết các chuỗi tác nhân người dùng máy tính bảng Android mà tôi đã thấy sử dụng safari di động, ví dụ như Samsung Galaxy Tab:

Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, như Gecko) Phiên bản / 4.0 Mobile Safari / 533.1

Vì vậy, hiện tại tôi đang kiểm tra tên thiết bị để phát hiện máy tính bảng Android. Miễn là chỉ có một vài mô hình trên thị trường, đó là ok nhưng ngay sau đó đây sẽ là một giải pháp xấu.

Ít nhất là trong trường hợp của XOOM, phần di động dường như đã biến mất:

Mozilla / 5.0 (Linux; U; Android 3.0; en-us; Xoom Build / HRI39) AppleWebKit / 534.13 (KHTML, như Gecko) Phiên bản / 4.0 Safari / 534.13

Nhưng vì hiện chỉ có máy tính bảng với Andorid 3.x, nên kiểm tra trên Android 3 là đủ.


1
bạn có thể đăng danh sách các thiết bị bạn đã kiểm tra và mã hóa.
LTech

12

Tốt hơn là phát hiện tác nhân người dùng “di động”

Mặc dù bạn có thể vẫn muốn phát hiện “android” trong User-Agent để triển khai các tính năng dành riêng cho Android, chẳng hạn như tối ưu hóa màn hình cảm ứng, thông điệp chính của chúng tôi là: Nếu trang web dành cho thiết bị di động của bạn phụ thuộc vào tính năng UA, vui lòng phát hiện chuỗi “di động” và “android”, thay vì chỉ “android” trong User-Agent. Điều này giúp phục vụ đúng cách cả khách truy cập trên thiết bị di động và máy tính bảng của bạn.

Phát hiện thiết bị Android qua Trình duyệt

 < 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
Điều này hoạt động hoàn hảo. Tôi đã thêm vào điều này cho iPad và 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

Nó hoạt động như thế nào đối với phiên bản 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 có từ 'mobile' trong đó cho Samsung Galaxy Tablet?
LTech

8

Bạn có thể thử tập lệnh này vì bạn không muốn chỉ nhắm mục tiêu Xoom. Tôi không có Xoom, nhưng sẽ hoạt động.

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

Tôi đã tạo một dự án trên github. Hãy khám phá - https://github.com/codefuze/js-mobile-tablet-redirect . Vui lòng gửi vấn đề nếu có bất cứ điều gì sai sót!


1
Điều này sẽ không hoạt động đối với các phiên bản Android> 3.0, chẳng hạn như ICS (4.0). Tôi nghĩ câu trả lời được chấp nhận là câu trả lời đúng - hãy kiểm tra xem "Mobile Safari" có nằm trong ứng dụng hay không.
Suman

Không chắc về các Kindle khác, nhưng Kindle Fire 1 KHÔNG có 'kindle' trong chuỗi tác nhân người dùng của nó - cũng như không chứa 'android'; manh mối duy nhất là các từ 'Silk' và 'Silk-Accelerated'.
mklement0

6

Khi tôi đã phát hiện ra Android trong tác nhân người dùng, đây là cách tôi phân biệt giữa trình duyệt máy tính bảng và điện thoại thông minh (trình duyệt này đang sử dụng Python, nhưng tương tự đơn giản đối với các ngôn ngữ lập trình khác):

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

CẬP NHẬT: để phản ánh việc sử dụng Chrome trên Android, theo nhận xét bên dưới.


Tại sao không chỉ tìm kiếm "Điện thoại di động" trong đại lý?
Eren Tantekin

Tôi nghĩ điều đó cũng có thể hiệu quả, nhưng tôi nghĩ có thể nguy hiểm nếu chỉ tìm kiếm "Di động" - có thể có các thiết bị có tên, chẳng hạn như "HTC Mobile", v.v. Tôi nghĩ đây là cách tiếp cận được khuyến nghị.
Suman

1
Giờ đây, Google đã phát hành Chrome dành cho Android, cách tiếp cận của bạn có thể gặp một chút vấn đề. Bởi vì, Chrome trên Android sẽ tự báo cáo là "Chrome Mobile" thay vì "Mobile Safari" thông thường như trình duyệt Android gốc đang làm. Đối với một số khuyến nghị chính thức: developers.google.com/chrome/mobile/docs/user-agent
Eren Tantekin

4

Dựa trên chuỗi Đại lý trên trang web này:

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

Kết quả này đưa ra
:

Tất cả các thiết bị máy tính bảng đều có:
1. Máy tính bảng
2. iPad

Thứ hai:

Tất cả các thiết bị điện thoại đều có:
1. Di động
2. Điện thoại

Ngày thứ ba:

Máy tính bảng và thiết bị điện thoại có:
1. Android

Nếu bạn có thể phát hiện từng cấp độ, tôi tin rằng kết quả là đúng 90%. Giống như Kênh thiết bị SharePoint.


2

Đây là những gì tôi sử dụng:

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

Trong khi chúng tôi không thể nói nếu một số viên thuốc bỏ qua "di động", nhiều bao gồm Samsung Galaxy Tab làm có điện thoại di động trong user-agent của họ, làm cho nó không thể phát hiện giữa một máy tính bảng Android và điện thoại Android mà không cần đến việc kiểm tra chi tiết cụ thể mô hình. IMHO này lãng phí thời gian trừ khi bạn có kế hoạch cập nhật và mở rộng danh sách thiết bị của mình hàng tháng.

Thật không may, giải pháp tốt nhất ở đây là khiếu nại với Google về điều này và yêu cầu họ sửa chữa Chrome dành cho Android để Chrome thêm một số văn bản để xác định giữa thiết bị di động và máy tính bảng. Địa ngục ngay cả một chữ cái M HOẶC T ở một vị trí cụ thể trong chuỗi là đủ, nhưng tôi đoán điều đó có ý nghĩa quá.


1

Xoom có ​​từ Xoom trong tác nhân người dùng: Mozilla / 5.0 (Linux; U; Android 3.0.1; en-us; Xoom Build / HRI66) AppleWebKit / 534.13 (KHTML, như Gecko) Phiên bản / 4.0 Safari / 534.13

Galaxy Tab có "Di động" trong tác nhân người dùng: Mozilla / 5.0 (Linux; U; Android 2.2; en-us; SCH-I800 Build / FROYO) AppleWebKit / 533.1 (KHTML, như Gecko) Phiên bản / 4.0 Mobile Safari / 533.1

Vì vậy, rất dễ dàng để phát hiện ra Xoom, khó phát hiện một phiên bản Android cụ thể có phải là thiết bị di động hay không.


1

Hầu hết các máy tính bảng hiện đại đều chạy tổ ong hay còn gọi là 3.x Không có điện thoại nào chạy 3.x theo mặc định. Hầu hết các máy tính bảng hiện chạy 2.x có dung lượng ít hơn và dù sao cũng có thể tốt hơn khi được hiển thị với trang web dành cho thiết bị di động. Tôi biết nó không hoàn hảo .. nhưng tôi đoán nó chính xác hơn rất nhiều so với việc không có điện thoại di động ..


1
Trên thực tế, điện thoại thậm chí không thể chạy 3.x vì nó là bản phát hành chỉ dành cho máy tính bảng của Android và không có nguồn mở.
Eren Tantekin

1

Mặc dù Android dành cho thiết bị di động có thể có "di động" trong chuỗi tác nhân người dùng, nhưng điều gì sẽ xảy ra nếu nó đang sử dụng Opera Mobile cho Android trên máy tính bảng? Nó sẽ vẫn có "di động" trong chuỗi tác nhân người dùng, nhưng sẽ hiển thị các trang web có kích thước Máy tính bảng. Bạn sẽ cần kiểm tra "di động" không đứng trước "opera" thay vì chỉ "di động"

hoặc bạn có thể quên Opera Mobile.


1
Opera mobile không sử dụng 'mobile' trong chuỗi người dùng, nó sử dụng 'mobi'. Xem ở đây
Ian Stanway

2
Opera Mobile dành cho điện thoại di động có "Opera Mobi" trong chuỗi tác nhân người dùng, nhưng Opera Mobile dành cho máy tính bảng có "Opera Tablet" trong chuỗi tác nhân người dùng.
tagawa

1

Tôi khuyên bạn nên sử dụng Categorizr để phát hiện xem người dùng có đang sử dụng máy tính bảng hay không. Bạn có thể xem kết quả kiểm tra phân loại ở đây .


1

Nếu bạn sử dụng sự vắng mặt của "Di động" thì nó gần như đúng. Nhưng có HTC Sensation 4G (4,3 inch với android 2.X) không gửi từ khóa Di động.

Lý do tại sao bạn có thể muốn điều trị riêng là do iframesv.v.


0

Bản 51Degrees beta, 1.0.1.6 và bản phát hành ổn định mới nhất 1.0.2.2 (28/4/2011) hiện có khả năng phát hiện cho máy tính bảng. Về cơ bản dọc theo các dòng của:

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

Hy vọng điều này sẽ giúp bạn.


0

Hãy thử OpenDDR , nó miễn phí không giống như hầu hết các giải pháp khác được đề cập.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.