生活随笔
收集整理的這篇文章主要介紹了
WebView实例开发之人人网Oauth2认证
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? ?今天做了一個webview網絡操作的實例,這里與大家分享。相信開發過新浪、騰訊、豆瓣以及人人等微博的開發者都知道OAuth這個認證框架。這些開放平臺上也有自己開發好了的SDK,只需要下載過來即可使用。今天主要是結合webview來實現人人網的認證授權。?
? ?OAuth 2.0驗證授權流程,支持網站、站內應用、手機客戶端、桌面客戶端等。 具體可以參考:
? ?人人的開放平臺的認證流程:http://wiki.dev.renren.com/wiki/Authentication
? ?OAuth2.0的協議標準:http://oauth.net/2/
在android的瀏覽器應用中,經常會使用到webview。這里webview的概念網絡上一大堆,這里直接復制網絡上的描述:
WebView(網絡視圖)能加載顯示網頁,可以將其視為一個瀏覽器。它使用了WebKit渲染引擎加載顯示網頁,實現WebView有以下兩種不同的方法:
第一種方法的步驟:
1.在要Activity中實例化WebView組件:WebView webView = new WebView(this);
2.調用WebView的loadUrl()方法,設置WevView要顯示的網頁:
? 互聯網用:webView.loadUrl("http://www.google.com");
? 本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中
3.調用Activity的setContentView( )方法來顯示網頁視圖
4.用WebView點鏈接看了很多頁以后為了讓WebView支持回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點擊系統回退剪鍵,整個瀏覽器會調用finish()而結束自身,而不是回退到上一頁面
5.需要在AndroidManifest.xml文件中添加權限,否則會出現Web page not available錯誤。
? <uses-permission android:name="android.permission.INTERNET" />
嘿嘿以上的描述說的挺清楚的了。
以下是webview開發的實例,獲取人人的授權token的核心代碼
?
package?com.xzw.token;??import?java.io.BufferedReader;?import?java.io.IOException;?import?java.io.InputStreamReader;??import?org.apache.http.HttpEntity;?import?org.apache.http.HttpResponse;?import?org.apache.http.client.ClientProtocolException;?import?org.apache.http.client.HttpClient;?import?org.apache.http.client.methods.HttpGet;?import?org.apache.http.impl.client.DefaultHttpClient;?import?org.json.JSONException;?import?org.json.JSONObject;??import?android.app.Activity;?import?android.app.AlertDialog;?import?android.app.ProgressDialog;?import?android.content.DialogInterface;?import?android.graphics.Bitmap;?import?android.os.Bundle;?import?android.util.Log;?import?android.view.Window;?import?android.webkit.WebSettings;?import?android.webkit.WebView;?import?android.webkit.WebViewClient;?import?android.widget.Toast;??public?class?OAuthActivity?extends?Activity?{?????private?static?final?String?TAG?=?"OAuthActivity";??????private?static?final?String?CLIENT_ID?=?"e2e5e39bf9ff4b5a8245735a94d50e86";??????private?static?final?String?CLIENT_SECRET?=?"b6ba1f9fa8ff47889abe2e2d5928d6fd";??????private?static?final?String?REDIRECT_URL?=?"http://192.168.51.141";?//?重定向地址?????private?static?final?String?AUTHORIZE_URL?=?"https://graph.renren.com/oauth/authorize?client_id=%s&redirect_uri=%s&response_type=code";?//?Oauth2認證地址?????private?static?final?String?ACCESS_TOKEN_URL?=?"https://graph.renren.com/oauth/token?grant_type=authorization_code&client_id=%s&redirect_uri=%s&client_secret=%s&code=%s";??????private?WebView?mLoginWebView;?????private?ProgressDialog?progressDialog;?????private?AlertDialog?alertDialog;??????@Override?????public?void?onCreate(Bundle?savedInstanceState)?{?????????super.onCreate(savedInstanceState);?????????requestWindowFeature(Window.FEATURE_NO_TITLE);?????????setContentView(R.layout.activity_main);?????????initWebView();??????}????????????private?void?initWebView()?{??????????mLoginWebView?=?(WebView)?findViewById(R.id.loginView);??????????????????WebSettings?settings?=?mLoginWebView.getSettings();?????????settings.setJavaScriptEnabled(true);?????????settings.setSupportZoom(true);???????????settings.setBuiltInZoomControls(true);???????????String?url?=?String.format(AUTHORIZE_URL,?new?Object[]?{?CLIENT_ID,?????????????????REDIRECT_URL?});???????????????????mLoginWebView.loadUrl(url);?????????????????????progressDialog?=?ProgressDialog.show(this,?null,?"正在加載,請稍后...");?????????alertDialog?=?new?AlertDialog.Builder(this).create();???????????mLoginWebView.setWebViewClient(new?MyWebViewClient());??????}??????class?MyWebViewClient?extends?WebViewClient?{????????????????????@Override?????????public?boolean?shouldOverrideUrlLoading(WebView?view,?String?url)?{?????????????Log.i(TAG,?"-shouldOverrideUrlLoading--startwith-"?+?url);?????????????String?callback_url?=?REDIRECT_URL?+?"/?";??????????????if?(url.startsWith(callback_url))?{???????????????????????????????????Log.i(TAG,?"-shouldOverrideUrlLoading--"?+?url);?????????????????String?code?=?url.replace(callback_url?+?"code=",?"");?????????????????System.out.println("code="?+?code);?????????????????String?urlString?=?String.format(ACCESS_TOKEN_URL,?????????????????????????new?Object[]?{?CLIENT_ID,?REDIRECT_URL,?CLIENT_SECRET,?????????????????????????????????code?});?????????????????parseUrl(urlString);?????????????????return?false;?????????????}?else?{?????????????????view.loadUrl(url);?????????????????return?true;?????????????}??????????}??????????@Override?????????public?void?onPageStarted(WebView?view,?String?url,?Bitmap?favicon)?{?????????????Log.i(TAG,?"-onPageFinished-"?+?url);?????????????if?(!progressDialog.isShowing())?{??????????????????progressDialog.show();?????????????}??????????}??????????@Override?????????public?void?onPageFinished(WebView?view,?String?url)?{?????????????Log.i(TAG,?"-onPageFinished-"?+?url);?????????????if?(progressDialog.isShowing())?{??????????????????progressDialog.dismiss();?????????????}??????????}??????????@Override?????????public?void?onReceivedError(WebView?view,?int?errorCode,?????????????????String?description,?String?failingUrl)?{??????????????Log.i(TAG,?"-onReceivedError-"?+?failingUrl);??????????????Toast.makeText(OAuthActivity.this,?"網頁加載出錯",?Toast.LENGTH_LONG)?????????????????????.show();?????????????alertDialog.setTitle("Error");?????????????alertDialog.setMessage(description);?????????????alertDialog.setButton("ok",?new?DialogInterface.OnClickListener()?{??????????????????@Override?????????????????public?void?onClick(DialogInterface?dialog,?int?which)?{??????????????????}?????????????});?????????????alertDialog.show();??????????}?????}?????????????private?void?parseUrl(String?url){??????????HttpClient?client?=?new?DefaultHttpClient();?????????HttpGet?get?=?new?HttpGet(url);??????????????????try?{?????????????HttpResponse?response?=?client.execute(get);?????????????HttpEntity?entity?=?response.getEntity();??????????????BufferedReader?buffReader?=?new?BufferedReader(new?InputStreamReader(?????????????????????entity.getContent()));?????????????StringBuffer?strBuff?=?new?StringBuffer();?????????????String?result?=?null;?????????????while?((result?=?buffReader.readLine())?!=?null)?{?????????????????strBuff.append(result);?????????????}?????????????System.out.println(strBuff.toString());?????????????parseJson(strBuff.toString());?????????}?catch?(ClientProtocolException?e)?{??????????????????????????e.printStackTrace();?????????}?catch?(IOException?e)?{??????????????????????????e.printStackTrace();?????????}?????}?????????????private?void?parseJson(String?strJson){?????????try?{?????????????JSONObject?json?=?new?JSONObject(strJson);?????????????int?expires_in?=?json.getInt("expires_in");?????????????String?refresh_token?=?json.getString("refresh_token");?????????????String?access_token?=?json.getString("access_token");?????????????System.out.println("過期時間="+expires_in+"?\naccess_token="+access_token);?????????}?catch?(JSONException?e)?{??????????????????????????e.printStackTrace();?????????}?????????? ?????}?}?? 看下效果圖:
?
?
?歡迎大家一起學習交流。源碼已上傳
weibo:http://weibo.com/xzw1989
轉載于:https://blog.51cto.com/xuzhiwei/1031871
總結
以上是生活随笔為你收集整理的WebView实例开发之人人网Oauth2认证的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。