前言
關於登錄問題之前一直找不到錯誤出自哪里,為什么總是顯示登錄中卻總也成功不了,單步調試后
還是不得其解。百度了一下又在新浪開放API的文檔里轉了轉,才發現教程中微博客戶端登錄的方式已經淘汰了,
現在用的是Oauth認證方式。於是下來SDK重新做過。
實現流程
一、 什么是Oauth認證
首先當然是搞清楚什么是Oauth認證方式,百度一下就清楚了。和計算機網絡里的三次握手有那么點相似的味道,
引用一下網上介紹較多的說法:
第一組:(App Key和App Secret、CallBackUrl)
第二組:(Request Token和Request Secret)
第三組:(oauth_verifier)
第四組:(user_id、Access Token和Access Secret)
步驟(1):新浪微博的OAuth認證過程,當用戶第一次使用本客戶端軟件時,客戶端程序用第一組作為參數向新浪微博發起請求,然后新浪微博經過驗證后返回第二組參數給客戶端軟件同時表示新浪微博信任本客戶端軟件
步驟(2):當客戶端軟件獲取第二組參數時作為參數引導用戶瀏覽器跳至新浪微博的授權頁面,然后用戶在新浪的這個授權頁面里輸入自己的微博賬號和密碼進行授權,完成授權后根據客戶端設定的回調地址把第三組參數返回給客戶端軟件,並表示用戶也信任本客戶端軟件
步驟(3):接下來客戶端軟件把第二組參數和第三組參數作為參數再次向新浪微博發起請求,然后新浪微博返回第四組參數給客戶端軟件。據這3個值直接調用新浪的api接口獲取相應用戶的信息並進行發微博等操作。第四組參數需要好好的保存進XML,下次使用時便可繞過OAuth認證,直接使用第四組參數值進行微博的相關應用。
從這個過程來看用戶只是在新浪微博的認證網頁輸入過賬戶和密碼並沒有在客戶端軟件里輸入過賬戶和密碼,客戶端軟件只保存了第四組數據並沒有保存用戶的賬戶和密碼,這樣有效的避免了賬戶和密碼透露給新浪微博之外的第三方應用程序,保證了安全性。
看完之后還是有點暈,主要是那些參數,有好幾對,本人根據大概意思結合新浪的命名畫了張圖認證過程流程:
這圖大概意思差不多,詳細的話google,baidu吧。
二、修改SDK
廢話講完,現在可以把下來的SDK導入Eclipse,我用的是新浪Android SDK,下載完解壓,
1.導入后會有錯誤提示:網上有篇文章介紹的很清楚,作者是好像是“菜鳥521”(他總結的很好)
1.最簡單的刪除assets文件夾下的說明文檔《Android平台微博SDK說明文檔》,或者該成英文名。
2.在AuthorizeActivity.java中將CONSUMER_KEY和CONSUMER_SECRET分別賦值成在新浪微博申請到的那對值:App Key,App Secret。
3.在AuthorizeActivity.java中有句代碼有問題將語句
eibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_KEY);
修改成 weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET);
2.我做完這幾步后,項目沒有錯誤提示了,現在把上次的歡迎界面(在Logo.java文件里面實現),copy到這個項目,
並且在AndroidManifest文件中設為啟動入口。
現在修改AuthorizeActivity文件,為CONSUMER_KEY和CONSUMER_SECRET 賦值。
private static final String CONSUMER_KEY = "XXXXXX";
private static final String CONSUMER_SECRET = "XXXXXXXXX";
3.新建一個activity,命名為MainActivity.java,並且在AndroidManifest文件中加進去:
<activity android:name="MainActivity" android:configChanges="keyboardHidden|orientation" > <intent-filter> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.BROWSABLE" /> <data android:host="MainActivity" android:scheme="weiboandroidsdk" /> </intent-filter> </activity>
這最重要的一句是<data />標簽里的,定義當前MainActivity的uri,用作請求服務器時的回調uri,
這個回調也就是說,用戶在瀏覽器中的新浪頁面輸入用戶名和密碼后,將返回這個位置。
4.用戶登錄成功,返回MainActivity,我希望立刻顯示微博用戶所關注的用戶的狀態,向服務器發送friends_timeline請求,
在SDk的TestActivity代碼基礎上修改,增加的關鍵代碼如下:
String s = getFriendTimeline(mWeibo);
try
{
JSONArray jsonArray = new JSONArray(s);
for (int i = 0; i < jsonArray.length(); i++)
{
JSONObject item=jsonArray.getJSONObject(i);
String idString=item.getString("Id");
String textString=item.getString("Text");
Log.i(TAG, idString+":"+textString);
}
} catch (JSONException e)
{
e.printStackTrace();
}
mResult.setText(s);
Log.i(TAG, "好友狀態:" + s);
private String getFriendTimeline(Weibo weibo) throws MalformedURLException, IOException, WeiboException
{
String url = Weibo.SERVER + "statuses/friends_timeline.json";
WeiboParameters bundle = new WeiboParameters();
bundle.add("source", Weibo.APP_KEY);
String rlt = weibo.request(this, url, bundle, "GET", mWeibo.getAccessToken());
return rlt;
}
5.到目前為止,已經實現用戶登錄微博,並且獲取好友說說,顯示在前台的功能,但是還非常簡陋,繼續學習。
寫的不對的歡迎各位也在學習android的朋友拍磚,大家交流交流,源碼等都完善了在發出來。
效果圖