2017-03-17 2 views
3

Ich habe folgenden Plan in meinem Xamarin Projekt:Setzen Cookie auf einem WebView in Xamarin

  • Der Benutzer seine Benutzername und Passwort auf der Startseite gelangt.
  • Wenn Daten korrekt sind (API existiert), navigieren Sie zu einem WebView und melden Sie den Benutzer automatisch auf dieser Seite an.

Die vorhandene API (nicht öffentlich) liefert eine System.Net.CookieCollection.

Wie kann ich meine Idee mit einer POST-Anfrage mit diesen Cookies realisieren? Hier ist meine Basis:

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

    } 
} 

Mit freundlichen Grüßen, localhorst27

Antwort

3

Sie haben einen benutzerdefinierten Renderer für das WebView sowohl auf Android und iOS zu erstellen. Auf diese Weise können Sie die Cookies in Android WebView und iOS UIWebView injizieren. Wenn Sie nicht mit ihnen vertraut sind, starten Sie hier: Introduction to Custom Renderers

Wenn Sie sind vertraut mit, wie Renderer Arbeit, folgen Sie diesem Beitrag von Christine Blanda auf Xamarin Foren: Setting Cookies in a WebView

Ich werde auch den Code hier posten zu machen sicher, dass es für den Fall, dass der ursprüngliche Beitrag nach unten geht, erhalten bleibt.

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

Cookie nicht über eine Eigenschaft namens Instanz. Kannst du erklären, wie es funktionieren könnte? Außerdem kann mein Compiler AppInfo.URL_BASE nicht verarbeiten – localhorst27