標籤:android style blog http io 使用 ar strong sp
為了理解,我翻譯了AccountManager類的概述部分。轉載請註明出處:http://www.cnblogs.com/vir56k/p/4025722.html
AccountManager概述
這個類提供了訪問到 使用者線上賬戶的集中式註冊中心 的能力。使用者為每賬戶輸入一次 認證資訊(credentials,包含使用者名稱和密碼),過過 點擊一次(one-click)完成認證的方式,授權應用程式(app)訪問 線上的資源。不同的服務具有不同的處理賬戶的認證的方式,而 Account Manager 使用了外掛程式化的認證器模組 對應不同的賬戶類型。認證器(它由第三方組織編寫)處理 驗證賬戶認證資訊的具體實際內容。並且儲存賬戶資訊。比如 Google,facebook,和微軟每個都擁有他們自己的認證器。
許多服務支援 關於單一授權標記(authentication token,簡寫為auth token) 的一些概念,它常常被用於驗證 向服務發出的不包含真實密碼的授權請求。而auth token 常常被建立於獨立包含使用者認證資訊(使用者名稱和密碼)的請求。AccountManager可以為應用程式產生認證標記(auth token),那麼應用程式不在需要去直接處理密碼。autho token常常可重用和被AccountManager緩衝,但是被必須周期性重新整理。當停止工作的時候,應用程式使得auth token無效化,以讓auth token知道去重建它們。 應用程式訪問服務通常通過下面幾個步驟:
- 獲得一個 AuccountManager的執行個體,通過 get(Context)方法。
- 列出可用的賬戶,使用getAccountsByType(String) 或者 getAccountsByTypeAndFeatures(String, String[],AccountManagerCallback, Handler).一般應用程式會對 一種指定的類型 的賬戶 感興趣,它是認證器的標識。賬戶特性被用於標識特定賬戶的子類型和能力。賬戶類型和特性這兩個是認證器規範字串,並且必須被應用程式所知道,關於協調它們的首選認證器。
- 選擇一個或者多個可用的賬戶,可能的話詢問使用者他們的偏好。如果沒有匹配的賬戶可以使用,addAccount(String, String, String[], Bundle, Activity, AccountManagerCallback, Handler) 將會被調用,提示使用者建立一個適當類型賬戶
- 重要的:如果應用正在使用預先被記憶的賬戶選項,它必須確保賬戶仍然存在於一個被 通過 getAccountsByType(String)返 回的賬戶列表。為一個賬戶請求一個認證標記 不再導致 在裝置結果中的“一個未定義的失敗”。
- 使用auth token構建請求。auth token的表單,請求的格式,和使用的協議都特定於你要訪問的服務。應用可以使用任何網路和協議庫。
- 重要的:如果請求失敗於一個“授權錯誤”,那麼可能 緩衝的auth token到期並且不再被服務端信任。應用必須調用 invalidateAuthToken(String, String)去移除auth token的緩衝,另外請求將繼續失敗! 在使得auth token無效後, 立即返回到上面的“請求一個auth token”步驟。如果是第二次出處理失敗了,那麼它將被當做一次誠懇的認證失敗來對待並 且通知使用者或做其他適當處理。
一些AccountManager方法可能需要與使用者互動,提示使用者認證資訊,呈現可選項,或者詢問使用者去添加賬戶。調用者可以選擇是否允許AccountManager去直接啟動必要的使用者介面並且等待使用者,或者返回一個intent,它是調用者可以啟動介面。或者一些情況下,安裝一個通知,它是使用者可以選擇去啟動介面。讓AccountManager直接啟動介面,調用者必須提供當前 前端的Activity的Context.
許多AccountManager方法以 AccountManagerCallback 和 Handler作為參數。這些方法立即返回並且非同步啟動。如果一個回調被提供,那麼run(AccountManagerFuture) 將在Handler的線程上被調用。結果被重新取得,是通過 “傳回值”AccountManagerFuture 的 getResult()方法(也可以通過回調方法獲得)。這個方法等待操作完成(如果需要的話)並且兩者之一:返回結果或者 在操作過程中發生錯誤拋出異常。要使 請求 同步執行,通過方法接收到 future後立即調用 getResult()即可,不再需要提供回調。
請求可能被阻塞,包括getResult()在內,必須保證 從不在主線程被調用。如果在主線程被使用,那些操作將拋出IllegalStateException異常 。
****************************************************************************************
AccountManager的常用方法
為指定賬戶設定密碼
mAccountManager.setPassword(account, mPassword);
添加賬戶到 賬戶中心
final Account account = new Account(mUsername, Constants.ACCOUNT_TYPE);
mAccountManager.addAccountExplicitly(account, mPassword, null);
獲得authToken
final String authtoken = mAccountManager.blockingGetAuthToken(account,
Constants.AUTHTOKEN_TYPE, NOTIFY_AUTH_FAILURE);
獲得使用者資料
String markerString = mAccountManager.getUserData(account, SYNC_MARKER_KEY);
Android中文翻譯 - AccountManager概述