2016-08-14 21 views
0

我正在使用AbstractAccountAuthenticator的自定義實現,並且已根據文檔實現了getAuthToken。我一直在關注本教程:http://blog.udinic.com/2013/04/24/write-your-own-android-authenticator/AbstractAccountAuthenticator getAuthToken未被調用

但是,當我調用AbstractAccountAuthenticator的實現中的getAuthToken方法時,我並不理解。我已經設置了與我創建實現它的服務清單,創建登錄頁面,並且可以從我的代碼上使用的AccountManager類的活動,但無處在添加帳戶,添加標記並獲得令牌解釋任何的文件時, AbstractAccountAuthenticator代碼被調用。

有人可以幫我理解爲什麼我不得不實施autheniticator時,它似乎並沒有被使用。

回答

0

這是因爲您的應用程序和您的身份驗證器之間存在調解器,它是Android的AccountManager類。

您的身份驗證器實際上是與其關聯的帳戶類型的「插件」它不僅可以用於您的應用程序,還可以用於需要對您的身份驗證器處理的特定帳戶類型進行身份驗證的其他任何應用程序。

因此,當您在您的應用程序的清單中設置您的身份驗證器時,該身份驗證器將使用AccountManager進行註冊。現在,如果一個應用程序有一個「com.google」賬戶類型進行身份驗證,該AccountManager將使用谷歌的預註冊認證。如果用一個帳戶類型「com.yourapp.account」的認證,該AccountManager將使用您的驗證器來代替。

您的應用程序詢問AccountManager是否存在身份驗證令牌,然後將請求轉向並轉發給您的身份驗證器。

重讀Udini的文章。代碼示例演示了它們如何組合在一起。的答覆

+0

謝謝,這是我的想法,但似乎仍然沒有工作,我期待的方式。爲什麼當我投入一個突破點時,它不會被擊中?我在某種程度上繞過了我使用AccountManagers GetAuthToken編寫的代碼嗎? –

+0

'AccountManager'決定何時需要使用您的身份驗證器。如果你的代碼沒有被調用,也許是因爲'AccountManager'已經有一個它認爲有效的令牌。如果你想獲得'getAuthToken'對認證運行,嘗試調用'invalidateAuthToken'在'AccountManager'第一。在Udini的博客中有一個令人討厭的流程圖來說明整個互動。 –