0

次の流れを実行したいと思います。

  1. webview を開き、account1 で Gmail にログインし少しブラウジングします。
  2. account1の現在のセッションと現在の URL を何らかの方法で保存します。

  3. account2でログインするには、 account1のセッションを破棄する必要があります。

  4. ここで、 account2を使用して Gmail にログインし、少しブラウジングします。

  5. もう一度、現在のセッションとaccount2の現在の URL を何らかの方法で保存します。

ここで、ユーザーの操作時にaccount1account2のセッションを切り替えられるようにしたいと考えています。

セッションはURL、URLパラメーター、およびそのCookieによって決定されると想定しているため(おそらく間違っています)、アカウントごとにすべて保存し、切り替え中に次のことを行いました。

// url == url + params
CookieManager.getInstance().removeAllCookies();
CookieManager.getInstance().setCookie(url, cookie);
webview.loadUrl(url);

うまくいきませんでした。そのため、URLをロードする前にJavascriptを使用してCookieを挿入しようとしましたが、これも機能しませんでした。機能しなかったということは、セッションがどれも利用できなかったことを意味し、Gmailのログイン画面に戻りました。

どうやってやるの?私は何が欠けていますか?

4

1 に答える 1

1

この方法を試してください

public List<Cookie>  sync(String url) {

        CookieManager cookieManager = CookieManager.getInstance();
        if (cookieManager == null)
            return null;

        RFC2109Spec cookieSpec = new RFC2109Spec();
        String rawCookieHeader = null;
        try {
            URL parsedURL = new URL(url);
            rawCookieHeader = cookieManager.getCookie(parsedURL.getHost());
            if (rawCookieHeader == null)
                return null;
            int port = parsedURL.getPort() == -1 ? parsedURL.getDefaultPort() : parsedURL.getPort();

            CookieOrigin cookieOrigin = new CookieOrigin(parsedURL.getHost(), port, "/", false);
            List<Cookie> cookies = cookieSpec.parse(new BasicHeader("set-cookie", rawCookieHeader), cookieOrigin);
            return cookies;
        } catch (Exception e) {

        }
        return null;
    }


    public void sync(List<Cookie> cookies,String url) {
        if (cookies != null) {

            CookieManager cookieManager = CookieManager.getInstance();
            cookieManager.setAcceptCookie(true);
            for (Cookie cookie : cookies) {

                Cookie sessionInfo = cookie;
                String cookieString = sessionInfo.getName() + "=" + sessionInfo.getValue() + "; domain=" + sessionInfo.getDomain();
                cookieManager.setCookie(url, cookieString);
                CookieSyncManager.getInstance().sync();
            }
        }
    }

使い方

webview.setWebViewClient(new WebViewClient(){
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                return super.shouldOverrideUrlLoading(view, url);
                sync(url); // store list of cookies in Global variable return by this function. 
            }
        });

        //before loading/swithich account

        //sync(yourglobalvariable of list of cookis, url of respective account);
        sync(cookies,urlAccount1);
        webview.loadUrl(url);
于 2013-09-24T04:23:12.727 に答える