2010-11-18 30 views
9

Tôi đã tạo một ứng dụng tải một WebView. Để đăng nhập, trang web yêu cầu xác thực cơ bản. Khi tôi cố gắng truy cập trang web qua trình duyệt mặc định, tôi nhận được một hộp bật lên nhắc tôi nhập tên người dùng và mật khẩu của mình.Cách xử lý Xác thực cơ bản trong WebView

Nếu tôi cố truy cập trang web qua ứng dụng của mình, tôi gặp lỗi 401 và không bật lên. Tôi đã tự hỏi liệu có ai đó có thể giúp tôi không?

Trả lời

8

Trang web yêu cầu xác thực.

Trước tiên, bạn phản ứng với các lỗi:

webview.setWebViewClient(new WebViewClient() { 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
    if (errorCode == 401) { 
     // show alert to enter username and password 
     // then when those are entered in the alert, 
     //  set it through the setHttpAuthUsernamePassword(...) shown below 
     //  and then reload the site 
    } 
    } 
}); 

Sử dụng chức năng này để thiết lập người dùng và mật khẩu: WebView.setHttpAuthUsernamePassword()

webview.setHttpAuthUsernamePassword(host, realm, username, password); 

Tất cả là chuỗi. Xem liên kết ở trên để biết thêm thông tin về máy chủ và lĩnh vực có nghĩa là gì.

Giải pháp tìm thấy ở đây: Supply some basic auth credentials to a WebView?

+0

Cảm ơn các bạn đã phản hồi nhanh. Sửa tôi nếu tôi sai, Nhưng wont webview.setHttpAuthUsernamePassword (máy chủ, lĩnh vực, tên người dùng, mật khẩu); yêu cầu tôi xác định trước tên người dùng và mật khẩu trong mã? Tôi đã cố gắng tìm ra cách để ứng dụng bật lên một tên đăng nhập/tên đăng nhập như trình duyệt mặc định. – Kyle

+0

ok .. sẽ thêm vào để giải thích cách thực hiện điều đó trong bài đăng của tôi ở đây .. chỉ một giây. –

+0

Cảm ơn bạn lần nữa! Tôi vẫn nhận được 401, nhưng tôi sẽ tiếp tục cố gắng để làm cho nó hoạt động. – Kyle

19

Tôi nghĩ một giải pháp thanh lịch hơn so với cái Patrick mô tả sẽ được sử dụng phương pháp onReceivedHttpAuthRequest của WebViewClient như đã mô tả ở đây: http://www.mail-archive.com/[email protected]/msg30468.html

@Override 
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { 
    handler.proceed("username", "password"); 
} 
6
public void onReceivedHttpAuthRequest(WebView view, HttpAuthHandler handler, String host, String realm) { 
    handler.proceed("USERNAME", "PASSWORD"); 
} 

Tôi nghĩ nó hữu ích về lỗi 401 trên WebView.

+2

Tôi đã thử phương pháp này và nó đã kết thúc trong một mớ hỗn độn. Tôi rất khuyến khích sử dụng phương pháp này. Nếu bạn cung cấp sai tên người dùng hoặc mật khẩu, xác thực không thành công và webview sẽ tiếp tục thử lại cho auth. Điều này đã tạo ra các cuộc gọi api lặp lại trên máy chủ của tôi đã kết thúc máy chủ bị hỏng. Bạn có thể xem xét sử dụng một phương thức counter và stopLoading() để tránh lặp vô hạn. –

Các vấn đề liên quan