未经 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
这是从 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