我正在为WebView覆盖此方法。我正在使用适当的域。使用Android模拟器进行调试时,我只会看到所有Cookie的部分列表。没有列出我特别要求的值。有什么建议么?下面的源代码。
public override void OnPageFinished(WebView view, string url)
{
base.OnPageFinished(view, url);
_cookieManager.Flush();
string customerId = null;
var cookies = _cookieManager.GetCookie(Constants.DCH_DOMAIN);
Log.Info(TAG, string.Format("Cookies retrieved as {0}.", cookies));
if (cookies != null)
{
string[] tempList = cookies.Split(';');
foreach (var pair in tempList)
{
if (pair.Contains("wishlist_customer_id"))
{
string[] tempPair = pair.Split('=');
customerId = tempPair[1];
if (customerId != null)
{
Log.Info(TAG, string.Format("Customer ID retrieved as {0}.", customerId));
PCLStorage(customerId);
}
}
}
}
更新,还有另一个域在此Web会话中存储cookie。四个cookie之间的路径,HTML,相同的站点,安全性等没有什么不同。我将附加工作站上的Chrome外观,显示这四个cookie。然后,我将附加我的Android模拟器的设备日志的外观,并在其中基于子类WebViewClient输出cookie集合。四个cookie中只有两个出现在其中。我在检索cookie之前插入了SystemClock.Sleep(5000),以便使它们也有机会完全填充。
答案 0 :(得分:1)
您应该在加载网址之前执行cookie同步,以确保完整的cookie数据,如:
_cookieManager.flush ();
webView.loadUrl(url);
然后通过OnPageFinished方法获取cookie:
public override void OnPageFinished(WebView view, string url)
{
base.OnPageFinished(view, url);
string customerId = null;
var cookies = _cookieManager.GetCookie(url);
Log.Info(TAG, string.Format("Cookies retrieved as {0}.", cookies));
if (cookies != null)
{
string[] tempList = cookies.Split(';');
foreach (var pair in tempList)
{
if (pair.Contains("wishlist_customer_id"))
{
string[] tempPair = pair.Split('=');
customerId = tempPair[1];
if (customerId != null)
{
Log.Info(TAG, string.Format("Customer ID retrieved as {0}.", customerId));
PCLStorage(customerId);
}
}
}
}
答案 1 :(得分:0)
感谢Leo Zhu,该问题已解决。显然, 之前 ,我加载了刷新CookieManager实例所需的WebView URL。这导致该特定资源的所有cookie出现并可供查询。希望这可以对遇到类似挑战的其他人有所帮助!