Min*_*oid 10 android access-token oauth-2.0 google-play
您好我得到谷歌加访问令牌而不使用带范围的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();
}
Run Code Online (Sandbox Code Playgroud)
Spr*_*ker 13
有两种简单的方法可以从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"
此范围AccessToken
从GooglePlus 获取如下所示,
accessToken = GoogleAuthUtil.getToken(
getApplicationContext(),
mPlusClient.getAccountName(), "oauth2:"
+ Scopes.PLUS_LOGIN + " "
+ Scopes.PLUS_PROFILE+" https://www.googleapis.com/auth/plus.profile.emails.read");
Run Code Online (Sandbox Code Playgroud)
对端点进行REST调用并执行简单的JSON解析
https://www.googleapis.com/plus/v1/people/me?access_token=XXXXXXXXXXXXX
您必须<uses-permission android:name="android.permission.GET_ACCOUNTS" />
在您的权限中声明权限AndroidManifest.xml
才能使用这些方法.
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();
Run Code Online (Sandbox Code Playgroud)
更多信息请阅读此内容
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();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20056 次 |
最近记录: |