web-dev-qa-db-ja.com

WebviewはCookieを受け入れることができません

WebViewベースのAndroidアプリを作成しています。これにより、ユーザーは携帯電話会社にログインできます。アプリを実行すると、WebViewはWebサイトを開きますが、WebViewが開かないというメッセージが表示されます。クッキーを許可します。ここで見つけたさまざまなコードを試しましたが、どれも機能しませんでした。誰か助けてもらえますか?使用しているコードは次のとおりです。

//in oncreate
final CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(this);
final CookieManager cookieManager = CookieManager.getInstance();
cookieManager.setAcceptCookie(true);
cookieManager.removeSessionCookie();
String[] cookies = getCookie("https://myaccount.ee.co.uk/login-dispatch/?fa=register");
for (String cookie : cookies) {
    cookieManager.setCookie("https://myaccount.ee.co.uk/login-dispatch/?fa=register", cookie);
}
cookieSyncManager.sync();
webView.loadUrl("https://myaccount.ee.co.uk/login-dispatch/?fa=register");

およびgetCookiesメソッド:

public String[] getCookie(String siteName) {
     CookieManager cookieManager = CookieManager.getInstance();
     String cookies = cookieManager.getCookie(siteName);
     String[] cookiesArray = cookies.split(";");
     return cookiesArray;
}
13
Darko Petkovski

shouldOverrideUrlLoadingメソッドをオーバーライドして、WebViewがすべてのURLリンクを処理するようにし、どのリンクでも新しいブラウザを起動しないようにしてください。

_webview.setWebViewClient(new WebViewClient() {  
          @Override  
          public boolean shouldOverrideUrlLoading(WebView view, String url)  
          {  
            return false;  
          }  
});   

webview.loadUrl(url);
_

これが機能しない場合は、

_cookieManager.setAcceptCookie(true);
_

_cookieManager.setAcceptThirdPartyCookies(true);
_

cookieManager.setAcceptCookie(true);はLollipopでは機能しないためです。

7
Vassilis Pallas

チェックしましたか Androidドキュメント

APIレベル> = 21を使用している場合、WebViewは自動的にCookieを同期します。

これを試さない場合:

    final CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(this);
    final CookieManager cookieManager = CookieManager.getInstance();
    cookieManager.removeAllCookie();
    cookieManager.setAcceptCookie(true);
    String[] cookies = getCookie(cookieManager, "https://myaccount.ee.co.uk/login-dispatch/?fa=register");
    for (String cookie : cookies) {
        cookieManager.setCookie("https://myaccount.ee.co.uk/login-dispatch/?fa=register", cookie);
    }
    cookieSyncManager.sync();
    webView.loadUrl("https://myaccount.ee.co.uk/login-dispatch/?fa=register");

getCookies:

  public String[] getCookie(CookieManager cookieManager, String siteName){
        String cookies = cookieManager.getCookie(siteName);
        String[] cookiesArray=cookies.split(";");
        return cookiesArray;
    }
3
Alper Cem Polat

Javascriptを有効にしてから、Cookieマネージャのインスタンスを取得してCookieを受け入れる必要があります。javascriptenableを使用すると、Cookieが保存されます。

webView.getSettings()。setJavaScriptEnabled(true); CookieManager.getInstance()。setAcceptCookie(true);

3

@Darko。

CookieManager.getInstance()は、アプリケーション全体のCookieManagerインスタンスです。したがって、アプリケーション内のすべてのWebビューに対してCookieを有効または無効にします。

通常、Webビューがすでに初期化されている場合は機能するはずです: http://developer.Android.com/reference/Android/webkit/CookieManager.html#getInstance()

Webビューを初期化する前にCookieManager.getInstance().setAcceptCookie(true);を呼び出すかもしれません。

ありがとう、

0
Cruzer

多くの場合、ログインにはjavascriptが必要です。これを、loadUrlの前に追加してみてください。

webView.getSettings().setJavaScriptEnabled(true);

0
Maxim Gurevich