web-dev-qa-db-ja.com

Android-グーグルプラスアクセストークンを取得する方法は?

こんにちは私はOAuth 2.0クライアントIDとスコープを使用せずにグーグルプラスアクセストークンを取得しています。しかし、このアクセストークンではメールアドレスを取得しません。ユーザーのメールアドレスを取得するにはどうすればよいですか?

OAuth 2.0クライアントIDがある場合とない場合のaccesstokenに違いはありますか?

私は次のコードを使用しました、

String accessToken="";
                    try {
                        accessToken = GoogleAuthUtil.getToken(
                                getApplicationContext(),
                                mPlusClient.getAccountName(), "oauth2:"
                                        + Scopes.PLUS_LOGIN + " "
                                        + Scopes.PLUS_PROFILE);

                        System.out.println("Access token==" + accessToken);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
10
Mind Android
String accessToken = "";
try {
  URL url = new URL("https://www.googleapis.com/oauth2/v1/userinfo");
  // get Access Token with Scopes.PLUS_PROFILE
  String sAccessToken;
  sAccessToken = GoogleAuthUtil.getToken(
    LoginCheckActivity.this,
    mPlusClient.getAccountName() + "",
    "oauth2:"
      + Scopes.PLUS_PROFILE + " "
      + "https://www.googleapis.com/auth/plus.login" + " "
      + "https://www.googleapis.com/auth/plus.profile.emails.read");
} catch (UserRecoverableAuthException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();                  
  Intent recover = e.getIntent();
  startActivityForResult(recover, 125);
  return "";
} catch (IOException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
} catch (GoogleAuthException e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
4
Mind Android

Googleプラスからユーザーのメールを取得する2つの簡単な方法があります。

1.以下のように_Plus.AccountApi.getAccountName_を介して、

String email = Plus.AccountApi.getAccountName(mGoogleApiClient);

2.以下のような_plus.profile.emails.read scope and REST end point_を介して、

GooglePlus AccessTokenを取得します

以下のようにGooglePlusからAccessTokenを取得するには、このスコープを_" https://www.googleapis.com/auth/plus.profile.emails.read"_に渡す必要があります。

_accessToken = GoogleAuthUtil.getToken(
                                getApplicationContext(),
                                mPlusClient.getAccountName(), "oauth2:"
                                        + Scopes.PLUS_LOGIN + " "
                                        + Scopes.PLUS_PROFILE+" https://www.googleapis.com/auth/plus.profile.emails.read");
_

RESTエンドポイントを呼び出し、単純なJSON解析を実行します

https://www.googleapis.com/plus/v1/people/me?access_token=XXXXXXXXXXXXX

これらのメソッドを使用するには、_<uses-permission Android:name="Android.permission.GET_ACCOUNTS" />_で権限_AndroidManifest.xml_を宣言する必要があります。

Google Developerサイトからの完全な例

Googleプラスから認証されたユーザーのメールを取得するには、次のようにします。

_class UserInfo {
  String id;
  String email;
  String verified_email;
}

final String account = Plus.AccountApi.getAccountName(mGoogleApiClient);

AsyncTask<Void, Void, String> task = new AsyncTask<Void, Void, String>() {

  @Override
  protected UserInfo doInBackground(Void... params) {
    HttpURLConnection urlConnection = null;

    try {
      URL url = new URL("https://www.googleapis.com/plus/v1/people/me");
      String sAccessToken = GoogleAuthUtil.getToken(EmailTest.this, account,
        "oauth2:" + Scopes.PLUS_LOGIN + " https://www.googleapis.com/auth/plus.profile.emails.read");

      urlConnection = (HttpURLConnection) url.openConnection();
      urlConnection.setRequestProperty("Authorization", "Bearer " + sAccessToken);

      String content = CharStreams.toString(new InputStreamReader(urlConnection.getInputStream(),
          Charsets.UTF_8));

      if (!TextUtils.isEmpty(content)) {
        JSONArray emailArray =  new JSONObject(content).getJSONArray("emails");

        for (int i = 0; i < emailArray.length; i++) {
          JSONObject obj = (JSONObject)emailArray.get(i);

          // Find and return the primary email associated with the account
          if (obj.getString("type") == "account") {
            return obj.getString("value");
          }
        }
      }
    } catch (UserRecoverableAuthException userAuthEx) {
      // Start the user recoverable action using the intent returned by
      // getIntent()
      startActivityForResult(userAuthEx.getIntent(), RC_SIGN_IN);
      return;
   } catch (Exception e) {
      // Handle error
      // e.printStackTrace(); // Uncomment if needed during debugging.
    } finally {
      if (urlConnection != null) {
        urlConnection.disconnect();
      }
    }

    return null;
  }

  @Override
  protected void onPostExecute(String info) {
      // Store or use the user's email address
  }

};

task.execute();
_

フォア詳細情報これを読む

https://developers.google.com/+/mobile/Android/people

13
Spring Breaker