Ho un UIWebView che autentica un utente. Voglio abilitare il singolo accesso. Per questo voglio memorizzare i cookie quando l'utente viene autenticato per la prima volta e quindi al prossimo avvio dell'app, i cookie dovrebbero essere automaticamente passati a UIWebView e autenticare l'utente senza che egli inserisca nuovamente le sue credenziali.Mantieni cookie UIWebView iOS Xamarin
Iam facendo qualcosa di simile al di sotto di utilizzare l'UIWebView
var uri = new Uri(AuthUrl);
var nsurl = new NSUrl(uri.GetComponents(UriComponents.HttpRequestUrl, UriFormat.UriEscaped));
wvLogin.LoadRequest(new NSUrlRequest(nsurl));
CookieManager.cs
public static void SaveCookies()
{
var cookieData = new NSMutableArray();
var cookieStorage = NSHttpCookieStorage.SharedStorage;
foreach (var nscookie in cookieStorage.Cookies) {
var cookieDictionary = new NSMutableDictionary();
cookieDictionary.Add (NSHttpCookie.KeyName, new NSString (nscookie.Name));
cookieDictionary.Add (NSHttpCookie.KeyValue,new NSString (nscookie.Value));
cookieDictionary.Add (NSHttpCookie.KeyDomain,new NSString (nscookie.Domain));
cookieDictionary.Add (NSHttpCookie.KeyPath, new NSString (nscookie.Path));
cookieDictionary.Add (NSHttpCookie.KeySecure, new NSString (nscookie.IsSecure.ToString()));
cookieDictionary.Add (NSHttpCookie.KeyVersion, new NSString (nscookie.Version.ToString()));
if (nscookie.ExpiresDate != null) {
cookieDictionary.Add (NSHttpCookie.KeyExpires, nscookie.ExpiresDate);
}
cookieData.Add (cookieDictionary);
}
cookieData.WriteToFile (StoragePath(), true);
}
public static string StoragePath()
{
//var paths = NSSearchPath.GetDirectories (NSSearchPathDirectory.LibraryDirectory, NSUserDomainMask, true);
var paths = NSSearchPath.GetDirectories(NSSearchPathDirectory.LibraryDirectory, NSSearchPathDomain.User, true);
return paths [0].ToString();
}
public static void DeleteCookies()
{
NSHttpCookieStorage cookieStorage = NSHttpCookieStorage.SharedStorage;
foreach (var nscookie in cookieStorage.Cookies)
{
cookieStorage.DeleteCookie(nscookie);
}
NSUserDefaults.StandardUserDefaults.Synchronize();
}
public static void LoadCookies()
{
var cookies = NSMutableArray.FromFile (StoragePath());
var cookieStorage = NSHttpCookieStorage.SharedStorage;
foreach (var nscookie in cookieStorage.Cookies)
{
cookieStorage.SetCookie(nscookie);
}
}
LoginScreen.cs
void wvLogin_LoadFinished(object sender, EventArgs e)
{
int redirectCount = 0;
redirect = System.Net.WebUtility.UrlDecode(wvLogin.Request.Url.AbsoluteString);
// Do some stuff
CookieManager.SaveCookies();
}
}
else
{
AppDelegate.Logout();
}
}
}
Come posso raggiungere questo obiettivo? Qualsiasi aiuto è apprezzato come Iam nuovo per iOS e Xamarin.
Grazie per la risposta. Funzionerebbe per iOS 8? –
Purtroppo no, si tratta di nuove funzionalità aggiunte con iOS 9. sfSafariViewControllers funziona con le versioni precedenti di iOS, ma l'accesso ai cookie non è per quanto ne so. –
Oh. Qualche altra soluzione per questo usando UIWebView? –