2014-10-28 2 views
0

Я использую Xamarin для создания собственного экрана входа для своего веб-приложения.Xamarin - Пройдите сессию к WebView от HttpClient

В окне входа в систему представлены детали, рукопожатия, и он возвращает успех при выполнении учетных данных. Однако, поскольку cookie сеанса не сохраняется на веб-просмотре телефона, как только я открываю страницу, он не работает.

Есть ли способ получить файл cookie сеанса из результата вызова HttpClient и передать его на веб-сайт Xamarin WebView. Может ли это быть сделано в общем классе или оно должно быть специфичным для устройства? И если он должен быть специфичным для устройства, есть ли способ сделать это для Windows Phone?

Любые советы были бы замечательными.

Cheers.

+0

Можете ли вы вернуть токен в свой метод входа в систему и передать его в свой веб-просмотр? – valdetero

+0

Привет valdetero. Спасибо за ваш ответ. Да, я могу. Однако есть лучший способ для этого с помощью WebView. Я могу передать его через строку запроса исходного URL-адреса, но надеялся на что-то более безопасное ... –

+0

Привет, как вы это сделали? благодаря –

ответ

0

Я делаю что-то подобное в Windows Phone, но у меня есть sessionId, который я передаю в JavaScript внутри источника веб-представления. Я использую собственный визуализатор, а затем вызываю скрипт на веб-странице (источник WebView)

Для достижения этой настройки пользовательский просмотр и рендеринг. Затем в визуализаторе получить вид и свойство SESSIONID на представлении:

protected override async void OnElementPropertyChanged(object sender, PropertyChangedEventArgs e) 
    { 
     base.OnElementPropertyChanged(sender, e); 

     if(e.PropertyName == SessionWebView.SessionIdProperty.PropertyName) 
     { 
      view = Element as SessionWebView; 
      Control.LoadCompleted += Control_LoadCompleted;   

      if (view != null) 
      { 
       _currentSessionId = view.SessionId; 
      } 
     } 
    } 

Затем в список для загрузки Complete и вызовите яваскрипт функцию в WebView.

void Control_LoadCompleted(object sender, System.Windows.Navigation.NavigationEventArgs e) 
    { 
     try 
     { 
      if (!scriptCalled) 
      { 

       Control.IsScriptEnabled = true; 
       var param = new string[1]; 
       param[0] = _currentSessionId; 
       Control.InvokeScript("initWebView", param); 
       scriptCalled = true; 
      } 
     } 
     catch(Exception ex) 
     { 
      throw; 
     } 
    } 

Не уверен, что есть лучший способ, но это работает для меня в WindowsPhone.