Я столкнулся с очень странной проблемой с приложением Xamarin Forms в IoS после последнего обновления ОС.В основном это приложение использует средство визуализации WebView для навигации по корпоративному порталу компании, который имеет проверку подлинности NTLM.Я реализовал веб-рендерер для управления процессом аутентификации, и он работал нормально несколько недель назад, но после последнего обновления Apple веб-просмотр перестал работать.К сожалению, нет никакого кода ошибки, исключения или явного сообщения из SDK, и процесс аутентификации работает (я вижу это из журналов), кстати, содержимое веб-просмотра все пустое.Я также пытался перейти на другие веб-сайты (без аутентификации) (bing.com, google.com, xamarin.com), но проблема все еще была.
У кого-нибудь есть предложения или подсказки?
ОБНОВЛЕНИЕ
После глубокого исследования я наконец нашел проблему!На самом деле кажется, что после устаревания UIWebview при использовании настраиваемого средства визуализации для обработки сценариев аутентификации вы не можете пропустить ответ HTTP 200 (как предлагалось ранее), иначе компонент не загрузит содержимое html!
Итак, это то, что у меня было раньше в моем пользовательском рендерере:
public override void DecidePolicy(WKWebView webView, WKNavigationResponse navigationResponse, Action<WKNavigationResponsePolicy> decisionHandler)
{
var url = navigationResponse?.Response?.Url;
if (url == null) return;
if (navigationResponse.Response is NSHttpUrlResponse)
{
var resp = navigationResponse.Response as NSHttpUrlResponse;
if (resp.StatusCode == 200) return;
HandleHttpResponse(resp);
decisionHandler(WKNavigationResponsePolicy.Allow);
}
else if (navigationResponse.Response is NSUrlResponse)
{
//todo handle this case too if we want to open excel files in webview
//UIApplication.SharedApplication.OpenUrl(url);
decisionHandler(WKNavigationResponsePolicy.Cancel);
}
}
, и это то, что я изменил:
var resp = navigationResponse.Response as NSHttpUrlResponse;
//if (resp.StatusCode == 200) return;
HandleHttpResponse(resp);
decisionHandler(WKNavigationResponsePolicy.Allow);
Просто комментируя if для StatusCode200 и пусть ограничится решением Хэндлера это работает ... Очень и очень странно!