2016-12-30 17 views
2

セッションIDとユーザIDの詳細を使用してのWebViewの私のドメインのURLにログインを維持する方法+のOAuth2トークンに署名し、私はクッキー設定しています:では私はネイティブのGoogleとの私のサーバーからの応答を取得しています

String cookieSessionString = "JSESSIONID" + "=" + i.getStringExtra("C_session_id"); 
    String cookieEmailString = "useremail" + "=" + i.getStringExtra("C_user_email"); 
    String cookieNameString = "username" + "=" + i.getStringExtra("C_user_name"); 
    String cookieUseridString = "userid" + "=" + i.getStringExtra("C_user_id"); 
    CookieManager cookieManager = CookieManager.getInstance(); 
    CookieSyncManager cookieSyncManager = CookieSyncManager.createInstance(webView.getContext()); 
    cookieManager.setCookie("mydomain.co", cookieSessionString); 
    cookieManager.setCookie("mydomain.co", cookieEmailString); 
    cookieManager.setCookie("mydomain.co", cookieNameString); 
    cookieManager.setCookie("mydomain.co", cookieUseridString); 
    cookieManager.setAcceptCookie(true); 
    cookieSyncManager.getInstance().sync(); 

を私は呼び出していWebViewの:

 webView.getSettings().setAppCacheEnabled(true); 
     WebViewDatabase.getInstance(this).clearHttpAuthUsernamePassword(); 
     webView.getSettings().setDatabaseEnabled(true); 
     webView.getSettings().setDomStorageEnabled(true); 
     webSettings.getCacheMode(); 
     webView.loadUrl(base_url); 
webView.setWebViewClient(new WebViewClient() { 
      @Override 
      public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
       startActivity(new Intent(MainActivity.this, NoDataActivity.class).putExtra("Activity", "Main.class")); 
       super.onReceivedError(view, errorCode, description, failingUrl); 
      } 
      public boolean shouldOverrideUrlLoading(WebView view, String url) { 
            view.loadUrl(url); 
       return true; 
      } 
      @Override 
      public void onLoadResource(WebView view, String url){ 
       CookieManager cookieManager = CookieManager.getInstance(); 
       cookie = cookieManager.getCookie(url); 
       Log.d("ONloadResource","cookie is"+cookie); 
      } 
      @Override 
      public void onPageFinished(WebView view, String url) { 
       super.onPageFinished(view, url); 
       CookieManager cookieManager = CookieManager.getInstance(); 
       cookieManager.setCookie(url, cookie); 
       progressBar.setVisibility(View.GONE); 
       progressBar.setProgress(100); 
       if (url.contains("/ccavResponseHandler.jsp")) { 
        webView.loadUrl("javascript:window.HTMLOUT.processHTML ('<head>'+document.getElementsByTagName('html')[0].innerHTML+'</head>');"); 
       } 
      } 
      @Override 
      public void onPageStarted(WebView view, String url, Bitmap favicon) { 
       super.onPageStarted(view, url, favicon); 
       progressBar.setVisibility(View.VISIBLE); 
       progressBar.setProgress(5); 
      } 

      }); 

などもヘッダーを送信しようとした:WebViewのリットルで働いていなかった

extraHeaders.put("JSESSIONID", i.getStringExtra("C_session_id")); 
     extraHeaders.put("username", i.getStringExtra("C_user_name")); 
     extraHeaders.put("useremail", i.getStringExtra("C_user_email")); 
