我刚刚从 okhttp2 + retrofit 升级到 okhttp3 + retrofit2 但无法在 Android 客户端上运行 http2。
我的服务器正在运行启用了 http2 的 nginx 1.14.0。(iOS 客户端在 http2 上运行良好)
这是创建 okhttp 客户端的代码
private static OkHttpClient createOkHttpClient(Application app,
NetworkInterceptor networkInterceptor,
HttpLoggingInterceptor httpLoggingInterceptor) {
// Install an HTTP cache in the application cache directory.
File cacheDir = new File(app.getCacheDir(), "http");
Cache cache = new Cache(cacheDir, DISK_CACHE_SIZE);
Security.insertProviderAt(
new org.conscrypt.OpenSSLProvider(), 1);
OkHttpClient.Builder okHttpClientBuilder = new OkHttpClient().newBuilder()
.cache(cache)
.connectTimeout(15, TimeUnit.SECONDS)
.readTimeout(15, TimeUnit.SECONDS)
.writeTimeout(15, TimeUnit.SECONDS)
.callTimeout(30, TimeUnit.SECONDS)
.protocols(Arrays.asList(Protocol.HTTP_2, Protocol.HTTP_1_1))
.followRedirects(true)
.followSslRedirects(true)
.addInterceptor(networkInterceptor)
.addInterceptor(httpLoggingInterceptor);
if (BuildConfig.DEBUG) {
okHttpClientBuilder.addNetworkInterceptor(new StethoInterceptor());
}
return okHttpClientBuilder.build();
}
我正在使用 dagger 2 来创建带有改造 2 的 Api。
我的测试设备运行的是 Android 8.1。
我已阅读文档,此设置应该运行 http2。我的实现有问题吗?