0

Google Plus API からアクセス トークンを取得しようとしています。

次のコードを実行します。

private class RetrieveTokenTask extends AsyncTask<String, Void, String> {

    @Override
    protected String doInBackground(String... params) {
        String accountName = params[0];
        Log.e("accountName", accountName);
        String scopes = "oauth2:" + Scopes.PLUS_ME; //

        String token = null;
        try {
            token = GoogleAuthUtil.getToken(getApplicationContext(), accountName, scopes);
        } catch (IOException e) {
            Log.e("GOOGLE+", e.getMessage());
        } catch (UserRecoverableAuthException e) {
            startActivityForResult(e.getIntent(), RC_SIGN_IN);
        } catch (GoogleAuthException e) {
            Log.e("GOOGLE+", e.getMessage());
        }
        return token;
    }

    @Override
    protected void onPostExecute(String s) {
        Log.d("TOKEN", "token: " + s);
    }
}

ヘッダー Authorization Bearer を使用してhttps://www.googleapis.com/oauth2/v1/userinfoへの HTTP GET を使用して、postman でアクセス トークンを確認し ます。

結果:

{
id: "111111111111"
name: "my name"
given_name: "my"
family_name: "name"
link: https://plus.google.com/123456789
picture: https:....jpg
gender: "male"
}

ユーザーの電子メールを取得するにはどうすればよいですか? どのスコープを使用する必要がありますか?

4

2 に答える 2

3

https://developers.google.com/+/api/oauthから:

このhttps://www.googleapis.com/auth/plus.meスコープをログイン スコープとして使用することはお勧めしません。Google+ にアップグレードしていないユーザーには、ユーザーの名前やメール アドレスが返されないためです。

代わりに、profileスコープまたはhttps://www.googleapis.com/auth/plus.loginスコープ (として利用可能Scopes.PLUS_LOGIN) のいずれかを使用することをお勧めします。

さらにemailスコープ (これはスコープの完全な名前であり、URL 形式ではありません) が必要になるため、電子メール アドレスが呼び出しの一部として返されます。

スコープの定義は次のようになります。

String scopes = "oauth2:email " + Scopes.PLUS_LOGIN;

また

String scopes = "oauth2:profile email"; 

https://www.googleapis.com/oauth2/v1/userinfoエンドポイントは廃止され、散発的に動作し、9 月に削除される予定です。

代わりに、https://www.googleapis.com/plus/v1/people/me (「me」は認証済みユーザーのユーザー ID を表します) を使用し、Authorization ヘッダーに以前と同じ Bearer トークンを提供する必要があります。

非推奨と移行の詳細については、https://developers.google.com/+/api/auth-migrationを参照してください。

于 2014-08-21T13:05:38.580 に答える