webView.loadUrl(url, extraHeaders);` 

オージー..!

私はどのように私のセッションURLとユーザーの電子メール、私のドメインのURLのwebviewのIDでログインすることができますか?

+0

私はgoogle + signin apiクライアントからネイティブにasyntaskを取得しています。セッションIDのトークンを使用してサーバーAPIに接続しています。その詳細をwebviewにログインする必要があります。これを実現するには – sudhir

答えて

1

あなたがAndroidでやっていることは、Web認証です。ほとんどのWebサイトはセッションIDを追跡し、ログインしたままにするためにCookieを発行します。この認証を維持するには、アクティビティ間で、またHTTPクライアントとWebview間でCookieを同期させておく必要があります。

私がやったやり方は、アプリケーションを拡張したクラスを作成してから、残りのアプリケーション全体で使用する単一のHttpClientを定義することでした。このコードは次のようになります。

public class AppSettings extends Application { 
    private static final DefaultHttpClient client = createClient(); 

    @Override 
    public void onCreate(){ 
    } 

    static DefaultHttpClient getClient(){ 
      return client; 
    } 
    private static DefaultHttpClient createClient(){ 
      BasicHttpParams params = new BasicHttpParams(); 
      SchemeRegistry schemeRegistry = new SchemeRegistry(); 
      schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
      final SSLSocketFactory sslSocketFactory = SSLSocketFactory.getSocketFactory(); 
      schemeRegistry.register(new Scheme("https", sslSocketFactory, 443)); 
      ClientConnectionManager cm = new ThreadSafeClientConnManager(params, schemeRegistry); 
      DefaultHttpClient httpclient = new DefaultHttpClient(cm, params); 
      httpclient.getCookieStore().getCookies(); 
      return httpclient; 
    } 

このクラスはまたAsyncTasksに適しており、複数の同時http要求を行っているのHttpClientを作成します。 ClientConnectionManagerにThreadSafeClientConnManagerを使用すると、バックボタンを押して2番目または3番目に開始するときに強制的に閉じることなく、AsyncTasks内でhttpリクエストを実行します。

また、すべてのアクティビティでアクセスできる単一のデフォルトのCookieストアも作成されます。 getClient()メソッドを呼び出すことによって、他のアクティビティでこれを使用します。例

public class SomeActivity extends Activity { 
     static DefaultHttpClient mClient = AppSettings.getClient(); 
     ... 
     try { 

      HttpGet httpget = new HttpGet('URL'); 
      HttpResponse response; 
      response = mClient.execute(httpget); 
      ... 
     } 
     ... 
    } 

については

あなたはそれが必要なのWebViewを使用して、クライアントと同じクッキーにアクセスして使用するためにそれを必要とする見つけた場合。 (onPageStarted方法で)あなたが正しいドメインでexample.comを切り替える必要があります

DefaultHttpClient mClient = AppSettings.getClient(); 


Cookie sessionInfo; 
List<Cookie> cookies = mClient.getCookieStore().getCookies(); 

if (! cookies.isEmpty()){ 
     CookieSyncManager.createInstance(getApplicationContext()); 
     CookieManager cookieManager = CookieManager.getInstance(); 

     for(Cookie cookie : cookies){ 
       sessionInfo = cookie; 
       String cookieString = sessionInfo.getName() + "=" + sessionInfo.getValue() + "; domain=" + sessionInfo.getDomain(); 
       cookieManager.setCookie("example.com", cookieString); 
       CookieSyncManager.getInstance().sync(); 
     } 
} 

:あなたはCookieManagerを使用して、クライアントのCookieストアを同期することができます。

+0

こんにちはSiddhesh、その動作していない.PLZは、これらのクッキーを取得する私のログを確認します – sudhir

+0

D/ONpagestared:クッキーisPHPSESSID = mt51f22f0opo7o884ushxxxxx; CL = Bilekahalli + Gate; PL = Bilekahalli + Gate; _gat = 1; _ga = GA1.2.474183444.1483288660;オファー=閉じる; JSESSIONID = E1EB02DD53BEF404XXXXXXXXXXxx; [email protected];ユーザー名= Sudheer;ユーザーID = 48 01-02 09:40:15.182 10133-10133/com.demo.app D/ONPagefinished:Cookie isPHPSESSID = mt51f22f0opo7o884ushxxxxx; CL = Bilekahalli + Gate; PL = Bilekahalli + Gate; _gat = 1;オファー=閉じる; JSESSIONID = E1EB02DD53BEF404xxxxxxxxxxxx; [email protected];ユーザー名= Sudheer;ユーザーID = 48; _ga = GA1.2.474183444.1483288660 – sudhir

+0

これはあなたのクッキー – siddhesh

関連する問題