出處:http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/
這篇文章個人覺得講的非常好,比官方文檔還要清晰,將各個概念講的非常清楚,對於新手非常有用,所以在這里記錄一下。
摘要:
為什么要使用Authenticator,而不是自己直接寫?
答:標准化方法、簡化開發流程,有管理多種token、與其他app共享token等功能。支持sync adapter等google框架。
概念解釋
幾個主要的部分:token;服務器;AccountManager,管理各個賬戶,其他部分會向AccountManager請求token,而AccountManager調用特定模塊來回應請求;AccountAuthenticator,用於處理特定賬戶類型(比如你自己創建的賬戶類型)的模塊,AccountManager受到請求后對AccountAuthenticator發起對話,而AccountAuthenticator執行相應的操作,可以通過launch activity從用戶處獲取token,或者在相應位置獲取token(所以AccountManager名字很形象了,是管理員,但是不干事的);AccountAuthenticatorActivity,是用來和用戶交互、和服務器交互的activity。
當app需要authentication的時候,它只和一個方法,即AccountManager.getAuthToken()會話;而AccountManager通過如下邏輯獲取token:
(說實話,我沒看懂圖。)
首次登陸流程:
- app向AccountManager請求token
- AccountManager向相關的AccountAuthenticator請求token
- 由於是首次登陸,沒有緩存的token,因此AccountAuthenticator launch一個Activity,要求用戶登陸
- 用戶登陸,AccountAuthenticator從服務器獲取一個token
- AccountManager將token緩存,以便后期使用
- app獲取token,萬事大吉
創建Authenticator
繼承自AbstractAccountAuthenticator。需要實現的主要方法:
addAccount
添加賬號。需要能夠launch相應的activity。
getAuthToken
獲取token。
創建activity
詳略。
創建服務
從而使其他進程能夠獲取賬號信息。詳略。