0
点赞
收藏
分享

微信扫一扫

使用Webview访问网站的session问题


我现在负责的一个项目中,涉及到第三方登录的问题(Oauth认证),我们公司开发的网站项目中,已经实现第三方登录的功能了(这是为网站开发的客户端),所以Android客户端这边就决定用WebView先访问自己服务器的一个web页面,再从公司的页面访问进行第三方登录。于是我想到了用JavaScript和Android交互的方案,在网站上登录完后调用Android本地的方法将值传回来,同时跳转回客户端。
            本来感觉挺简单的,但实际中,遇到了Seesion的问题。就是说用IE访问和Android系统自带浏览器都能正常传递session值,但用WebView是就不行了,session值总是丢,但是不用WebView还没有办法执行回调。哎,解决吧....到网上找了很了,但总感觉和我的问题不一样。最后不行,把Android系统自带浏览器源码大概看了下,发现了点东西。其实是CookieSyncManager的问题,主要就是在WebView页面启动时把CookieSyncManager对象开启,页面关闭时再关闭,还有就是每次要把缓存删除了,直接看代码吧

package com.lasun.mobile.client.activity;
 
 import android.app.Activity;
 
 import android.os.Bundle;
 
 import android.webkit.CookieManager;
 
 import android.webkit.CookieSyncManager;
 
 import android.webkit.WebView;
 
 import android.webkit.WebViewClient;
 
 import com.lasun.mobile.client.utils.JavaScriptInterface;
 
 public class OauthActivity extends Activity {
 
 public final static String OAUTH_METHOD_TAG = "121333";
 
 private WebView mOauthWebView;
 
 @Override
 
 protected void onCreate(Bundle savedInstanceState) {
 
  
  
 super.onCreate(savedInstanceState);
 
  
  
 setContentView(R.layout.oauth_activity);
 
  
  
 initComponent();
 
  
  
 String url = "我们公司的一个页面";
 
  
  
 loadUrl(url);
 
 }
 
 private void loadUrl(String url) {
 
  
  
 mOauthWebView.loadUrl(url);
 
 }
 
 // 初始化内容控件
 
 private void initComponent(){
 
  
  
 mOauthWebView=(WebView)findViewById(R.id.webview);
 
  
  
 
  
  
 CookieSyncManager.createInstance(this);
 
  
  
 CookieSyncManager.getInstance().startSync();
 
  
  
 CookieManager.getInstance().removeSessionCookie();
 
  
  
 mOauthWebView.clearCache(true);
 
  
  
 mOauthWebView.clearHistory();
 
  
  
 
  
  
 mOauthWebView.getSettings().setJavaScriptEnabled(true);
 
  
  
 
 // 
  
 mOauthWebView.setWebChromeClient(new WebChromeClient());
 
  
  
 mOauthWebView.setWebViewClient(new WebViewClient());
 
  
  
 mOauthWebView.addJavascriptInterface(new JavaScriptInterface(OauthActivity.this), JavaScriptInterface.INVOKE_METHOD_NAME);
 
 }
 


 @Override
 
 protected void onResume() {
 
  
  
 super.onResume();
 
  
  
 CookieSyncManager.getInstance().stopSync();
 
 }
 

 @Override
 
 protected void onStop() {
 
  
  
 super.onStop();
 
  
  
 mOauthWebView.destroy();
 
  
  
 this.finish();
 
  
  
 
 }
 

 @Override
 
 protected void onPause() {
 
  
  
 super.onPause();
 
  
  
 CookieSyncManager.getInstance().sync();
 
 }
 
 }

举报

相关推荐

0 条评论