在我的应用程序中,我通过 HTTPS 对 Web 服务进行 HTTP 调用。我的愿望是设计我的客户端,使其仅在遇到身份验证挑战时询问用户的用户名和密码。我想要被动反应,而不是先发制人。由于我的应用程序的性质,在某些情况下它不需要进行身份验证。
在 iOS 中,这个过程通过NSURLConnectionDelegateProtocol变得非常简单,它在我的应用程序的 iOS 版本中实现。使用此类建立连接,并且仅当提出挑战时,该类才会向其委托请求身份验证凭据。
如何在 Android 中做到这一点?使用AuthenticationHandler?或者也许是Authenticator?如果是这样,是否可以提供示例或教程?
编辑 1:
使用 Authenticator 类(请参阅下面的答案),我现在能够响应身份验证挑战,但目前只能使用硬编码凭据。我想提示用户输入用户名和密码。根据Android 文档,在该getPasswordAuthentication
方法中,您“通常会提示用户输入所需的输入”。
这怎么可能?在不阻塞 UI 线程(我知道不能/不应该完成)的情况下,如何在该方法中显示对话框、等待用户输入、然后检索输入的凭据并返回它们?
编辑 2:
虽然很少或没有使用 Authenticator 类的示例,但我能够找到的结果表明,在单个方法中提示用户输入是不可能的,例如getPasswordAuthentication
. 可能必须恢复到 Apache Http 客户端...
最终编辑:
我仍在使用 HttpURLConnection,但按照 Edward 下面的建议做一些事情。似乎没有任何可配置的类来处理身份验证挑战和提示用户输入,所以我手动执行此操作。