首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OkHttp阻断器和CookieJar不适用于最近的华为,比如P40

OkHttp阻断器和CookieJar不适用于最近的华为,比如P40
EN

Stack Overflow用户
提问于 2021-01-01 23:39:02
回答 1查看 346关注 0票数 2

我的应用程序正在使用OkHttp 3和Retrofit2进行网络连接。它与服务器通信,在成功登录后返回会话。我需要保存这个会话,并将它附加到将在登录后执行的所有请求的请求头。

我用过Cookie Jar,它在仿真器和三星手机上运行得很好,但是我的客户报告了华为P40 Lite的问题。在对服务器进行日志检查之后,我发现会话没有发送到服务器,这导致了验证问题。

之后,我使用了华为的实时调试,在远程华为P40设备上测试我的应用程序,并报告说问题依然存在。在试用了我的应用程序和测试之后,我得出结论,我用来处理保存和附加会话的OkHttp 3、Cookie Jar和Interceptor根本不适用于华为。这可能与谷歌对最新华为设备的服务禁令有关,因为应用程序在P30这样的老设备上运行良好吗?

任何建议或解决方案都是非常欢迎的。

通过从响应中手动提取会话并使用@Header将其附加到我的调用中,我克服了这一点,但是这个解决方案非常不干净。

这是我的OkHttpClient代码。请记住,它在非最新的华为手机上工作了两年多,而且在生产中仍然很好。

代码语言:javascript
复制
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和拦截器不起作用。我用这一行尝试了catch块:ProviderInstaller.installIfNeeded(context);会失败,因为它需要谷歌服务,而在catch blok中,我会还原一个没有Cookie Jar附加的OkHttpClient。

我检查了华为是否有类似的替代品:ProviderInstaller.installIfNeeded(context);,但我找不到。此行用于更新任何丢失的安全提供程序修补程序(如果丢失的话)。Google文档中提到的行。

EN

回答 1

Stack Overflow用户

发布于 2021-01-02 01:04:45

尝试另一个Cookie jar实现吗?也许是这个持久的?在CookieManager上可能有一个坏的P40。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65534696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档