我正在使用Xamarin.forms创建一个包含我的网站的应用程序。我想在我的移动应用程序上实现登录页面,该页面将使用webview.postURL在网站上通过登录。 postURL适用于iOS和Android吗?还是仅限android?如果它只适用于Android有两种平台可以做到这一点吗?
我是xamarin和c#的新手,示例代码或github链接对我很有帮助。
您可以使用CustomRenderer
实现它。
在Forms中,定义Webview的子类
using Xamarin.Forms;
namespace xxx
{
public class MyWebview:WebView
{
public string data; //Parameters that you want to pass
public string url;
public MyWebview()
{
}
}
}
在contentPage中
public MainPage()
{
InitializeComponent();
Content = new StackLayout
{
Children =
{
new MyWebview()
{
url="your url",
WidthRequest = 300,
HeightRequest = 500,
data = "userName=xxx"
},
},
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions=LayoutOptions.FillAndExpand
};
}
在iOS项目中
using Foundation;
using UIKit;
using xxx;
using xxx.iOS;
using Xamarin.Forms;
using Xamarin.Forms.Platform.iOS;
[assembly:ExportRenderer(typeof(MyWebview),typeof(MyWebViewRenderer))]
namespace xxx.iOS
{
public class MyWebViewRenderer:WebViewRenderer
{
protected override void OnElementChanged(VisualElementChangedEventArgs e)
{
base.OnElementChanged(e);
if(NativeView!=null)
{
var mywebview = Element as MyWebview;
var request = new NSMutableUrlRequest(new NSUrl(new NSString(mywebview.url)));
request.Body = mywebview.data;
request.HttpMethod = "POST";
LoadRequest(request);
}
}
}
}
笔记
对于iOS 9及以上版本,如果您希望访问不安全的站点,则可能需要配置或禁用ATS
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>
在Android项目中
using System.Text;
using Android.App;
using Android.Content;
using Android.OS;
using Android.Runtime;
using Android.Views;
using Android.Webkit;
using Android.Widget;
using xxx;
using xxx.Droid;
using Xamarin.Forms;
using Xamarin.Forms.Platform.Android;
[assembly: ExportRenderer(typeof(MyWebview), typeof(MyWebViewRenderer))]
namespace xxx.Droid
{
public class MyWebViewRenderer:WebViewRenderer
{
public MyWebViewRenderer(Context context):base(context)
{
}
protected override void OnElementChanged(ElementChangedEventArgs<Xamarin.Forms.WebView> e)
{
base.OnElementChanged(e);
if(Control!=null)
{
var mywebview = Element as MyWebview;
var postData = Encoding.UTF8.GetBytes(mywebview.data);
Control.PostUrl(mywebview.url, postData);
}
}
}
}
有关自定义渲染器的更多详细信息,请参阅here。