gpt4 book ai didi

ios - Xamarin 方式在 UIWebView 中打开自签名证书网页

转载 作者:可可西里 更新时间:2023-11-01 03:58:04 33 4
gpt4 key购买 nike

如问题标题所述,我想在 UIWebview (Xamarin.iOS) 中打开一个自签名网页默认情况下,自签名网页不会加载到 UIWebView 中。

解决方案的重要要求:

  • 当我想将应用程序提交到 Apple 应用程序商店时,它应该被 Apple 接受(因此自定义 NSUrlRequest 不适合)。
  • 它应该正确加载 css 和 javascript。

我在 stackoverflow 上找到了一个可能的解决方案,但这是针对 native iOS 的。 https://stackoverflow.com/a/11664147我还想知道上述解决方案是否需要使用 NSUrlConnectionDelegate 登录。

理想的解决方案应该是用户可以使用 UIWebView 自行填写凭据。

有人可以为此提供 Xamarin 解决方案吗?我自己尝试过,但无法正常工作。

预先感谢您的帮助。

最佳答案

我知道这是一篇很老的帖子,但这是一个非常有趣的问题,所以我不得不尝试一下。所以如果你仍然需要它(很可能不需要)或者如果有人找到这篇文章,这里有一个支持自签名的原生 UIWebView 的移植版本。它可以用作常规 UIWebView,但它需要一个主机名作为附加参数,该参数应该是应该禁用证书检查的页面的主机名。

public class InsecureWebView : UIWebView, INSUrlConnectionDataDelegate, IUIWebViewDelegate
{
public InsecureWebView(string baseUrl) : base()
{
Setup (baseUrl);
}

public InsecureWebView(CoreGraphics.CGRect rect, string baseUrl) : base(rect)
{
Setup (baseUrl);
}

public InsecureWebView(NSCoder coder, string baseUrl) : base(coder)
{
Setup (baseUrl);
}

public InsecureWebView(NSObjectFlag t, string baseUrl) : base(t)
{
Setup (baseUrl);
}

public InsecureWebView(IntPtr handler, string baseUrl) : base(handler)
{
Setup (baseUrl);
}

string baseUrl = null;
bool authenticated;
NSUrlRequest failedRequest;

private void Setup(string baseUrl)
{
this.Delegate = this;
this.baseUrl = baseUrl;
}


[Foundation.Export ("webView:shouldStartLoadWithRequest:navigationType:")]
public bool ShouldStartLoad (UIKit.UIWebView webView, Foundation.NSUrlRequest request, UIKit.UIWebViewNavigationType navigationType)
{
var result = authenticated;
if (!authenticated) {
failedRequest = request;
NSUrlConnection.FromRequest (request, this);
}
return result;
}

[Foundation.Export ("connection:willSendRequestForAuthenticationChallenge:")]
public void WillSendRequestForAuthenticationChallenge (NSUrlConnection connection, NSUrlAuthenticationChallenge challenge)
{
if (challenge.ProtectionSpace.AuthenticationMethod == NSUrlProtectionSpace.AuthenticationMethodServerTrust) {
var baseUrl = new NSUrl (this.baseUrl);
if (challenge.ProtectionSpace.Host == baseUrl.Host) {
challenge.Sender.UseCredential (NSUrlCredential.FromTrust (challenge.ProtectionSpace.ServerSecTrust), challenge);
}
}
challenge.Sender.ContinueWithoutCredential (challenge);
}

[Foundation.Export ("connection:didReceiveResponse:")]
public void DidReceivedResponse(NSUrlConnection connection, NSUrlResponse response)
{
authenticated = true;
connection.Cancel ();
LoadRequest (failedRequest);
}
}

关于ios - Xamarin 方式在 UIWebView 中打开自签名证书网页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25891796/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com