2

Xamarin アプリでは、ユーザーが独自の SSO ソリューションを使用してログインできるようにする必要があります。

iOS アプリでこれが機能する方法は、Web ビューでコントローラーを開き、それをサイトに向けて、ログインしていることを示す Cookie を使用してサイトに戻るまで Cookie を監視し続けることです。しかし、Xamarin では、WebView の Cookie にアクセスする方法がわかりません。私たちの Xamarin アプリは Windows 8.1 と WinPhone 8.1 で実行されていますが、いずれ Android にも拡張される予定なので、クロスプラットフォーム ソリューションが必要です。

では、Xamarin WebView で Cookie にアクセスするにはどうすればよいでしょうか。

4

2 に答える 2

4

PCL プロジェクトでカスタム コントロールを作成し、各プラットフォームにカスタム Web ビューを追加する必要があります。次に、プラットフォーム固有の実装が Cookie を取得し、それを pcl-webview から使用できます。

Android では、次のコードで Cookie を取得できます。

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

iOS の場合:

NSHttpCookieStorage storage = NSHttpCookieStorage.SharedStorage;

github のソースコード: https://github.com/seansparkman/CookiesWebView

于 2016-08-11T09:30:20.893 に答える
2

各モバイル プラットフォームの Cookie の優れた点は、アプリ全体で共有される Cookie コンテナーであることです。WebView は、プラットフォームが保持する Cookie を保持しないため、HTTP 呼び出しやさまざまな WebView でさえ、すべて同じ共有 Cookie コンテナーにアクセスできます。

ただし、リフレクションが必要なため、一部のプラットフォームから引き出すのは難しい場合があります。SSO ソリューションで、最初に Web ページにアクセスしてサインオンするだけでよい場合は、とにかくすべて同じ Cookie を共有するため、これを行う必要はありません。

アンドロイド

Android には、HTTP と WebView 用に 2 つの個別の Cookie コンテナーがあります。その奇妙なもの。したがって、あなたは持っています

    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 はもう一方を使用し、各コンテナーで Cookie を取得および設定できます。

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
于 2016-08-11T13:44:04.337 に答える