Skip to content

Instantly share code, notes, and snippets.

@ianbarber
Created March 17, 2014 20:22
Show Gist options
  • Star 33 You must be signed in to star a gist
  • Fork 11 You must be signed in to fork a gist
  • Save ianbarber/9607551 to your computer and use it in GitHub Desktop.
Save ianbarber/9607551 to your computer and use it in GitHub Desktop.
A quick example of retrieving an access token with GoogleAuthUtil
package com.google.devrel.samples.gmstest.app;
import android.app.Activity;
import android.content.Intent;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import com.google.android.gms.auth.GoogleAuthException;
import com.google.android.gms.auth.GoogleAuthUtil;
import com.google.android.gms.auth.UserRecoverableAuthException;
import com.google.android.gms.plus.Account;
import com.google.android.gms.plus.Plus;
import java.io.IOException;
public class RetrieveAccessTokenActivity extends Activity implements View.OnClickListener {
private static final String TAG = "RetrieveAccessToken";
private static final int REQ_SIGN_IN_REQUIRED = 55664;
private String mAccountName;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_retrieve_access_token);
findViewById(R.id.button_token).setOnClickListener(this);
// Manual integration? Pop an account chooser to get this:
mAccountName = "me@example.com";
// Or if you have a GoogleApiClient connected:
// mAccountName = Plus.AccountApi.getAccountName(mGoogleApiClient);
}
@Override
public void onClick(View view) {
if (view.getId() == R.id.button_token) {
new RetrieveTokenTask().execute(mAccountName);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQ_SIGN_IN_REQUIRED && resultCode == RESULT_OK) {
// We had to sign in - now we can finish off the token request.
new RetrieveTokenTask().execute(mAccountName);
}
}
private class RetrieveTokenTask extends AsyncTask<String, Void, String> {
@Override
protected String doInBackground(String... params) {
String accountName = params[0];
String scopes = "oauth2:profile email";
String token = null;
try {
token = GoogleAuthUtil.getToken(getApplicationContext(), accountName, scopes);
} catch (IOException e) {
Log.e(TAG, e.getMessage());
} catch (UserRecoverableAuthException e) {
startActivityForResult(e.getIntent(), REQ_SIGN_IN_REQUIRED);
} catch (GoogleAuthException e) {
Log.e(TAG, e.getMessage());
}
return token;
}
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
((TextView) findViewById(R.id.token_value)).setText("Token Value: " + s);
}
}
}
@c0d3rm0nk3y
Copy link

thank you very much. I still haven't learned the finer aspects of Google's Dev doc's and spent all day trying to get their tutorials to run. Then I came across this example, 5 min and boom I got exactly what I need. Thank you again.

@agamemnus
Copy link

String scopes = "oauth2:profile email";

Does this well truly, honest-to-god work properly? Everything I have attempted has shown that it does not work reliably. Sometimes it works, sometimes it doesn't. It's driving me insane. Could it be something to do with my GoogleApiClient.Builder object?

Sometimes, I get two permissions screens: one for the whole mess of Google Plus permissions (circles, etcetc), and then the "basic" permission right after. Sometimes, it's just the first one, and then the running the authentication token gives me "invalid permissions", etc.

http://stackoverflow.com/questions/27239405/googleauthutil-get-access-token-that-will-provide-an-email-address

@thedumbtechguy
Copy link

That really helped! Thanks a bunch

@thedumbtechguy
Copy link

@agamemnus the reason you get two permission screens is due to this catch block

catch (UserRecoverableAuthException e) {
startActivityForResult(e.getIntent(), REQ_SIGN_IN_REQUIRED);
}

if the app doesn't have the necessary permissions, this will launch a new screen. You need to handle the new connection and attempt to retrieve the token again if the second screen opens up.

@manchikantishyam
Copy link

Thanks a Ton. It saved lot of time.

@yurevich1
Copy link

Due to this site is in the top of Google search ("GoogleApiClient get token") I wanna write this methods are deprecated!
Do not waste your time to use this code (Feb 2016).

@X-Strange
Copy link

yurevich1, thanks for the warning, but which is right method then? I'm searching for a complete solution.

@hmrocket
Copy link

@X-Strange did someone found the new to retrieve the access toke, cause getToken() is deprecated

@KCSOPHEAK
Copy link

KCSOPHEAK commented Nov 25, 2016

@RanaRanvijaySingh
Copy link

Worked like a charm ... thank you so much.

@sivaramakrishnant
Copy link

sivaramakrishnant commented Jul 31, 2017

Worked.But with that Access token i could not be able to receive the Contact list .
Please give me solution if you can.
Thanks in advance

@dinesh555
Copy link

@ianbarber thank you very much.That really helped #

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment