因为Device.OpenUri,只会打开另一个带有该url的应用程序,无法通过身份验证。您需要做的是将 PDF 下载到本地存储,然后从本地存储打开 PDF。您需要将文件放在移动设备上的共享存储中,以允许其他应用程序访问它。
如果这存在安全风险,您需要将内部 PDF 查看器添加到您的应用中,以便您可以在内部查看应用中的 PDF。
现在,如果你想下载 PDF,你需要使用 HttpClient。在 iOS 和 UWP 中,HttpClient 和 WebView 共享同一个 cookie 容器,这意味着如果您在 WebView 上进行了身份验证,那么它已经在 HttpClient 中进行了身份验证。对于 Android,您需要复制身份验证 cookie。
首先建立一个你可以读取的cookie容器。
CookieContainer _cookieContainer = new CookieContainer();
System.Net.Http.HttpClient _client = new System.Net.Http.HttpClient(new HttpClientHandler() { CookieContainer = _cookieContainer });
然后根据你想要复制的方式,你可以这样做
private void CopyCookies(HttpResponseMessage result, Uri uri)
{
foreach (var header in result.Headers)
if (header.Key.ToLower() == "set-cookie")
foreach (var value in header.Value)
_cookieManager.SetCookie($"{uri.Scheme}://{uri.Host}", value);
foreach (var cookie in GetAllCookies(_cookieContainer))
_cookieManager.SetCookie(cookie.Domain, cookie.ToString());
}
或
public void ReverseCopyCookies(Uri uri)
{
var cookie = _cookieManager.GetCookie($"{uri.Scheme}://{uri.Host}");
if (!string.IsNullOrEmpty(cookie))
_cookieContainer.SetCookies(new Uri($"{uri.Scheme}://{uri.Host}"), cookie);
}
我会在Cookie Sharing with WebView and the Http Client 中详细介绍。