有没有办法防止 WebView 在重新加载时丢失会话信息?

Is there a way to prevent a WebView from losing session information on reload?

因此,我被要求帮助将 Simple Saml SSO 集成到我们的移动应用程序中,但在登录我们的 Android 应用程序后,我遇到了保持会话活动的问题。

注意:我敢打赌有更好的方法可以做到这一点,但这就是我被指示实施它的方式。

我在主 activity 中创建了一个 WebView,用于加载服务提供商的网站。当用户正确登录时,服务提供商将 WebView 重定向到我们的应用程序特定的保持活动状态 url。然后将此 WebView 的可见性设置为隐藏,并使会话在 "background"

中保持活动状态

服务提供者提供了一个保持有效的到期日期,我们设置了一个计时器来将 WebView 安排到 reload/refresh,以便会话保持活动状态。

我注意到,在第一次重新加载 WebView 时,将重定向回服务提供商的登录 url。如果用户未登录,重定向是我们正在执行的 SSO 类型的正确行为。用户之前已成功登录,但在第一次重新加载时,就像 WebView 丢失了所有以前的会话 info/data.

我可以设置 WebView 设置以使会话在重新加载之间保持不变吗?

我已经在我们的 Apple 应用程序上实现了这个,Swift 中的 WebView 能够在每次刷新时保持会话活动。

我已经确认刷新前WebView的url是正确的keep alive url。

----更新-----

所以我尝试使用 WebView 的 evaluateJavascript 函数将 window 的位置设置为保持活动 url 并且发生了相同的会话信息丢失。然后我尝试调用 window 的位置重新加载功能,但仍然没有保存会话信息。

我想知道 Chrome 应用程序是否会遇到同样的问题,所以我尝试在常规 Chrome 应用程序中登录服务提供商的 url。登录后,我尝试刷新 keep alive url 并且会话信息是持久的。

我已经能够弄清楚这是我们用我们的测试服务提供商 URL 做的事情,并且在我们开始使用真正的服务提供商 URL 后就解决了。