6

AccountManagerからGoogleAuthtokenを取得し、Webサービス(App Engineでホストされていない)に送信してユーザーを認証したいと思います(これに許可が必要ない場合は、メールアドレスと最終的には名前が必要です)。

「getAuthToken」メソッドの「authTokenType」パラメータには何を使用する必要がありますか?

そして、ユーザーの電子メールを取得するためにどのgoogle Apiを使用する必要がありますか?

4

3 に答える 3

4

これは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以降を搭載したすべてのデバイスで利用できるはずです。プロファイルトークンの取得はそれで機能します、実際、彼らはデモアプリでそれを使用します

于 2012-05-18T02:58:53.000 に答える
3

参考文献のようなものを見つけることができなかったので、私もこれに問題がありました。おそらくこれはあなたを助けることができます(アカウントマネージャーの使用に関するAndroidの例からコピーされたコード):

  1. 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);
    
  2. コールバックで、アクセストークンを抽出します。

    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.
            }
        }
    }
    
  3. アクセストークンを提供して、Webサーバーにリクエストを送信します。

  4. 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"
    }
    
于 2012-09-15T10:47:53.750 に答える
0

ユーザーの名前は、Google +PeopleAPIを使用して取得できます。(ユーザーのメールアドレスは提供されません)。

これで問題がない場合は、authTokenTypeとして「Googleで誰であるかを知る」を使用できます。

Google+APIと組み合わせてAndroidAccountManagerを使用する方法を示すGoogleが提供するサンプルアプリケーションがあります。

リンク:http ://code.google.com/p/google-plus-java-starter/source/browse/#hg%2Fandroid

于 2012-05-14T20:02:21.410 に答える