Android - 如何获取谷歌加访问令牌?

时间:2014-05-20 12:13:31

标签: android oauth-2.0 google-play access-token

您好我在不使用OAuth 2.0客户端ID和范围的情况下获得了Google +访问令牌。但是使用此访问令牌不会获取电子邮件地址。如何获取用户电子邮件地址?

使用和不使用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();
                    }

2 个答案:

答案 0 :(得分:13)

有两种简单的方法可以从Google +获取用户电子邮件,

1.通过下面的Plus.AccountApi.getAccountName

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

2.通过以下plus.profile.emails.read scope and REST end point

获取GooglePlus AccessToken

您需要通过" https://www.googleapis.com/auth/plus.profile.emails.read"此范围从GooglePlus获取AccessToken,如下所示

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 plus中检索经过身份验证的用户的电子邮件,

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

答案 1 :(得分:4)

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();
}