Android - 如何获取 google plus 访问令牌?
Posted
技术标签:
【中文标题】Android - 如何获取 google plus 访问令牌?【英文标题】:Android - how to get google plus access token? 【发布时间】:2014-07-08 16:46:46 【问题描述】:您好,我在不使用 OAuth 2.0 客户端 ID 和范围的情况下获取 google plus 访问令牌。但是使用此访问令牌不会获取电子邮件地址。如何获取用户邮箱?
带有和不带有 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();
【问题讨论】:
显示一些你尝试过的代码。 请检查更新的问题 你遇到了什么异常? 没有例外,但是,使用此访问代码,我在服务器端获取用户的个人资料信息而没有电子邮件 ID 这意味着您正在获取访问令牌? 【参考方案1】: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();
【讨论】:
@Deprecated public static String getToken(Context var0, String var1, String var2)【参考方案2】:有两种简单的方法可以从 Google plus 获取用户电子邮件,
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
您必须在androidManifest.xml
中声明权限<uses-permission android:name="android.permission.GET_ACCOUNTS" />
才能使用这些方法。
来自 Google 开发者网站的完整示例,
执行以下操作从 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
【讨论】:
我已经用更多信息编辑了我的答案。希望对您有所帮助。以上是关于Android - 如何获取 google plus 访问令牌?的主要内容,如果未能解决你的问题,请参考以下文章
Android - 如何获取 google plus 访问令牌?
如何从 Android 上的 Google 地图共享 url 获取坐标
如何在android中获取google plus的刷新令牌?