2016-08-11 4 views
2

Xamarin 앱에서는 사용자가 자신의 SSO 솔루션을 사용하여 로그인 할 수 있도록 허용해야합니다.Xamarin WebView의 쿠키에 어떻게 액세스합니까?

Google의 iOS 앱에서 작동하는 방식은 웹보기가있는 컨트롤러를 열고 사이트를 가리키며 쿠키가 사이트를 방문 할 때까지 쿠키가 계속 표시 될 때까지 계속 봅니다. 그러나 Xamarin에서는 WebView의 쿠키에 어떻게 액세스 할 수 있는지 알 수 없습니다. 우리 Xamarin 앱은 Windows 8.1 및 WinPhone 8.1에서 실행되지만 어느 시점에서 Android로 확장되므로 크로스 플랫폼 솔루션이 필요합니다.

그래서 어떻게 Xamarin WebView에서 쿠키에 액세스합니까?

답변

3

PCL 프로젝트에 사용자 지정 컨트롤을 만든 다음 각 플랫폼에 대해 사용자 지정 웹보기를 추가해야합니다. 플랫폼 보안 구현은 coockies를 얻고 pcl-webview에서 사용할 수 있습니다.

안드로이드에

당신은 다음 코드로 쿠키를 얻을 수 있습니다 :

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

그리고 iOS에서 : GitHub의에

NSHttpCookieStorage storage = NSHttpCookieStorage.SharedStorage; 

소스 코드를 : https://github.com/seansparkman/CookiesWebView

+1

감사 저장됩니다. 이 프로젝트는 2 세 이상이며 Xamarin 1.4를 대상으로하며 Windows 플랫폼을 포함하지 않습니다. Windows 8.1 및 Xamarin 2.0에서 작동하는 솔루션을 알고 있습니까? – Simon

+0

우리는 Xamarin.Forms 2.1.0.6529를 사용하며 매력 (ios 및 android)처럼 작동합니다. 프로젝트에 필요한 부분을 복사했습니다. github-link는이 문제를 해결하는 방법을 보여줍니다. Windows의 경우 WinPhone 코드를보고 채택해야합니다. – Joehl

0

의 각 쿠키의 좋은 점 모바일 플랫폼은 앱 전체에서 공유 쿠키 컨테이너입니다. WebView는 쿠키의 플랫폼을 보유하지 않으므로 HTTP 호출 및 다른 WebView도 모두 동일한 공유 쿠키 컨테이너에 액세스 할 수 있습니다.

그러나 일부 플랫폼에서 탈퇴하는 것은 까다로울 수 있으므로 반성이 필요합니다. SSO 솔루션이 먼저 웹 페이지에 로그인해야만 로그인하면 어쨌든 모두 동일한 쿠키를 공유하므로이 작업을 수행 할 필요가 없습니다.

안드로이드

안드로이드는 HTTP 및 웹보기의 2 개 별도의 쿠키 컨테이너를 가지고있다. 그것 이상한 하나. 따라서 당신은 당신이

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

웹보기가 다른 하나를 사용 할 HTTP 요청으로

using System.Net.Http; 

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

이 있고 얻을 각각의 용기에 쿠키를 설정할 수 있습니다.

아이폰 OS

이 하나가 쉽다는, 그들은 모두

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 
관련 문제