I want to have Google Plus login in my application. I could connect but unable to get current user\'s profile information
@Override
public void onConnected()
finally i found the answer . :)
loadPerson()
and loadPeople()
will return you expected data only in exported APK signed with valid key . by valid here i mean it should match with SHAI and other specification of your API key console .
one more thing you could missed when following sample code is define scope in PlusClient constructor, like
mPlusClient = new PlusClient.Builder(this, this, this).setScopes(Scopes.PLUS_LOGIN)
.setVisibleActivities("http://schemas.google.com/AddActivity").build();
private class connectAsyncTask extends AsyncTask<String, Void, String> {
String sAccessToken = null;
@Override
protected void onPostExecute(String info) {
Log.d("JSONData = ", "" + info);
//This contains all the data you wanted.
}
@Override
protected String doInBackground(String... params) {
HttpURLConnection urlConnection = null;
try {
URL url = new URL(
"https://www.googleapis.com/oauth2/v1/userinfo");
sAccessToken = GoogleAuthUtil
.getToken(
MainActivity.this,
mPlusClient.getAccountName() + "",
"oauth2:"
+ Scopes.PLUS_PROFILE
+ " https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email");
//This is probably not the right way to do.
//What I am doing here is, get an AccessToken, invalidate it and get a new
//AccessToken again. Because I couldn't find a way to check whether the
//AccessToken is expired or not.
GoogleAuthUtil.invalidateToken(MainActivity.this, sAccessToken);
sAccessToken = GoogleAuthUtil
.getToken(
MainActivity.this,
mPlusClient.getAccountName() + "",
"oauth2:"
+ Scopes.PLUS_PROFILE
+ " https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email");
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestProperty("Authorization", "Bearer "
+ sAccessToken);
BufferedReader r = new BufferedReader(new InputStreamReader(
urlConnection.getInputStream(), "UTF-8"));
StringBuilder total = new StringBuilder();
String line;
while ((line = r.readLine()) != null) {
total.append(line);
}
line = total.toString();
if (!TextUtils.isEmpty(line)) {
return line;
} else {
return null;
}
} catch (UserRecoverableAuthException userAuthEx) {
// Start the user recoverable action using the intent returned
// by getIntent()
userAuthEx.printStackTrace();
mActivity.this.startActivityForResult(
userAuthEx.getIntent(), MY_ACTIVITYS_AUTH_REQUEST_CODE);
return null;
} catch (FileNotFoundException e) {
//You get this exception when the AccessToken is expired.
//I don't know how its a FileNotFoundException
//Thats why instead of relying on this, I did the above to get
//new AccessToken
} catch (Exception e) {
e.printStackTrace();
return null;
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
}
@Override
protected void onPreExecute() {
}
}