未经 GET_ACCOUNTS 许可从 GoogleApiClient 获取 Google 帐户令牌

Obtaining Google account token from GoogleApiClient without GET_ACCOUNTS permission

这是从 GoogleApiClient 获取令牌的传统方法,用于 Google+ 登录:

String token = GoogleAuthUtil.getToken(apiClient.getContext(), getAccountNameFromGoogle(apiClient), SCOPE);

但是,GetAccountNameFromGoogle 方法需要 android.permission.GET_ACCOUNTS 权限,在 Android M Developer Preview 3 中,此权限现在被标记为危险并分组到联系人组中。这意味着如果有人想登录我的应用程序,他需要授予我的应用程序完整的联系人权限,这有点矫枉过正。

有没有办法在没有 GET_ACCOUNTS 许可的情况下实现这一点?

我发现的一个可能的答案是从 AccountPicker 获取帐户名,但这会强制用户选择他的帐户两次(一次用于 Google Plus 身份验证,一次用于 AccountPicker),这也不是非常友好的解决方案。

这就是我最终解决问题的方法:

我完全放弃了 GoogleApiClient 并切换到 AccountPicker。它并不完美,但我仍然可以使用 GoogleApiClient 的所有功能,尽管并不那么轻松。

Google对此的指南:https://developers.google.com/android/guides/http-auth