- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经对 google Places 和 direction API 集成进行了改造。最近我从 Google Maps for Work 支持团队那里得到了更新,为了确保您的应用程序不受影响,您需要验证您使用的 HTTPS 客户端是否支持 SHA -256.
他们提供了一个测试 url( https://cert-test.sandbox.google.com ) 来验证 http-client 是否兼容
我用过https://cert-test.sandbox.google.com使用 Retrofit 进行验证,但它失败了,并给出了如下所述的异常:
javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL 握手中止: ssl=0x1027ce0: SSL 库失败,通常是协议(protocol)错误
需要说明的是,我在此集成中使用了普通的 okhttpclient。
如果有人有修复,请做必要的。
最佳答案
看起来服务器正在使用 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
密码。 API 20 (L Preview) 才开始支持它。您可以在 SSLSocket
docs 上按 API 级别查看支持的密码列表。 .
尝试在 5.0 或更高版本的设备上运行您的测试。例如,下面的代码在运行 5.0 的设备上是成功的,但在 4.4.4 上得到 SSL 异常 --
OkHttpClient client = new OkHttpClient();
Request request = new Request.Builder().get().url("https://cert-test.sandbox.google.com/")
.build();
response = client.newCall(request).execute();
Log.d(TAG, "code = " + response.code());
但是对于等效的 URLConnection
代码也是如此 --
HttpsURLConnection con = (HttpsURLConnection) new URL("https://cert-test.sandbox.google.com/").openConnection();
con.connect();
Log.d(TAG, "code = " + con.getResponseCode());
问题不是改造或 okhttp,而是旧手机上提供的默认安全提供程序的限制。
您可以通过安装新的提供程序来解决这个问题。谷歌通过谷歌播放服务提供了一个,并且很容易安装。一行(加上异常处理等)。
try {
ProviderInstaller.installIfNeeded(this);
} catch (GooglePlayServicesRepairableException e) {
// Fix it
} catch (GooglePlayServicesNotAvailableException e) {
// Skip it
}
有关完整示例,请参阅 "Updating Your Security Provider to Protect Against SSL Exploits"来自谷歌。
如果手机安装了 Google Play,这样做将允许上述两个代码块在较低的 API 版本上运行。
关于android - 改造不适用于 sha256 测试 url 的 map api,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32837416/
我是一名优秀的程序员,十分优秀!