2017-03-17 26 views
3

放在餅乾上的WebView我在Xamarin項目如下計劃:在Xamarin

  • 用戶輸入自己的用戶名和密碼MainPage執行。
  • 如果數據正確(API存在),導航到WebView並且 自動在此頁面上登錄用戶。

現有的API(不公開)提供System.Net.CookieCollection。

如何才能實現我的想法,使用POST請求與這些cookie?這裏是我的基地:

[XamlCompilation(XamlCompilationOptions.Compile)] 
public partial class WebPage : ContentPage 
{ 
    public WebPage(string url, CookieCollection cookies) 
    { 
     InitializeComponent(); 
     BindingContext = new MainPageViewModel(); 
     MyWebView.Source = "https://" + url; 

    } 
} 

親切的問候, localhorst27

回答

3

你將不得不以創建WebView在Android和iOS的自定義渲染器。這樣,您就可以將Cookie注入Android WebView和iOS UIWebView。如果你不熟悉他們,從這裏開始:Introduction to Custom Renderers

當你熟悉渲染是如何工作的,對Xamarin論壇關注該職位由Christine BlandaSetting Cookies in a WebView

我還會在這裏發佈的代碼,使確保它保留下來,以防原始帖子發生故障。

的Android OnElementChanged

var cookieManager = CookieManager.Instance; 
cookieManager.SetAcceptCookie(true); 
cookieManager.RemoveAllCookie(); 
var cookies = UserInfo.CookieContainer.GetCookies(new System.Uri(AppInfo.URL_BASE)); 
for (var i = 0; i < cookies.Count; i++) 
{ 
    string cookieValue = cookies[i].Value; 
    string cookieDomain = cookies[i].Domain; 
    string cookieName = cookies[i].Name; 
    cookieManager.SetCookie(cookieDomain, cookieName + "=" + cookieValue); 
} 

的iOS OnElementChanged

// Set cookies here 
var cookieUrl = new Uri(AppInfo.URL_BASE); 
var cookieJar = NSHttpCookieStorage.SharedStorage; 
cookieJar.AcceptPolicy = NSHttpCookieAcceptPolicy.Always; 
foreach (var aCookie in cookieJar.Cookies) 
{ 
    cookieJar.DeleteCookie(aCookie); 
} 

var jCookies = UserInfo.CookieContainer.GetCookies(cookieUrl); 
IList<NSHttpCookie> eCookies = 
        (from object jCookie in jCookies 
        where jCookie != null 
        select (Cookie) jCookie 
        into netCookie select new NSHttpCookie(netCookie)).ToList(); 
cookieJar.SetCookies(eCookies.ToArray(), cookieUrl, cookieUrl); 
+0

CookieManager沒有命名實例屬性。你能解釋它是如何工作的嗎?另外,我的編譯器無法處理AppInfo.URL_BASE – localhorst27