2016-10-27 8 views
1

HTTP/Moduleを使用して認証要求をサーバーに送信し、セッションCookieを返します。 iOSでは、これらのCookieは、後続のHTTP/ModuleリクエストとWebViewリクエスト間で自動的に共有されます。私はHTTP /モジュールとAndroidのWebViewの間でクッキーを共有しようとしています。私はクッキーの転送を実現するには、このコードを築き上げてきましたNativeScript/TypeScript HTTP/ModuleからAndroid上のWebビューへのクッキーを共有する

import application = require("application"); 
declare var android: any; 
declare var java: any; 

/** other code goes here **/ 

private static syncCookies_android() { 

    // // Get cookies from the URLSession 
    var javaCookieManager = java.net.CookieHandler.getDefault(); 
    var cookieStore = javaCookieManager.getCookieStore(); 
    var cookieList = cookieStore.getCookies(); 

    console.log("cookieList: " + cookieList); 

    //Set the cookie for the web-view 
    var context = application.android.context; 
    var cookieSyncManager = android.webkit.CookieSyncManager.createInstance(context); 
    var cookieManager = android.webkit.CookieManager.getInstance(); 

    cookieManager.setAcceptCookie(true); 
    cookieManager.removeSessionCookie(); 
    for (var cookie of cookieList) { 
     console.log("cookie: " + cookie); 
     cookieManager.setCookie(config.apiServerURL, cookie); 
    } 
    cookieSyncManager.sync(); 

} 

これは近いですが、リスト内の項目を列挙しませんfor (var cookie of cookieList)データ構造をループ。

出力: JS: cookieList: [CFID=9470738, CFTOKEN=22cf8b7e0e4d8778-4408CB33-C541-D779-2FECB8F2324F1CAA, MESSAGEMODE=chrono, BNI_OFPSSL=0000000000000000000000006901500a00005000] chromium: [INFO:library_loader_hooks.cc(104)] Chromium logging enabled: level = 0, default verbosity = 0 は、だから私は、私は私が期待して戻ってデータを取得しています知っているが、javascript配列のような役割を果たし形態であることとは思われません。

console.log("cookie: " + cookie);が呼び出されることはありません。

+0

のようなものに解決されること。これにより、値を配列としてループすることができます。しかし、 'setCookie'への私の呼び出しは、スレッドをクラッシュさせるようです。 – ahalls

答えて

3

デバッグツールを発見しましたconsole.dir(obj)オブジェクトのすべてのメソッドと属性を表示するjavascript関数です。

私はを私のcookieListtoString()と私の個人のcookieで呼び出して、これらの引数を必要な型に変換する必要があることを発見しました。

このコードは、私の作品:

private static syncCookies_android() { 

    // // Get cookies from the URLSession 
    var javaCookieManager = java.net.CookieHandler.getDefault(); 
    var cookieStore = javaCookieManager.getCookieStore(); 
    var cookieList = cookieStore.getCookies(); 

    //Set the cookie for the webview 
    var context = application.android.context; 
    var cookieSyncManager = android.webkit.CookieSyncManager.createInstance(context); 
    var cookieManager = android.webkit.CookieManager.getInstance(); 

    cookieManager.setAcceptCookie(true); 
    cookieManager.removeSessionCookie(); 
    for (var cookie of cookieList.toArray()) { 
     cookieManager.setCookie(config.apiServerURL, cookie.toString()); 
    } 
    cookieSyncManager.sync(); 
    cookieManager.flush(); 
} 

config.apiServerURLが、私は `getCookies()`の戻り値にメソッド `のtoArrayを()`見つけたhttp://my.server.com

関連する問題