Foursquare 原始碼研究之---------使用者登入
最近學習android,無意間看到Foursquare專案,於是下載下來看看了原始碼,看完後避免忘記,故寫下此文.
當我們拿到一個android專案,首先有機會最好是執行看看效果和Debug專案.這樣有個感官的認識,.我執行後的結果:
<!--StartFragment -->
注意:在debug的時候需要開啟fanqiang軟體,否則會報一個"java.net.UnknownHostException: Host is unresolved: api.foursquare.com:443" 錯誤. 還需要重啟模擬器. 切記.
一. 首先看看登入.
由於登入比較簡單,一筆帶過.
開啟Mainifest.xml檔案找到
<activity android:name=".MainActivity" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
這應該就是程式的入口.當然在他的外面還有application標籤.先不管application標籤,找到name=".MainActivity",然後可以順勢找到MainActivity.java檔案.找到onCreate方法.在onCreate方法中呼叫了redirectToLoginActivity().此方法重定向到LoginActivity.java,開啟此類會發現很簡單. 主要有2個EditText.2個button,一個是log-in,另一個是signin.
他們分別對應不同的listener. 註冊按鈕開啟瀏覽器註冊
startActivity(new Intent( Intent.ACTION_VIEW, Uri.parse(Foursquare.FOURSQUARE_MOBILE_SIGNUP)));
看上面的程式碼,不多說,主要看登入,
mLoginTask = new LoginTask().execute();
看到上面這句話了吧,啟動一個新的Task來提交請求,因為登入是把使用者名稱和密碼通過http協議傳輸到server進行校驗,是一個比較費時的操作,為了不讓UI僵死. 繼續看LoginTask類,他是繼承了AsyncTask類, 為什麼不採用Handler+Thread呢?要用AsyncTask呢? 因為前者跑起來後就無法管理,後者是可控的 具體請參考(http://blog.163.com/android_zhouwei/blog/static/1712422672010818105241892/), 繼續看程式碼.主要看LoginTask,有如下程式碼
boolean loggedIn = Preferences.loginUser(foursquare, phoneNumber, password, location, editor)
此句的主要作用是用phoneNumber和password進行setCredentials.認證.foursquare中採用的Digest 認證,此種方式的認證,可以從 mHttpClient.getCredentialsProvider().setCredentials(mAuthScope, new UsernamePasswordCredentials(phone, password));
程式碼中看出來,如對認證不瞭解請參考
(http://www.cnblogs.com/huqingyu/archive/2008/02/17/1071649.html) 有詳細的介紹.
認證完之後是把user資訊儲存在SharedPreferences中--storeLoginAndPassword(editor, login, password); 之後呼叫User user = foursquare.user(null, false, false, false, location); 傳送http請求,返回一個User物件,User中包含很多的屬性.然後儲存此user物件到SharedPreferences中.
從下圖可以看出user方法的呼叫框架.
<!--StartFragment -->相關文章
- Foursquare 原始碼研究之------登入續原始碼
- 騰訊遊戲掃碼登入原始碼遊戲原始碼
- MFC 之使用者登入介面
- spring security之 預設登入頁原始碼跟蹤Spring原始碼
- 直播原始碼網站,新使用者登入時的註冊頁面和登入頁面原始碼網站
- cookie之登入使用者憑證Cookie
- spring security 之自定義表單登入原始碼跟蹤Spring原始碼
- 直播原始碼,zabbix忘記登入密碼原始碼密碼
- 手機直播原始碼,Android Studio使用者登入及驗證原始碼Android
- 社會化登入分享-原始碼解析原始碼
- css 使用者登入表單程式碼CSS
- 後臺實戰——使用者登入之JWTJWT
- 遊戲陪玩原始碼的登入方式,簡訊驗證碼登入的實現遊戲原始碼
- 線上直播系統原始碼,使用者登入時獲取到使用者已有的賬號資訊原始碼
- Linux使用者登入密碼的生成Linux密碼
- 直播app原始碼,使用者首次登入時彈出左右滑動導航頁APP原始碼
- Spring Security原始碼分析六:Spring Social社交登入原始碼解析Spring原始碼
- Nginx原始碼研究之nginx限流模組詳解Nginx原始碼
- LIVE555原始碼研究之四:MediaServer (一)原始碼Server
- 線上直播原始碼,完整登陸頁面的全部資訊(包括使用者名稱、輸入密碼等)原始碼密碼
- 【爛KDE】Linux登入時使用者密碼正確,卻登入失敗Linux密碼
- 直播app系統原始碼,使用者登入後選擇記住密碼,下次自動填充密碼APP原始碼密碼
- PHP原始碼研究PHP原始碼
- ICE原始碼研究原始碼
- 關於登入(使用者名稱,密碼,驗證碼)密碼
- Linux使用者登入記錄分析指令碼Linux指令碼
- 線上直播系統原始碼,使用者異地登入時對身份進行驗證原始碼
- uniapp 完成兩種方式登入 驗證碼登入 密碼登入APP密碼
- VasSonic原始碼之並行載入原始碼並行
- app直播原始碼,登入時輸入驗證碼、簡訊驗證身份APP原始碼
- 直播app原始碼,登入時自動輸入密碼/自動記住密碼APP原始碼密碼
- jQuery使用者登入和登錄檔單驗證程式碼例項jQuery
- 直播app系統原始碼,簡單的登入介面(登入、註冊、記住密碼等按鍵)APP原始碼密碼
- 聊天平臺原始碼,登入時拼圖驗證原始碼
- 【Python】公眾號聚合登入軟體+原始碼Python原始碼
- Laravel 單使用者登入Laravel
- SQL SERVER 使用者名稱、密碼登入判斷SQLServer密碼
- 密碼登入密碼