我想从 AccountManager 获取一个 Google Authtoken,我可以将其发送到我的 Web 服务(未托管在 App Engine 上)以验证用户(如果不需要此权限,我只需要电子邮件地址和最终他的姓名)。
“getAuthToken”方法的“authTokenType”参数我必须使用什么?
我必须使用哪个 google Api 来获取用户电子邮件?
我想从 AccountManager 获取一个 Google Authtoken,我可以将其发送到我的 Web 服务(未托管在 App Engine 上)以验证用户(如果不需要此权限,我只需要电子邮件地址和最终他的姓名)。
“getAuthToken”方法的“authTokenType”参数我必须使用什么?
我必须使用哪个 google Api 来获取用户电子邮件?
使用 OpenID Connect 可以做到这一点,但是它是一种实验性的,所以未来可能会改变细节。如果您获得“https://www.googleapis.com/auth/userinfo.email”或“https://www.googleapis.com/auth/userinfo.profile”范围的 OAuth 令牌,您可以使用它来获取来自https://www.googleapis.com/oauth2/v1/userinfo的用户信息(包括电子邮件)。当然,用户需要对此进行授权。
理论上,您应该能够通过AcccountManager
使用“oauth2:https://www.googleapis.com/auth/userinfo.profile”作为令牌类型来获取令牌,但这似乎不适用于我的设备(Galaxy Nexus库存 4.0.4)。由于通过 获取令牌AccountManager
不起作用(至少目前如此),唯一可靠的方法是使用 WebView 并通过浏览器获取一个,如下所述:https ://developers.google.com/accounts/docs/移动应用
这里有一个演示网络应用程序可以执行此操作:https ://oauthssodemo.appspot.com
(后期)更新:Google Play 服务已经发布,它是获取 OAuth 令牌的首选方式。它应该可以在所有装有 Android 2.2 及更高版本的设备上使用。获取配置文件令牌确实可以使用它,实际上他们在演示应用程序中使用它
I have had problems with this as well, since I was not able to find anything like a reference. Perhaps this can help you (code copied from an Android example on using the account manager):
Somewhere in an event handler of your Android app, issue a request for an auth token to get the user's email address in Android:
_accountMgr = AccountManager.get(this);
Account [] accounts = _accountMgr.getAccounts();
Account account = accounts[0]; // For me this is Google, still need to figure out how to get it by name.
_accountMgr.getAuthToken(account, AUTH_TOKEN_TYPE, false, new GetAuthTokenCallback(), null);
In the callback, extract the access token:
private class GetAuthTokenCallback implements AccountManagerCallback<Bundle> {
public void run(AccountManagerFuture<Bundle> result) {
Bundle bundle;
try {
bundle = result.getResult();
final String access_token = bundle.getString(AccountManager.KEY_AUTHTOKEN);
// store token somewhere you can supply it to your web server.
} catch (Exception e) {
// do something here.
}
}
}
Make some request to your web server, supplying the access token.
On the web server, validate the access token and obtain the email address:
curl -d 'access_token=<this is the token the app sent you>' https://www.googleapis.com/oauth2/v1/tokeninfo
You should get something like this:
{
"issued_to": "<something>.apps.googleusercontent.com",
"audience": "<something>.apps.googleusercontent.com",
"scope": "https://www.googleapis.com/auth/userinfo.email",
"expires_in": 3562,
"email": "<users email address>",
"verified_email": true,
"access_type": "online"
}
or if something went wrong:
{
"error": "invalid_token",
"error_description": "Bad Request"
}
您可以使用 Google+ People API 获取用户的姓名。(它不会提供用户的电子邮件地址)。
如果没问题,您可以使用“知道您在 Google 上的身份”作为 authTokenType。
Google 提供了一个示例应用程序,演示了如何将 AndroidAccountManager 与 Google+ API 结合使用。
链接:http ://code.google.com/p/google-plus-java-starter/source/browse/#hg%2Fandroid