【问题标题】:How to set cookies in WKWebview using xamarin forms如何使用 xamarin 表单在 WKWebview 中设置 cookie
【发布时间】:2020-11-14 02:24:28
【问题描述】:

我正在尝试将现有应用从 UIWebView 切换到 WKWebView。该应用程序管理 web 视图之外的用户登录/会话。我正在使用 WKWebsiteDataStore 设置 cookie,它在 iOS 11+ 中工作,但在 iOS 10 及更低版本中,应用程序崩溃了。

这是我的代码

protected async void LoadCookies()
{
var cookieStore = WKWebsiteDataStore.DefaultDataStore;
var cookies = NSHttpCookieStorage.SharedStorage.Cookies;
var oldcookies = await dataStore.HttpCookieStore.GetAllCookiesAsync();
foreach (var cookie in oldcookies)
{
    await cookieStore.HttpCookieStore.DeleteCookieAsync(cookie);
}
foreach (var cookie in cookies)
{
    await cookieStore.HttpCookieStore.SetCookieAsync(cookie);
}
} 

【问题讨论】:

  • 你能和我们分享一下堆栈跟踪吗?看看this thread 可能会有所帮助。
  • 异常:-Objective-c 抛出异常名称:NSInvalidArgumentException 原因[WKWebsiteDataStore httpCookieStore] 发送无法识别的选择器

标签: c# cookies xamarin.forms xamarin.ios wkwebview


【解决方案1】:

如果您阅读有关httpCookieStore 的文档,您会发现httpCookieStore 从iOS 11.0 开始可用。这就是您的应用在 iOS 10 及更低版本中崩溃的原因。

在 iOS 10 及更低版本中,您可以使用this answer 中的解决方案。

    if (UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
    {
        foreach (var cookie in cookies)
        {
            await cookieStore.HttpCookieStore.SetCookieAsync(cookie);
        }
    }
    else
    {

        NSMutableUrlRequest request = new NSMutableUrlRequest(new Uri(""));
        request.ShouldHandleCookies = true;
        request.SetValueForKey(new NSString("123"), new NSString("Cookie"));
    }

【讨论】:

  • iOS 11 及以上的代码在 12 版本中不起作用。
猜你喜欢
  • 1970-01-01
  • 2018-02-05
  • 2017-05-16
  • 2014-12-21
  • 2018-12-01
  • 1970-01-01
  • 2019-03-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多