Android – 如何获得谷歌加访问令牌?

您好,我正在获取谷歌加访问令牌,而不使用范围与OAuth 2.0客户端ID。 但是使用此访问令牌不会获取电子邮件地址。 如何获取用户的电子邮件地址?

accesstoken和OAuth 2.0客户端ID之间是否有区别?

我用了下面的代码,

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

Solutions Collecting From Web of "Android – 如何获得谷歌加访问令牌?"

有两种简单的方法可以从Google获得用户Email,

通过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调用,并执行简单的JSONparsing

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

您必须在AndroidManifest.xml声明权限<uses-permission android:name="android.permission.GET_ACCOUNTS" />以使用这些方法。

来自Google开发者网站的完整示例,

做下面的事情,以检索经过身份validation的用户的电子邮件从谷歌加,

 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

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