0

最低限必要な API 8 を使用して Android アプリを作成しました。ユーザーはバックエンドで Cookie を使用して認証されます。これは、API レベル 9 以上のすべてのデバイスで機能します。Cookie は CookieManager で保存されます。

CookieManager cManager = CookieManager.getInstance();
CookieSyncManager.createInstance(LauncherApplication.getAppContext());
cManager.setAcceptCookie(true);
cManager.setCookie(".xxxxxxxx.xx", "MobileGuid=" + guid);
CookieSyncManager.getInstance().sync();

この Cookie が CookieManager でも利用できるかどうかを確認します。

public static boolean hasCookie(){
    CookieManager cManager = CookieManager.getInstance();
    String cookieString = cManager.getCookie(".xxxxxxx.xx");
    if(cookieString != null && cookieString.contains("MobileGuid")){
        return true;
    }
    return false;
}

これは常に true を返しますが、Android のバージョンが 2.2 よりも高い場合、Cookie は WebView でのみ使用できます。(これはphpinfoで確認しました)

私の WebView 構成は次のようになります。

String databasePath = LauncherApplication.getAppContext().getApplicationContext().getDir("database",
            Context.MODE_PRIVATE).getPath();

    WebSettings mainWebSettings = mainWebView.getSettings();
    mainWebSettings.setJavaScriptEnabled(true);
    mainWebSettings.setAppCacheEnabled(true);
    mainWebSettings.setDatabaseEnabled(true);
    mainWebSettings.setDomStorageEnabled(true);
    mainWebSettings.setDatabasePath(databasePath);
4

2 に答える 2

1

cManager.setCookie() を呼び出すときは、渡してみてください

cManager.setCookie("a.xxxxxxxx.xx", "MobileGuid=" + guid + "; domain=xxxxxxx.xx");

そのため、最初のパラメーター (文字通り文字「a」) に「a」を追加"domain=xxxxxxx.xx"し、Cookie 自体に追加しました。

書かれたコードはすべて正しいようです.API 14デバイスがCookieを送信しているのに、API 9デバイスがCookieを送信しないという同様の苦労がありました. なぜそれが機能するのか正確にはわかりませんが、それが唯一の助けになりました。

于 2013-09-06T17:18:46.253 に答える
0

Hylianpuffball の答えのように、アイデアはドメイン名の下に文字を追加することです. CookieManager は .domain.com のようなものを探しており、ドメイン名を取得するために一種の部分文字列が行われていると思います。

ドットまたは任意の文字を追加するだけで機能します

于 2013-11-21T17:06:50.360 に答える