我的应用程序正在使用OkHttp 3和Retrofit2进行网络连接。它与服务器通信,在成功登录后返回会话。我需要保存这个会话,并将它附加到将在登录后执行的所有请求的请求头。
我用过Cookie Jar,它在仿真器和三星手机上运行得很好,但是我的客户报告了华为P40 Lite的问题。在对服务器进行日志检查之后,我发现会话没有发送到服务器,这导致了验证问题。
之后,我使用了华为的实时调试,在远程华为P40设备上测试我的应用程序,并报告说问题依然存在。在试用了我的应用程序和测试之后,我得出结论,我用来处理保存和附加会话的OkHttp 3、Cookie Jar和Interceptor根本不适用于华为。这可能与谷歌对最新华为设备的服务禁令有关,因为应用程序在P30这样的老设备上运行良好吗?
任何建议或解决方案都是非常欢迎的。
通过从响应中手动提取会话并使用@Header将其附加到我的调用中,我克服了这一点,但是这个解决方案非常不干净。
这是我的OkHttpClient代码。请记住,它在非最新的华为手机上工作了两年多,而且在生产中仍然很好。
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文档中提到的行。
发布于 2021-01-02 01:04:45
尝试另一个Cookie jar实现吗?也许是这个持久的?在CookieManager上可能有一个坏的P40。
https://stackoverflow.com/questions/65534696
复制相似问题