下載地址~ http://download.csdn.net/detail/zhangnianxiang/4375685 新浪微博 曾經@微博API 新浪那邊表示 舊版的Oauth 1.0a將在不久的2012.9.1號停止。這個是一個很苦的消息。意味著涉及微博的都要修改。 Oauth2.0相比較于Oauth1.0的話 流程少了很多,其中
下載地址~
http://download.csdn.net/detail/zhangnianxiang/4375685
新浪微博
曾經@微博API 新浪那邊表示 舊版的Oauth 1.0a將在不久的2012.9.1號停止。這個是一個很苦逼的消息。意味著涉及微博的都要修改。
Oauth2.0相比較于Oauth1.0的話 流程少了很多,其中一點就是簽名。之前都是用signpost這個開源項目輔助。現在完全可以去掉了
好吧。廢話不說了。
新浪微博Oauth2.0認證的官方說明
http://open.weibo.com/wiki/Oauth2
簡單步驟:1獲取code 2獲取accessToken 3使用accessToken訪問api
新浪的這份授權機制還是比較詳細。理解起來比較容易
接口 | 說明 |
---|---|
OAuth2/authorize | 請求用戶授權Token |
OAuth2/access_token | 獲取授權過的Access Token |
OAuth2/get_oauth2_token | OAuth1.0的Access Token更換至OAuth2.0的Access Token |
步驟1http://open.weibo.com/wiki/Oauth2/authorize
獲取code
必選 | 類型及范圍 | 說明 | |
---|---|---|---|
client_id | true | string | 申請應用時分配的AppKey。 |
redirect_uri | true | string | 授權回調地址,站外應用需與設置的回調地址一致,站內應用需填寫canvas page的地址。 |
response_type | false | string | 返回類型,支持code、token,默認值為code。 |
state | false | string | 用于保持請求和回調的狀態,在回調時,會在Query Parameter中回傳該參數。 |
display | false | string | 授權頁面的終端類型,取值見下面的說明。 |
https://api.weibo.com/oauth2/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REGISTERED_REDIRECT_URI
{ "access_token": "ACCESS_TOKEN", "expires_in": 1234, "remind_in":"798114", "uid":"12341234" }
web=(WebView)findViewById(R.id.web); web.getSettings().setJavaScriptEnabled(true); web.getSettings().setSupportZoom(true); web.getSettings().setBuiltInZoomControls(true); web.setWebViewClient(new WebViewC());
WebviewClient
class WebViewC extends WebViewClient{ @Override public void onPageStarted(WebView view, String url, Bitmap favicon) { super.onPageStarted(view, url, favicon); Log.v("aaa", "===onPageStarted==="+url); if(url.contains("code=")){ try { Intent intent = new Intent(Oauth2Activity.this,MainActivity.class); Uri uri = Uri.parse(url); String code = uri.getQueryParameter("code"); String openid =uri.getQueryParameter("openid"); String openkey=uri.getQueryParameter("openkey"); editor.putString(StatcParame.T_OPEN_ID, openid); editor.putString(StatcParame.T_OPEN_KEY, openkey); HttpClient httpclient=MyCountHttpClient.getNewHttpClient(); URI accessToken = null; Listparameters=new ArrayList (); //必須編碼,否則無法向服務器發送微博 if(codeFlag==1){ parameters.add(new BasicNameValuePair("client_id", StatcParame.S_CONSUMER_KEY)); parameters.add(new BasicNameValuePair("client_secret", StatcParame.S_CONSUMER_SECRET)); parameters.add(new BasicNameValuePair("redirect_uri", StatcParame.S_CALLBACK)); accessToken = URI.create(StatcParame.S_API_access_token); intent.putExtra("mode", 1); }else if(codeFlag ==2){ parameters.add(new BasicNameValuePair("client_id", StatcParame.T_CONSUMER_KEY)); parameters.add(new BasicNameValuePair("client_secret", StatcParame.T_CONSUMER_SECRET)); parameters.add(new BasicNameValuePair("redirect_uri", StatcParame.T_CALLBACK)); accessToken = URI.create(StatcParame.T_API_access_token); intent.putExtra("mode", 2); } parameters.add(new BasicNameValuePair("grant_type", "authorization_code")); parameters.add(new BasicNameValuePair("code", code)); HttpPost post=new HttpPost(accessToken); HttpResponse response=null; post.setEntity(new UrlEncodedFormEntity(parameters ,HTTP.UTF_8) ); post.getParams().setBooleanParameter(CoreProtocolPNames.USE_EXPECT_CONTINUE, false); response = httpclient.execute(post); if(codeFlag==1){ JSON.GetOauth(sharedpre,Utils.getResponseText(response)); }else if(codeFlag==2){ String tempUrl = StatcParame.T_CALLBACK+"?"+Utils.getResponseText(response); Uri temp = Uri.parse(tempUrl); String access_token = temp.getQueryParameter("access_token"); String expires_in=temp.getQueryParameter("expires_in"); String name=temp.getQueryParameter("name"); editor.putString(StatcParame.T_ACCESS_TOKEN, access_token); editor.putString(StatcParame.T_EXPIRES_IN, expires_in); editor.putString(StatcParame.T_NAME, name); editor.commit(); } startActivity(intent); Oauth2Activity.this.finish(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
這個方法集合了sina和tencent的處理
這步走完就拿到ACCESSTOKEN了
下面貼個發布微博的方法
SINA發送一個帶圖片的微博
Weibo weibo = Weibo.getInstance(); AccessToken accessToken = new AccessToken(shared.getString(StatcParame.S_ACCESS_TOKEN, ""), StatcParame.S_CONSUMER_SECRET); accessToken.setExpiresIn(shared.getString(StatcParame.S_EXPIRES_IN, "")); weibo.setAccessToken(accessToken); weibo.setupConsumerConfig(StatcParame.S_CONSUMER_KEY, StatcParame.S_CONSUMER_SECRET); weibo.setRedirectUrl("http://www.sina.com.cn"); try { String msg = URLEncoder.encode(body, HTTP.UTF_8); WeiboParameters bundle = new WeiboParameters(); bundle.add("status", msg); bundle.add("pic", "/sdcard/1.jpg"); String rlt = ""; String url = Weibo.SERVER + "statuses/upload.json"; Utility.setAuthorization(new Oauth2AccessTokenHeader()); rlt = weibo.request(context, url, bundle, Utility.HTTPMETHOD_POST, weibo.getAccessToken()); Toast.makeText(context, rlt, 1000).show(); Log.v("aaa","Successfully upload the status to ["+ rlt+ "]."); return "OK"; } catch (Exception e1) { e1.printStackTrace(); }
TENCent發送一條微博
OAuthV2 oAuth =new OAuthV2(); oAuth.setAccessToken(shared.getString(StatcParame.T_ACCESS_TOKEN, "")); oAuth.setOauthVersion("2.a"); oAuth.setClientIP("117.25.173.11"); oAuth.setOpenid(shared.getString(StatcParame.T_OPEN_ID, "")); oAuth.setOpenkey(shared.getString(StatcParame.T_OPEN_KEY, "")); oAuth.setClientId(StatcParame.T_CONSUMER_KEY); oAuth.setClientSecret(StatcParame.T_CONSUMER_SECRET); try { TAPI api = new TAPI("2.a"); String respone = api.add(oAuth, "json","abcc","117.25.173.11","","","0"); Toast.makeText(context, respone, 1000).show(); } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); }
源碼之后上傳。
聯系 zhangnianxiang@gmail.com
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com