Android endpoint error: GoogleAuthIOException

I have a problem with my project where I want to connect Google Cloud Endpoints with Android. I am still getting the same error:

05-12 21:50:23.995: W/System.err(17739): com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException 05-12 21:50:23.995: W/System.err(17739): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:224) 05-12 21:50:24.000: W/System.err(17739): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:888) 05-12 21:50:24.000: W/System.err(17739): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:407) 05-12 21:50:24.000: W/System.err(17739): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:340) 05-12 21:50:24.000: W/System.err(17739): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:458) 05-12 21:50:24.000: W/System.err(17739): at com.example.endpointstutorial_android.MainActivity$QueryScoresTask.doInBackground(MainActivity.java:74) 05-12 21:50:24.005: W/System.err(17739): at com.example.endpointstutorial_android.MainActivity$QueryScoresTask.doInBackground(MainActivity.java:1) 05-12 21:50:24.005: W/System.err(17739): at android.os.AsyncTask$2.call(AsyncTask.java:287) 05-12 21:50:24.005: W/System.err(17739): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 05-12 21:50:24.005: W/System.err(17739): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 05-12 21:50:24.005: W/System.err(17739): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 05-12 21:50:24.005: W/System.err(17739): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 05-12 21:50:24.005: W/System.err(17739): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 05-12 21:50:24.005: W/System.err(17739): at java.lang.Thread.run(Thread.java:856) 05-12 21:50:24.005: W/System.err(17739): Caused by: com.google.android.gms.auth.GoogleAuthException: Unknown 05-12 21:50:24.005: W/System.err(17739): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 05-12 21:50:24.005: W/System.err(17739): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential.getToken(GoogleAccountCredential.java:192) 05-12 21:50:24.010: W/System.err(17739): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:217) 05-12 21:50:24.010: W/System.err(17739): ... 13 more` 

My Android code:

 public class MainActivity extends Activity { private static final String PREF_ACCOUNT_NAME = "pref.account.name"; public static final String AUDIENCE = "server:client_id:660102392535.apps.googleusercontent.com"; SharedPreferences settings; GoogleAccountCredential credential; String accountName; static final int REQUEST_ACCOUNT_PICKER = 2; Myendpoint service; void chooseAccount() { startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); credential = GoogleAccountCredential .usingAudience( this,AUDIENCE); settings = getSharedPreferences("SafeAndroid", 0); setAccountName(settings.getString(PREF_ACCOUNT_NAME, null)); Myendpoint.Builder builder = new Myendpoint.Builder( AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential); service = builder.build(); if (credential.getSelectedAccountName() != null) { Toast.makeText(getApplicationContext(), "logged as: " + credential.getSelectedAccountName(), 5000) .show(); sendRequest(); } else { chooseAccount(); } } private class QueryScoresTask extends AsyncTask<Void, Void, Void> { Context context; public QueryScoresTask(Context context) { this.context = context; } protected Void doInBackground(Void... unused) { Log.v("AAAAA", "2"); try { MyEntity e = service.myentity().get().execute(); Log.v("AAAAA", e.toString() + ""); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } } private void setAccountName(String accountName) { SharedPreferences.Editor editor = settings.edit(); editor.putString(PREF_ACCOUNT_NAME, accountName); editor.commit(); credential.setSelectedAccountName(accountName); this.accountName = accountName; } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); switch (requestCode) { case REQUEST_ACCOUNT_PICKER: if (data != null && data.getExtras() != null) { String accountName = data.getExtras().getString( AccountManager.KEY_ACCOUNT_NAME); if (accountName != null) { setAccountName(accountName); SharedPreferences.Editor editor = settings.edit(); editor.putString(PREF_ACCOUNT_NAME, accountName); editor.commit(); Toast.makeText( getApplicationContext(), "logged as: " + credential.getSelectedAccountName(), 5000).show(); sendRequest(); } } break; } } private void sendRequest() { QueryScoresTask a = new QueryScoresTask(this); a.execute(); } } 

And my endpoint code:

 @Api(name = "myendpoint", version = "v1",description = "This retrieves an instance of MyEntity.", clientIds = { "660102392535.apps.googleusercontent.com", "660102392535-dobseln3gde8e6lqnd2v80l3oh6mm1nh.apps.googleusercontent.com" }, audiences = { "660102392535.apps.googleusercontent.com" }) public class MyEndpoint { @ApiMethod(httpMethod = "GET", name = "myentity.get", path = "myentity/get") public MyEntity getEntity(User user) { MyBusinessClass myBusinessClass = new MyBusinessClass(); MyEntity myEntity = myBusinessClass.getMyEntity(); DatastoreService datastore = DatastoreServiceFactory.getDatastoreService(); Entity device = new Entity("gcmid", "keyname"); device.setProperty("account", user.getEmail()); device.setProperty("device", "idtelefonu1"); datastore.put(device); return myEntity; } } 

I read that some people had this problem, but did not write how to solve it. I created a new debug.key and got a new sha1, but it didn't work. Also tried to create a new Android project with a new package - it did not work.

+7
source share
4 answers

Do you use ADT for windows? If so, then the sha1 fingerprint for the debug keystore can be obtained in Windows-> Preferences-> Android-> Build for debugging mode.

+3
source

I ran into the same error with the Tic Tac Toe example.

For me, it turned out that I had read the instructions incorrectly.

In your Android code, try replacing the Android Client key:

"660102392535.apps.googleusercontent.com"

using the web client key:

"660102392535-dobseln3gde8e6lqnd2v80l3oh6mm1nh.apps.googleusercontent.com" . "660102392535-dobseln3gde8e6lqnd2v80l3oh6mm1nh.apps.googleusercontent.com"

I know this doesn't make sense, but it worked for me.

Steve

0
source

In "AppConstants.java" (the name from the tutorials), I changed the WEB_CLIENT_ID to the same web client ID as on the GAE credentials screen. According to the tutorial, this should be the Android client id, so the problem.

0
source

My problem was that I created credentials with SHA1 from my keystore. I think you understand that you need to use the debug repository, but maybe you can try to take the release version, export the signed apk, copy it to your phone and install it there. Worked in my case.

0
source

All Articles