AccountManagerからGoogleAuthtokenを取得し、Webサービス(App Engineでホストされていない)に送信してユーザーを認証したいと思います(これに許可が必要ない場合は、メールアドレスと最終的には名前が必要です)。
「getAuthToken」メソッドの「authTokenType」パラメータには何を使用する必要がありますか?
そして、ユーザーの電子メールを取得するためにどのgoogle Apiを使用する必要がありますか?
AccountManagerからGoogleAuthtokenを取得し、Webサービス(App Engineでホストされていない)に送信してユーザーを認証したいと思います(これに許可が必要ない場合は、メールアドレスと最終的には名前が必要です)。
「getAuthToken」メソッドの「authTokenType」パラメータには何を使用する必要がありますか?
そして、ユーザーの電子メールを取得するためにどのgoogle Apiを使用する必要がありますか?
これはOpenIDConnectを使用して実行できますが、実験的なものであるため、詳細は将来変更される可能性があります。'https://www.googleapis.com/auth/userinfo.email'または'https://www.googleapis.com/auth/userinfo.profile'スコープのOAuthトークンを取得する場合は、それを使用して取得できますhttps://www.googleapis.com/oauth2/v1/userinfoからのユーザー情報(電子メールを含む)。もちろん、ユーザーはこれを承認する必要があります。
理論的には、トークンタイプとして「oauth2:https://www.googleapis.com/auth/userinfo.profile」を使用してトークンを取得できるはずですAcccountManager
が、それは私のデバイスでは機能しないようです(Galaxy Nexus在庫あり4.0.4)。を介してトークンを取得することAccountManager
は(少なくとも今のところ)機能しないため、信頼できる唯一の方法は、WebViewを使用して、https ://developers.google.com/accounts/docs/で説明されているようにブラウザを介してトークンを取得することです。モバイルアプリ
これを行うデモWebアプリがここにあります:https ://oauthssodemo.appspot.com
(後期)更新:Google Playサービスがリリースされ、OAuthトークンを取得するための推奨される方法です。Android2.2以降を搭載したすべてのデバイスで利用できるはずです。プロファイルトークンの取得はそれで機能します、実際、彼らはデモアプリでそれを使用します
参考文献のようなものを見つけることができなかったので、私もこれに問題がありました。おそらくこれはあなたを助けることができます(アカウントマネージャーの使用に関するAndroidの例からコピーされたコード):
Androidアプリのイベントハンドラーのどこかで、認証トークンのリクエストを発行して、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);
コールバックで、アクセストークンを抽出します。
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.
}
}
}
アクセストークンを提供して、Webサーバーにリクエストを送信します。
Webサーバーで、アクセストークンを検証し、電子メールアドレスを取得します。
curl -d 'access_token=<this is the token the app sent you>' https://www.googleapis.com/oauth2/v1/tokeninfo
次のようなものを取得する必要があります。
{
"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"
}
または何かがうまくいかなかった場合:
{
"error": "invalid_token",
"error_description": "Bad Request"
}
ユーザーの名前は、Google +PeopleAPIを使用して取得できます。(ユーザーのメールアドレスは提供されません)。
これで問題がない場合は、authTokenTypeとして「Googleで誰であるかを知る」を使用できます。
Google+APIと組み合わせてAndroidAccountManagerを使用する方法を示すGoogleが提供するサンプルアプリケーションがあります。
リンク:http ://code.google.com/p/google-plus-java-starter/source/browse/#hg%2Fandroid