今天嘗試了一下使用網易微博的開放平台,在Android上開發應用。把用於Java的SDK下回來之後,用起來還有一些問題。不過後來都解決了。
下面把整個過程記錄在些,給有需要的朋友。
1、到http://open.t.163.com/wiki/index.php?title=Sdk#Java把SDK下載回來。 我們注意到,SDK包裡是原始碼。
2、到http://open.t.163.com/apps/new 建立一個應用,以得到咱這個應用的consumerKey和consumerSecret。
3、用Eclipse建立一個Android工程。注意Android版本要選2.X的。把第一步下回來的SDK中src檔案夾下的內容放到Android工程的src目錄下。
4、配置buildPath,將SDK中lib下的jar包添加到Android工程中。(如何配置buildPath就不詳說了吧)
5、完成這些以後,HttpClient類中還是報錯,找不到javax.activation.MimetypesFileTypeMap這個。這時,到http://www.jar114.com/ 這個網站去搜尋一下javax.activation.MimetypesFileTypeMap是在哪個包裡的,然後把包下載回來,再配置buildPath,把下回來的包也添加到工程中,這時就不再報錯了。
6、SDK中,程式的入口是example包中的OAuthGetToken類,但咱現在是Android應用,入口在Activity裡,所以咱把OAuthGetToken類中Main方法的方法體都拷到咱Android工程裡的自己的Activity的OnCreate方法裡。
7、上一步拷貝的代碼中,咱要把
System.setProperty("tblog4j.oauth.consumerKey",
"");
System.setProperty("tblog4j.oauth.consumerSecret",
"");
這裡設上第二步擷取到的consumerKey和consumerSecret。
8、在AndroidManifest檔案中添加訪問互連網的使用權限設定。
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
9、看起來差不多了吧,運行一下一堆的錯誤。我找了下原因,發現程式裡面用到了Property檔案,現在這個檔案在src檔案夾下,但在Android裡,Property檔案放在這裡它是讀不到的。所以把src下的t4j.properties檔案放到assets裡。這時我們訪問的路徑也要改。
10、找到t4j包下的Configuration類的81行。
將loadProperties(defaultProperty, Configuration.class.getResourceAsStream("/" + t4jProps));
改成loadProperties(defaultProperty,Configuration.class.getResourceAsStream("/assets/" + t4jProps));
11、這個時候,我們來把調用方法的流程理一理。
第一步,產生一個驗證我們應用的URL,容易想到,這個URL裡攜帶了應用的標識資訊
第二步,呼叫瀏覽器訪問這個URL,在頁面中,使用者佈建允許我們的應用訪問他的帳號。設定以後,163儲存了這種允許的狀態。
第三步,設定完成後,使用者退出瀏覽器,回到我們的應用,我們的應用再通過調用SDK去163那裡獲得AccessToken。
第四步,使用AccessToken,我們就可以調用SDK中的任意方法了,譬如驗證使用者,擷取微博列表等。
下面我完成的這個例子的效果是,一進到應用,點擊按鈕去驗證,驗證完後,使用者退出瀏覽器,應用顯示使用者的微博使用者名稱。
上代碼:
import t4j.TBlog;<br />import t4j.TBlogException;<br />import t4j.data.User;<br />import t4j.http.AccessToken;<br />import t4j.http.RequestToken;<br />import android.app.Activity;<br />import android.content.Intent;<br />import android.net.Uri;<br />import android.os.Bundle;<br />import android.view.View;<br />import android.view.View.OnClickListener;<br />import android.widget.Button;<br />import android.widget.TextView;</p><p>public class Welcome extends Activity implements OnClickListener{<br />private String verifyURL;<br />private TextView tvTip;<br />private TextView tvUserName;<br />private TBlog tblog;<br />private RequestToken requestToken;<br />// 標誌是否已驗證<br />private int flag = 0;</p><p> @Override<br />public void onCreate(Bundle savedInstanceState) {<br /> super.onCreate(savedInstanceState);<br /> setContentView(R.layout.main);</p><p> tvTip = (TextView) findViewById(R.id.tv_tip);<br /> tvUserName = (TextView) findViewById(R.id.tv_username);<br /> Button btnVerify = (Button)findViewById(R.id.btn_verify);<br /> btnVerify.setOnClickListener(this);<br /> // 設定應用資訊<br /> System.setProperty("tblog4j.oauth.consumerKey", "kKyj0SlCsEo1JSUk");<br /> System.setProperty("tblog4j.oauth.consumerSecret", "ISjF44L9ftKzhdRsLsPI4KK22YdfB55e");<br /> // 關掉debug,減少幹擾資訊<br /> System.setProperty("tblog4j.debug", "false");<br /> tvTip.setText("點擊按鈕去163驗證應用");<br /> tblog = new TBlog();<br />// 擷取RequestToken<br /> try {<br />requestToken = tblog.getOAuthRequestToken();<br />} catch (TBlogException e1) {<br />// TODO Auto-generated catch block<br />e1.printStackTrace();<br />}</p><p>// 擷取驗證URL<br />verifyURL = requestToken.getAuthenticationURL();<br />}</p><p> // 當用記關閉瀏覽器回到應用時,onResume會被執行。<br /> // 由於onResume是常常會被執行的方法,所以設定flag標誌位,保證只在驗證回來時運行擷取accessTocken<br /> protected void onResume(){<br /> super.onResume();<br /> if(flag == 1){<br /> tvTip.setText("驗證完畢,顯示使用者名稱");<br /> AccessToken accessTocken = null;<br />try {<br />accessTocken = tblog.getOAuthAccessToken(requestToken);<br />} catch (TBlogException e) {<br />// TODO Auto-generated catch block<br />e.printStackTrace();<br />} </p><p>// 可以將accessTocken儲存起來,以後就不用再次擷取了。<br />tblog.setToken(accessTocken.getToken(), accessTocken.getTokenSecret());</p><p>// 擷取微博使用者資訊<br />User user = null;<br />try {<br />user = tblog.verifyCredentials();<br />} catch (TBlogException e) {<br />// TODO Auto-generated catch block<br />e.printStackTrace();<br />}<br />tvUserName.setText(user.getName());<br />flag = 2;<br /> }<br /> }</p><p>@Override<br />public void onClick(View arg0) { </p><p>// 呼叫瀏覽器開啟URL<br />Intent intent = new Intent();<br />intent.setAction("android.intent.action.VIEW");<br />Uri content_uri_browsers = Uri.parse(verifyURL);<br />intent.setData(content_uri_browsers);<br />intent.setClassName("com.android.browser","com.android.browser.BrowserActivity");<br />startActivity(intent);<br />flag = 1;<br />}<br />}
: