Есть ли способ, которым я могу использовать webview.postURL на xamarin.forms? - PullRequest
0 голосов
/ 29 апреля 2019

Я создаю приложение, обертывающее мой сайт Xamarin.forms. Я хочу реализовать страницу входа в моем мобильном приложении, которая будет проходить вход на веб-сайте с использованием webview.postURL. Работает ли postURL для iOS и Android? или только андроид? Если это работает только на Android, есть ли способ сделать это для обеих платформ?

Я новичок в xamarin и c #, примеры кода или ссылка на github очень мне помогут.

1 Ответ

0 голосов
/ 30 апреля 2019

Вы можете реализовать это, используя CustomRenderer.

в формах, определить подкласс 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 и MacOS, если вы хотите получить доступ к незащищенным сайтам, вам может потребоваться настроить или отключить ATS

<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key><true/>
</dict>

в Android Project

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);

            }

        }

    }
}

Для получения более подробной информации о пользовательском рендерере вы можете обратиться к здесь .

...