2014-10-28 115 views
0

我使用Xamarin爲我的Web應用程序創建本機登錄屏幕。Xamarin - 從HttpClient將會話傳遞給WebView

登錄視圖提交詳細信息,握手並在滿足登錄憑證時返回成功。但是,一旦打開頁面,會話cookie不會存儲在手機的Web視圖中,因此無法正常工作。

有什麼辦法可以從HttpClient調用的結果中獲取會話cookie並將它傳遞給Xamarin WebView。這可以在一個普通的類中完成,還是必須是特定於設備的?如果它必須是設備特定的,有沒有辦法爲Windows Phone做到這一點?

任何建議將是偉大的。

乾杯。

+0

您可以在您的登錄方法調用中返回一個令牌並將其傳遞給您的webview? – valdetero 2014-10-28 19:23:16

+0

嗨valdetero。感謝您的回覆。我可以。但是有沒有一個更好的方法用於WebView。我可以通過它的源URL的查詢字符串,但希望有一些事情更安全... – 2014-11-01 03:03:36

+0

嗨,你是怎麼做到這一點?謝謝 – 2015-01-06 08:14:07

回答

0

我正在做類似的Windows Phone,但我有一個sessionId,我傳遞給webview源內的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; 
      } 
     } 
    } 

那麼對於上裝完成上市,並調用javascript函數中的網頁視圖。

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中適用於我。