日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

WebView实例开发之人人网Oauth2认证

發(fā)布時間:2024/4/14 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 WebView实例开发之人人网Oauth2认证 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

? ? ?今天做了一個webview網(wǎng)絡(luò)操作的實例,這里與大家分享。相信開發(fā)過新浪、騰訊、豆瓣以及人人等微博的開發(fā)者都知道OAuth這個認(rèn)證框架。這些開放平臺上也有自己開發(fā)好了的SDK,只需要下載過來即可使用。今天主要是結(jié)合webview來實現(xiàn)人人網(wǎng)的認(rèn)證授權(quán)。?

? ?OAuth 2.0驗證授權(quán)流程,支持網(wǎng)站、站內(nèi)應(yīng)用、手機客戶端、桌面客戶端等。 具體可以參考:

? ?人人的開放平臺的認(rèn)證流程:http://wiki.dev.renren.com/wiki/Authentication

? ?OAuth2.0的協(xié)議標(biāo)準(zhǔn):http://oauth.net/2/

在android的瀏覽器應(yīng)用中,經(jīng)常會使用到webview。這里webview的概念網(wǎng)絡(luò)上一大堆,這里直接復(fù)制網(wǎng)絡(luò)上的描述:

WebView(網(wǎng)絡(luò)視圖)能加載顯示網(wǎng)頁,可以將其視為一個瀏覽器。它使用了WebKit渲染引擎加載顯示網(wǎng)頁,實現(xiàn)WebView有以下兩種不同的方法:
第一種方法的步驟:
1.在要Activity中實例化WebView組件:WebView webView = new WebView(this);
2.調(diào)用WebView的loadUrl()方法,設(shè)置WevView要顯示的網(wǎng)頁:
? 互聯(lián)網(wǎng)用:webView.loadUrl("http://www.google.com");
? 本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中
3.調(diào)用Activity的setContentView( )方法來顯示網(wǎng)頁視圖
4.用WebView點鏈接看了很多頁以后為了讓W(xué)ebView支持回退功能,需要覆蓋覆蓋Activity類的onKeyDown()方法,如果不做任何處理,點擊系統(tǒng)回退剪鍵,整個瀏覽器會調(diào)用finish()而結(jié)束自身,而不是回退到上一頁面
5.需要在AndroidManifest.xml文件中添加權(quán)限,否則會出現(xiàn)Web page not available錯誤。
? <uses-permission android:name="android.permission.INTERNET" />

嘿嘿以上的描述說的挺清楚的了。

以下是webview開發(fā)的實例,獲取人人的授權(quán)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";?//?應(yīng)用的APPkey?
  • ????private?static?final?String?CLIENT_SECRET?=?"b6ba1f9fa8ff47889abe2e2d5928d6fd";?//應(yīng)用的appke?secret?
  • ????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認(rèn)證地址?
  • ????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();//?初始化webview?
  • ?
  • ????}?
  • ????/**?
  • ?????*?初始化webview?
  • ?????*/?
  • ????private?void?initWebView()?{?
  • ?
  • ????????mLoginWebView?=?(WebView)?findViewById(R.id.loginView);?
  • ?????????
  • ????????WebSettings?settings?=?mLoginWebView.getSettings();?
  • ????????settings.setJavaScriptEnabled(true);//設(shè)置支持javascript?
  • ????????settings.setSupportZoom(true);??//?
  • ????????settings.setBuiltInZoomControls(true);?//設(shè)置支持縮放?
  • ?
  • ????????String?url?=?String.format(AUTHORIZE_URL,?new?Object[]?{?CLIENT_ID,?
  • ????????????????REDIRECT_URL?});?
  • ?
  • ????????//?加載網(wǎng)頁?
  • ????????mLoginWebView.loadUrl(url);???
  • ?
  • ????????//?網(wǎng)頁加載進(jìn)度條?
  • ????????progressDialog?=?ProgressDialog.show(this,?null,?"正在加載,請稍后...");?
  • ????????alertDialog?=?new?AlertDialog.Builder(this).create();?//創(chuàng)建AlertDialog?
  • ?
  • ????????mLoginWebView.setWebViewClient(new?MyWebViewClient());?
  • ?
  • ????}?
  • ?
  • ????class?MyWebViewClient?extends?WebViewClient?{?
  • ????????/**?
  • ?????????*?攔截URL地址,進(jìn)行業(yè)務(wù)操作?
  • ?????????*/?
  • ????????@Override?
  • ????????public?boolean?shouldOverrideUrlLoading(WebView?view,?String?url)?{?
  • ????????????Log.i(TAG,?"-shouldOverrideUrlLoading--startwith-"?+?url);?
  • ????????????String?callback_url?=?REDIRECT_URL?+?"/?";?
  • ?
  • ????????????if?(url.startsWith(callback_url))?{?//匹配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())?{?//網(wǎng)頁開始加載時,顯示進(jìn)度條。?
  • ????????????????progressDialog.show();?
  • ????????????}?
  • ?
  • ????????}?
  • ?
  • ????????@Override?
  • ????????public?void?onPageFinished(WebView?view,?String?url)?{?
  • ????????????Log.i(TAG,?"-onPageFinished-"?+?url);?
  • ????????????if?(progressDialog.isShowing())?{?//?加載完畢后,進(jìn)度條不顯示?
  • ????????????????progressDialog.dismiss();?
  • ????????????}?
  • ?
  • ????????}?
  • ?
  • ????????@Override?
  • ????????public?void?onReceivedError(WebView?view,?int?errorCode,?
  • ????????????????String?description,?String?failingUrl)?{?
  • ?
  • ????????????Log.i(TAG,?"-onReceivedError-"?+?failingUrl);?
  • ?
  • ????????????Toast.makeText(OAuthActivity.this,?"網(wǎng)頁加載出錯",?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();?
  • ?
  • ????????}?
  • ????}?
  • ????/**?
  • ?????*?URL解析?
  • ?????*?@param?url?
  • ?????*/?
  • ????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)?{?
  • ????????????//?TODO?Auto-generated?catch?block?
  • ????????????e.printStackTrace();?
  • ????????}?catch?(IOException?e)?{?
  • ????????????//?TODO?Auto-generated?catch?block?
  • ????????????e.printStackTrace();?
  • ????????}?
  • ????}?
  • ????/**?
  • ?????*?json解析?
  • ?????*?@param?strJson?
  • ?????*/?
  • ????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)?{?
  • ????????????//?TODO?Auto-generated?catch?block?
  • ????????????e.printStackTrace();?
  • ????????}?
  • ?????????
  • ?
  • ????}?
  • }?
  • ?
  • 看下效果圖:

    ?

    ?

    ?歡迎大家一起學(xué)習(xí)交流。源碼已上傳

    weibo:http://weibo.com/xzw1989

    轉(zhuǎn)載于:https://blog.51cto.com/xuzhiwei/1031871

    總結(jié)

    以上是生活随笔為你收集整理的WebView实例开发之人人网Oauth2认证的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。