Android 账户管理器:peekAuthToken

Android AccountManager: peekAuthToken

我在 Android 中实现了一个客户管理器,我在应用程序中经常使用 peekAuthToken 来获取令牌。

但是我对源代码有点困惑,在文档中它说:

Intended for use by the authenticator, not directly by applications.

为什么会这样,使用此方法获取 authToken 会出现什么问题?

peekAuthToken 在提供授权令牌之前内部检查两个 uid 是否相等:

  • 请求授权令牌的应用程序的 uid
  • 提供Authentication IBinder的应用uid(即管理账户的uid)

如果 uid 不同,您将收到 SecurityException。

换句话说,如果您将身份验证服务与应用程序的其余部分一起发布,应该没问题。 (尽管我仍然建议改用 getAuthToken)。但是,如果您在一个应用程序中发布 Authenticator 并想在另一个应用程序中调用 peekAuthToken,那将不起作用。

https://github.com/android/platform_frameworks_base/blob/4535e11fb7010f2b104d3f8b3954407b9f330e0f/services/core/java/com/android/server/accounts/AccountManagerService.java#L1544