2014-09-10 30 views
1

我遵循syncadapter示例創建AccountManager和同步適配器。我想在同一個帳戶下爲不同目的使用兩種不同類型的authtokens(訪問不同的服務 - 同步適配器使用其中一種)。具有多個認證令牌類型的Android AccountManager

事情的工作,但我發現,當我認證(通過getauthtoken)一個authtoken類型,保存它的過程替換其他authtoken類型。我在前後查看了accounts.db文件。在調用authtoken類型爲「B」的令牌之前,accounts.db中的authtoken表具有用於auth類型「A」的authtoken。在調用之後,accounts.db中的authtoken表具有「B」類型的authtoken,但「A」已被刪除。無論訂單如何,帳戶管理員子系統似乎都不會爲我的帳戶類型存儲每個帳戶一個以上的驗證字。

當你有多個authtoken類型時,你需要在某個xml文件中配置什麼特別的東西嗎?

+0

當您保存令牌時,您確定將其保存爲特定類型嗎? – CChi 2014-09-10 21:03:52

+0

我首先想到的可能是,但我沒有看到指定類型的方法。該標記使用AccountAuthenticatorActivity中的繼承的setAccountAuthenticatorResult()方法進行設置。 extras包中的值不指定類型 - 類型是使用getAuthToken()傳遞的。 AccountManager中的任何鍵(例如KEY_ACCOUNT_NAME)都不會引用authtoken類型,除非我錯過了它。 但我看到authtoken類型在accounts.db中設置正確 - 只是刪除了其他authtoken類型記錄。 – BJV 2014-09-10 21:28:18

+0

,您可以指定類型,傳入AccountManager.KEY_ACCOUNT_TYPE作爲關鍵字,並將帳戶類型的字符串表示形式作爲值。 – CChi 2014-09-10 21:30:31

回答

1

我發現我的問題。如果您因身份驗證/登錄成功而調用AccountManager.setPassword(),則會使您的帳戶的所有身份驗證令牌失效。這是一個無證的副作用,在某些情況下,這是有道理的。不加區別地將密碼設置爲相同值的軟件將意外地使其認證令牌無效。