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);
}
}