OkHttp Interceptor и CookieJar не работают на самых последних Huawei, таких как P40

Мое приложение использует OkHttp 3 и Retrofit2 для работы в сети. Он связывается с сервером, который возвращает сеанс после успешного входа в систему. Мне нужно сохранить этот сеанс и прикрепить его к заголовку запроса для всех запросов, которые будут выполняться после входа в систему.

Я использовал для этого Cookie Jar, и он отлично работал на эмуляторе и моем телефоне Samsung, но мой клиент сообщил о проблеме на Huawei P40 Lite. После некоторой проверки журнала на сервере я решил, что сеанс не был отправлен на сервер, и это вызвало проблему проверки.

После этого я использовал отладку Huawei в реальном времени, чтобы протестировать свое приложение на удаленном устройстве Huawei P40, и сообщил, что проблема сохраняется. После некоторой игры с моим приложением и тестирования я пришел к выводу, что OkHttp 3 Cookie Jar и Interceptor, которые я использую для обработки сеанса сохранения и присоединения, вообще не работают на Huawei. Может ли это быть связано с запретом сервисов Google для новейших устройств Huawei, поскольку приложение отлично работает на старых, таких как P30?

Любые советы или решения более чем приветствуются.

Я преодолел это, вручную извлекая сеанс из ответа и прикрепив его к своим вызовам с помощью @Header, но это решение очень нечистое.

Вот мой код для OkHttpClient. Имейте в виду, что он работал, и он все еще отлично работает в производстве более 2 лет на не новейших телефонах Huawei.

return new OkHttpClient.Builder()
    .sslSocketFactory(sslContext.getSocketFactory(), loadX509TrustManager(tmf))
    .hostnameVerifier(hostnameVerifier)
    .readTimeout(60, TimeUnit.SECONDS)
    .writeTimeout(60, TimeUnit.SECONDS)
    .cookieJar(new JavaNetCookieJar(cookieManager))
    .cache(cache)
    .addNetworkInterceptor(logInterceptor)
    .build();

ОБНОВЛЕНИЕ

Я ошибался, говоря, что Cookie Jar и Interceptors не работают. У меня был блок try catch с этой строкой: ProviderInstaller.installIfNeeded(context);, который не удался, потому что для этого требуются службы Google, а в блоке catch я бы повторно запустил OkHttpClient, к которому не прикреплен Cookie Jar.

Я проверил, есть ли аналогичная замена Huawei для: ProviderInstaller.installIfNeeded(context);, но не нашел. Эта строка используется для обновления любых отсутствующих исправлений поставщика безопасности, если они отсутствовали. Документация Google по указанной строке.


person UrosKekovic    schedule 01.01.2021    source источник


Ответы (1)


Попробовать другую реализацию Cookie jar? Возможно, этот постоянный? На P40 может быть плохой CookieManager.

person Jesse Wilson    schedule 02.01.2021