2016-08-11 4 views
2

В нашем приложении Xamarin мы должны разрешить нашим пользователям входить в систему, используя свое собственное решение SSO.Как получить доступ к файлам cookie в Xamarin WebView?

Как это работает в нашем приложении iOS, мы открываем контроллер с веб-представлением и указываем его на нашем сайте и продолжаем смотреть куки, пока они не вернутся на наш сайт с файлом cookie, который указывает, что они 'вошел в систему. Но в Xamarin я не вижу, как я могу получить доступ к файлам cookie для WebView. Наше приложение Xamarin работает на Windows 8.1 и WinPhone 8.1, но в какой-то момент оно будет распространено на Android, поэтому мне нужно кросс-платформенное решение.

Итак, как мне получить доступ к файлам cookie в Xamarin WebView?

ответ

3

Вам необходимо создать собственный элемент управления в своем PCL-проекте, а затем добавить пользовательский веб-просмотр для каждой платформы. Внеочередная реализация платформы затем получает coockies, и вы можете использовать ее из своего pcl-webview.

На Android вы можете получить печенье с помощью следующего кода:

var cookieHeader = CookieManager.Instance.GetCookie(url); 

И на прошивкой:

NSHttpCookieStorage storage = NSHttpCookieStorage.SharedStorage; 

Исходник- на GitHub: https://github.com/seansparkman/CookiesWebView

+1

Спасибо. Этот проект старше 2 лет, нацелен на Xamarin 1.4 и не содержит оконную платформу. Вы знаете решение, которое работает с Windows 8.1 и Xamarin 2.0? – Simon

+0

Мы используем Xamarin.Forms 2.1.0.6529, и он работает как шарм (ios and android). Мы просто скопировали части, которые нам нужны для нашего проекта. Github-link просто показывает, как решить эту проблему. Для Windows вам нужно посмотреть код WinPhone и попытаться его принять. – Joehl

0

Самое замечательное печенье в каждом из мобильные платформы - это общие контейнеры cookie в приложении. WebView не поддерживает Cookie на платформе, и поэтому даже HTTP-вызовы и различные WebView могут обращаться к одному и тому же совместно используемому контейнеру cookie.

Однако им может быть сложно выйти из некоторых платформ, поскольку это отражение необходимо. Если ваше решение SSO требует, чтобы они сначала отправлялись на веб-страницы, а затем все они используют одни и те же файлы cookie, и вам не нужно будет ничего делать.

Android

Android 2 отдельные куки контейнеры для HTTP и WebView годов. Его странный. Поэтому у вас есть

using System.Net.Http; 

    private static CookieContainer _cookieContainer = new System.Net.CookieContainer(); 
    private static Android.Webkit.CookieManager _cookieManager = Android.Webkit.CookieManager.Instance; 

С HTTP запросов вы делаете это

HttpClient client = new HttpClient(new HttpClientHandler() { CookieContainer = cookieContainer }); 

WebView использует другую, и вы можете получить и установить куки в каждом контейнере.

IOS

Это один легко, все они хранятся в

NSHttpCookieStorage.SharedStorage.Cookies 

WinRT

using Windows.Web.Http; //NOT: Microsoft.Net.Http 

var filter = new HttpBaseProtocolFilter(); 
HttpClient client = new HttpClient(filter); 

// Use this, while it comes from an instance, its shared across everything. 
filter.CookieManager 
Смежные вопросы