国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Android > 正文

Android仿新浪微博oauth2.0授權界面實現代碼(2)

2019-12-12 04:34:21
字體:
來源:轉載
供稿:網友

oauth2.0授權界面,大致流程圖:

前提準備:

在新浪開放平臺申請appkey和appsecret:http://open.weibo.com/.
熟悉oauth2.0協議,相關知識:http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
OAuth2的access_token接口:http://open.weibo.com/wiki/OAuth2/access_token

代碼詳解

大致思路如下:建立一個webview加載授權界面,授權回調地址請參考Constants.java里面有詳細注解。頁面加載時會回調該方法,如果用戶同意(輸入自己微博的賬號密碼)就會成功獲取code然后發送一個異步的post請求獲access_token 若成功獲取access_token信息,則使用SharedPreferences保存所有重要信息,并跳轉到主界面。
異步的post設置的請求參數必須跟OAuth2的access_token接口里要求的請求參數一一對應。
這里獲取的access_token是后來每個接口的必備請求參數。

** * 自定義授權界面,申請令牌 */public class OAuthActivity extends Activity { //保存數據信息 private SharedPreferences preferences; private static final String TAG = "OAuthActivity"; @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.webview);  //獲取只能被本程序讀寫的SharedPreferences對象  preferences = getSharedPreferences("OAuth2.0", Context.MODE_PRIVATE);  //WebView加載回調頁  WebView webView = (WebView) findViewById(R.id.webView);  //管理WebView  WebSettings webSettings = webView.getSettings();  //啟用JavaScript調用功能  webSettings.setJavaScriptEnabled(true);  //啟用縮放網頁功能  webSettings.setSupportZoom(true);  //獲取焦點  webView.requestFocus();  //判斷網絡連接狀態,無網絡則去設置網絡,有網則繼續  String url = Constants.URL;  webView.loadUrl(url);  //WebViewClient主要幫助WebView處理各種通知、請求事件  WebViewClient client = new WebViewClient() {   /**    * 頁面加載時會回調該方法,如果用戶同意就會成功獲取code    * 然后發送一個異步的post請求獲取access_token    * 若成功獲取access_token信息,則保存所有重要信息    * 并跳轉到主界面    * @param view 顯現界面視圖    * @param url 加載網址    * @param favicon 網址的相關圖標    */   @Override   public void onPageStarted(WebView view, String url, Bitmap favicon) {    if (url.startsWith(Constants.REDIRECT_URL)) {     String code = url.split("=")[1];     //設置請求參數     RequestParams params = new RequestParams();     params.put("client_id", Constants.CLIENT_ID);     params.put("client_secret", Constants.APP_SECRET);     params.put("grant_type", "authorization_code");     params.put("redirect_uri", Constants.REDIRECT_URL);     params.put("code", code);     //發送異步post請求access_token令牌,并保存的OAthu的     // client_id和client_secret和access_token等重要信息     WeiboRestClient.post("oauth2/access_token", params, new AsyncHttpResponseHandler() {      @Override      public void onSuccess(int i, Header[] headers, byte[] bytes) {       String data = new String(bytes);       try {        //服務器返回數據        JSONObject object = new JSONObject(data);        (preferences.edit()).clear();        saveData(object);        Toast.makeText(OAuthActivity.this, "登陸成功", Toast          .LENGTH_SHORT).show();        //進入微博主界面        Intent intent = new Intent(OAuthActivity.this,MainActivity.class);        startActivity(intent);        //關閉授權界面        OAuthActivity.this.finish();       } catch (JSONException e) {        e.printStackTrace();       } }      @Override      public void onFailure(int i, Header[] headers, byte[] bytes, Throwable throwable) {       Toast.makeText(OAuthActivity.this, "登陸失敗", Toast.LENGTH_SHORT)         .show();       OAuthActivity.this.finish();      }});}}};  webView.setWebViewClient(client); } /**  * 使用SharedPreferences保存的OAthu的client_id和client_secret和access_token等重要信息  */ private void saveData(JSONObject object) {  try {   SharedPreferences.Editor editor = preferences.edit();   editor.putString("access_token", object.getString("access_token"));   editor.putString("remind_in", object.getString("remind_in"));   editor.putString("expires_in", object.getString("expires_in"));   editor.putString("uid", object.getString("uid"));   editor.putString("client_id", Constants.CLIENT_ID);   editor.putString("redirect_uri", Constants.REDIRECT_URL);   editor.putString("client_secret", Constants.APP_SECRET);   editor.apply();  } catch (JSONException e) {   e.printStackTrace();  } }}

這里的異步請求類WeiboRestClient.java,使用異步發送HTTP請求,在回調函數中處理響應HTTP請求過程不在UI線程進行使用線程池來管理并發數支持GET/POST請求

public class WeiboRestClient { private static final String BASE_URL = "https://api.weibo.com/"; private static AsyncHttpClient client = new AsyncHttpClient(); public static void get(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {  client.get(getAbsoluteUrl(url), params, responseHandler); } public static void post(String url, RequestParams params, AsyncHttpResponseHandler responseHandler) {   client.post(getAbsoluteUrl(url), params, responseHandler); } private static String getAbsoluteUrl(String relativeUrl) {  return BASE_URL + relativeUrl; }}

OAuthActivity的布局webview.xml

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:layout_width="match_parent"    android:layout_height="match_parent"> <WebView  android:id="@+id/webView"  android:layout_width="match_parent"  android:layout_height="match_parent"/></LinearLayout>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 东源县| 阿荣旗| 澄江县| 花莲市| 莱芜市| 个旧市| 泗洪县| 武山县| 临洮县| 平泉县| 望城县| 镇巴县| 和顺县| 厦门市| 阿勒泰市| 龙南县| 大姚县| 桃园市| 岳普湖县| 海林市| 海安县| 嘉峪关市| 乐昌市| 曲阳县| 黔江区| 平舆县| 睢宁县| 浪卡子县| 灵宝市| 镶黄旗| 北碚区| 五华县| 凤山县| 凉城县| 金山区| 淮南市| 库尔勒市| 弋阳县| 通渭县| 班玛县| 承德市|