2011-12-15 34 views
22

Chúng tôi có một ứng dụng dựa trên Java, nơi chúng tôi muốn phát hiện loại thiết bị (thiết bị di động hoặc máy tính để bàn) cho thiết bị đang gửi yêu cầu.Phát hiện loại thiết bị trong ứng dụng web

Làm cách nào có thể?

+0

Xem câu hỏi trùng lặp và câu trả lời: http://stackoverflow.com/questions/1005153/auto-detect-mobile-browser-via-user-agent – jbindel

+0

@Fly Đó là trong PHP không Java – nidhin

+0

Khái niệm này là giống hệt nhau. Bạn kiểm tra tác nhân người dùng. – jbindel

Trả lời

34

Bạn sẽ phải đọc tiêu đề User-Agent từ yêu cầu và quyết định điều đó.

Trong ứng dụng servlet vani, một cách thô để làm việc đó là:

public void doGet(HttpServletRequest request, 
       HttpServletResponse response) throws ServletException, IOException { 
    if(request.getHeader("User-Agent").indexOf("Mobile") != -1) { 
    //you're in mobile land 
    } else { 
    //nope, this is probably a desktop 
    } 
} 
+3

Cách mới nhất và tốt hơn trên Mozilla trang web - https://developer.mozilla.org/en-US/docs/Browser_detection_using_the_user_agent – San

+1

Một cách khác, đầy đủ, cách thức - https://code.google.com/p/mobileesp/source/browse/Java/UAgentInfo.java – San

+1

Một thư viện khác là bitwalker useragentutils: https://github.com/HaraldWalker/user-agent-utils cung cấp enums cho BrowserType, DeviceType, OperatingSystem, Manufacturer, Version. Nó có thể được cài đặt thông qua Maven, và (có lẽ quan trọng nhất) được duy trì. –

12

Bạn có thể nhận được thông tin thiết bị bằng cách phân tích http tiêu đề

String browserType = request.getHeader("User-Agent"); 

Bạn nên phân tích browserType để có được loại thiết bị

này có thể giúp

public String getBrowserInfo(String Information) 
    { 
    String browsername = ""; 
    String browserversion = ""; 
    String browser = Information; 
    if (browser.contains("MSIE")) 
    { 
     String subsString = browser.substring(browser.indexOf("MSIE")); 
     String info[] = (subsString.split(";")[0]).split(" "); 
     browsername = info[0]; 
     browserversion = info[1]; 
    } else if (browser.contains("Firefox")) 
    { 

     String subsString = browser.substring(browser.indexOf("Firefox")); 
     String info[] = (subsString.split(" ")[0]).split("/"); 
     browsername = info[0]; 
     browserversion = info[1]; 
    } else if (browser.contains("Chrome")) 
    { 

     String subsString = browser.substring(browser.indexOf("Chrome")); 
     String info[] = (subsString.split(" ")[0]).split("/"); 
     browsername = info[0]; 
     browserversion = info[1]; 
    } else if (browser.contains("Opera")) 
    { 

     String subsString = browser.substring(browser.indexOf("Opera")); 
     String info[] = (subsString.split(" ")[0]).split("/"); 
     browsername = info[0]; 
     browserversion = info[1]; 
    } else if (browser.contains("Safari")) 
    { 

     String subsString = browser.substring(browser.indexOf("Safari")); 
     String info[] = (subsString.split(" ")[0]).split("/"); 
     browsername = info[0]; 
     browserversion = info[1]; 
    } 
    return browsername + "-" + browserversion; 
    } 
+0

Bạn có thể cung cấp thêm thông tin về điều này không. Tôi đã cố gắng đi qua các dữ liệu mà Http Header cung cấp nhưng không tìm thấy dữ liệu cần thiết. –

+0

ai đó có thể giả mạo 'User-Agent' khi gửi yêu cầu đến máy chủ?nói rằng họ nhấn lệnh 'curl' nhưng giả mạo rằng nó đến từ 'Mobile'? – daydreamer

+0

@daydreamer Có thể thay đổi hoặc "giả mạo" trình duyệt web của bạn gửi làm tác nhân người dùng. Một số trình duyệt web di động sẽ cho phép bạn thay đổi những gì trình duyệt tự nhận dạng là (ví dụ: "Chế độ di động" hoặc "Chế độ máy tính để bàn") để truy cập một số trang web chỉ cho phép máy tính để bàn. Nếu bạn thay đổi cài đặt này, tác nhân người dùng là những gì bị ảnh hưởng. – Lucky

5

Bạn có thể nhận được một giải pháp phần mềm của bên thứ 3. Có rất nhiều nguồn mở ở đó. Trước đây tôi đã sử dụng 51Degrees.mobi's Java solution (và cũng đã làm việc trên giải pháp C nguồn mở của họ). Theo liên kết đó và nhấn nút tải xuống. Đó là tương đối dễ dàng để có được và chạy.

1

Bạn có thể thử lib này tôi nghĩ, yauaa có thể phát hiện một chuỗi tác nhân người dùng là thiết bị nào/phần mềm

https://github.com/nielsbasjes/yauaa

0

Đối với Java 51Degrees có một API miễn phí trên GitHub https://github.com/51Degrees/Java-Device-Detection, đó là chưa rõ niên thường xuyên và nên có thể bao gồm tất cả các lệnh cấm cơ bản mà bạn cần.

Có một hướng dẫn làm thế nào để sử dụng API cho loại thiết bị phát hiện ở đây https://51degrees.com/Developers/Documentation/APIs/Java-V32/Tutorials/Web-App

Ngoài ra còn có một phiên bản đám mây miễn phí cung cấp các tài sản DeviceType (nếu bạn muốn nhiều hơn chỉ IsMobile), bạn có thể tìm thấy các chi tiết trên điều này trên trang web 51Degrees. Bạn sẽ cần phải "mua" đám mây miễn phí thông qua trang web, nhưng nó không yêu cầu chi tiết ngân hàng và hoàn toàn miễn phí. Bạn cũng có thể sử dụng JavaScript và tích hợp khác phụ thuộc vào yêu cầu của bạn.

Tiết lộ: Tôi làm việc ở 51 độ.

0

Bạn có thể thử sử dụng Spring Mobile. Có những lớp học thuận tiện để giải quyết điều đó.

Device currentDevice = DeviceUtils.getCurrentDevice(servletRequest); 
if(currentDevice.isMobile()) { /* Mobile */ } 
if(currentDevice.isTablet()) { /* Tablet */ } 
if(currentDevice.isNormal()) { /* Desktop */ } 
Các vấn đề liên quan