Как включить TLS 1.2 для всего приложения - PullRequest
0 голосов
/ 27 апреля 2020

Я много читал о TLS1.2, который должно поддерживать мое приложение, но каждая статья посвящена либо активации на Glide, либо на Retrofit, есть ли способ активировать его раз и навсегда для приложения ?

Мое приложение использует:

  • Glide
  • Retrofit
  • Exoplayer

Я бы хотел избежать дублирования одного и того же кода на OkHttpClient для каждой библиотеки

Статей:

1 Ответ

1 голос
/ 28 апреля 2020

Как предлагает @CommonsWare, чтобы включить TLS 1.2 в библиотеках, которые я создал, один OkHttpClientBuilder, который затем используется этими библиотеками, вот код:

Я создал gist с тем же шагом, который вы найдете ниже.


Ваш clientBuilder

Я взял пользовательский сокет из этого gist и связанная статья

val clientBuilder by lazy {
    OkHttpClient.Builder()
        .readTimeout(15, TimeUnit.SECONDS)
        .connectTimeout(15, TimeUnit.SECONDS)
        .enableTls12()
}

Модернизация

Ничего слишком сложного, просто добавьте client в цепочку

val retrofit = Retrofit.Builder()
    .addConverterFactory(MoshiConverterFactory.create(moshi))
    .addCallAdapterFactory(CoroutineCallAdapterFactory())
    .client(clientBuilder.build())
    .baseUrl(BASE_URL)
    .build()

Glide

Нам нужно добавить эти реализации, чтобы иметь возможность настраивать Glide

implementation 'com.github.bumptech.glide:annotations:4.11.0'
implementation('com.github.bumptech.glide:okhttp3-integration:4.11.0'){
    exclude group: 'glide-parent'
}
@GlideModule
class CustomGlideModule : AppGlideModule() {

    override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
        registry.replace(
            GlideUrl::class.java,
            InputStream::class.java,
            OkHttpUrlLoader.Factory(clientBuilder.build())
        )
    }

}

Как только это произойдет, вам нужно просто позвонить:

GlideApp.with(this)
    .load(URL)
    .into(image)

Exoplayer

implementation "com.google.android.exoplayer:extension-okhttp:2.11.4"
val dataSourceFactory: DataSource.Factory = OkHttpDataSourceFactory(
    clientBuilder.build(),
    Util.getUserAgent(context, "RecyclerView VideoPlayer")
)

, затем просто используйте ваш dataSourceFactory с вашим mediaSource и воспроизводите видео

val videoSource: MediaSource = ProgressiveMediaSource.Factory(dataSourceFactory)
                .createMediaSource(Uri.parse(mediaUrl))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...