天天看點

android開發我的新浪微部落格戶端-使用者授權頁面功能篇(3.2)

android開發我的新浪微部落格戶端-使用者授權頁面功能篇(3.2)
android開發我的新浪微部落格戶端-使用者授權頁面功能篇(3.2)

在上一篇實作了使用者授權頁面的UI,如上圖,接下來要做的就是在這個基礎上完成功能部分真正實作使用者的授權認證,這一篇是android開發我的新浪微部落格戶端-OAuth篇(2.1)的具體應用篇原理就不多解釋了不懂的看OAuth篇即可。認證過程從點選開始按鈕然後跳轉到新浪的授權頁面,接着使用者在新浪的頁面裡輸入自己的賬戶和密碼确定後傳回使用者授權頁面。首先給開始按鈕添加點選事件代碼,代碼中主要是調用我們前面android開發我的新浪微部落格戶端-OAuth篇(2.1)完成的OAuth類的RequestAccessToken方法用來擷取oauth_verifier,具體代碼如下:

ImageButton stratBtn=(ImageButton)diaView.findViewById(R.id.btn_start); stratBtn.setOnClickListener(new OnClickListener(){ @Override public void onClick(View arg0) { auth=new OAuth(); auth.RequestAccessToken(AuthorizeActivity.this, CallBackUrl); } });

上面的代碼中重點來說明一下RequestAccessToken方法的第二參數CallBackUrl,這個參數是使用者在新浪的頁面中輸入賬戶密碼後完成認證後傳回的位址,我這裡是這樣設定的CallBackUrl = "myapp://AuthorizeActivity",在AndroidManifest.xml中配置給AuthorizeActivity添加如下配置把myapp://AuthorizeActivity指向到AuthorizeActivity,這樣當頁面傳回到AuthorizeActivity中就可以擷取到傳過來的 oauth_verifier參數。

<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:scheme="myapp" android:host="AuthorizeActivity" /> </intent-filter>

再AuthorizeActivity如果來接收傳回的 oauth_verifier參數呢? 接下來在AuthorizeActivity添加如下方法:

@Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); //在這裡處理擷取傳回的oauth_verifier參數 }

關于onNewIntent的說明是這樣的,onCreate是用來建立一個Activity也就是建立一個窗體,但一個Activty處于任務棧的頂端,若再次調用startActivity去建立它,則不會再次建立。若你想利用已有的Acivity去處理别的Intent時,你就可以利用onNewIntent來處理。在onNewIntent裡面就會獲得新的Intent,在這裡AuthorizeActivity是屬于已有的Acivity,是以需要onNewIntent來處理接收傳回的參數,擷取 oauth_verifier參數後OAuth還沒有結束從 android開發我的新浪微部落格戶端-OAuth篇(2.1) 描述來看還需要進行根據這個參數繼續向新浪微網誌請求擷取U ser_id、Access Token和Access Secret,在這裡我把這些操作全部寫在了 GetAccessToken方法中。在onNewIntent添加如下代碼:

UserInfo user= auth.GetAccessToken(intent); if(user!=null){ DataHelper helper=new DataHelper(this); String uid=user.getUserId(); if(helper.HaveUserInfo(uid)) { helper.UpdateUserInfo(user); Log.e("UserInfo", "update"); }else { helper.SaveUserInfo(user); Log.e("UserInfo", "add"); } }

通過上面的代碼完成了U ser_id、Access Token和Access Secret 擷取并且儲存到了sqlite庫中,這樣就完成了使用者的OAuth認證,當需要調用新浪的api時隻需要去sqlite庫中找該使用者的U ser_id、Access Token和Access Secret 即可。到這裡本篇就結束了,請關注下一篇。