Android实现授权访问网页的方法
本文实例讲述了Android授权访问网页的实现方法,即使用Webview显示OAuthVersion2.aImplicitGrant方式授权的页,但是对于移动终端不建议使用Authorizecodegrant方式授权。
具体功能代码如下所示:
importandroid.annotation.SuppressLint; importandroid.app.Activity; importandroid.content.Intent; importandroid.graphics.Bitmap; importandroid.net.http.SslError; importandroid.os.Bundle; importandroid.util.Log; importandroid.webkit.SslErrorHandler; importandroid.webkit.WebSettings; importandroid.webkit.WebView; importandroid.webkit.WebViewClient; importcom.tencent.weibo.oauthv2.OAuthV2; importcom.tencent.weibo.oauthv2.OAuthV2Client; /** *使用Webview显示OAuthVersion2.aImplicitGrant方式授权的页 *(移动终端不建议使用Authorizecodegrant方式授权 *本类使用方法 *调用本类的地方请添加如下代码 *//请将OAuthV2Activity改为类的类名 *Intentintent=newIntent(OAuthV2Activity.this,OAuthV2AuthorizeWebView.class); *intent.putExtra("oauth",oAuth);//oAuth为OAuthV2类的实例,存放授权相关信?? *startActivityForResult(intent,myRrequestCode);//请设置合适的requsetCode *重写接收回调信息的方 *if(requestCode==myRrequestCode){//对应之前设置的的myRequsetCode *if(resultCode==OAuthV2AuthorizeWebView.RESULT_CODE){ *//取得返回的OAuthV2类实例oAuth *oAuth=(OAuthV2)data.getExtras().getSerializable("oauth"); *} *} *@seeandroid.app.Activity#onActivityResult(intrequestCode,intresultCode,Intentdata) */ publicclassMyWebViewextendsActivity{ publicfinalstaticintRESULT_CODE=2; privateOAuthV2oAuth; privatefinalStringTAG="MyWebView"; privateWebViewmWebView; @SuppressLint("NewApi") @Override publicvoidonCreate(BundlesavedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.webview_qq); mWebView=(WebView)findViewById(R.id.qq_mywebview);; mWebView.setVerticalScrollBarEnabled(false); mWebView.setHorizontalScrollBarEnabled(false); Intentintent=this.getIntent(); oAuth=(OAuthV2)intent.getExtras().getSerializable("oauth"); StringurlStr=OAuthV2Client.generateImplicitGrantUrl(oAuth); WebSettingswebSettings=mWebView.getSettings(); webSettings.setJavaScriptEnabled(true); webSettings.setSupportZoom(true); mWebView.requestFocus(); mWebView.loadUrl(urlStr); System.out.println(urlStr.toString()); Log.i(TAG,"WebViewStarting...."); WebViewClientclient=newWebViewClient(){ /*回调方法,当页面加载时执行*/ @Override publicvoidonPageStarted(WebViewview,Stringurl,Bitmapfavicon){ Log.i(TAG,"WebViewonPageStarted..."); Log.i(TAG,"URL="+url); if(url.indexOf("access_token=")!=-1){ intstart=url.indexOf("access_token="); StringresponseData=url.substring(start); OAuthV2Client.parseAccessTokenAndOpenId(responseData,oAuth); Intentintent=newIntent(); intent.putExtra("oauth",oAuth); setResult(RESULT_CODE,intent); finish(); } super.onPageStarted(view,url,favicon); Log.i(TAG,"999999999"); } /*TODOAndroid2.2及以上版本才能使用该方法,目前https://open.t.qq.com中存在http资源会引起sslerror,待网站修正后可去掉该方*/ publicvoidonReceivedSslError(WebViewview,SslErrorHandlerhandler,SslErrorerror){ if((null!=view.getUrl())&&(view.getUrl().startsWith("https://open.t.qq.com"))){ handler.proceed();//接受证书 }else{ handler.cancel();//默认的处理方式,WebView变成空白 } //handleMessage(Messagemsg);其他处理 } }; mWebView.setWebViewClient(client); } }