5

Sto provando a far funzionare un endpoint google. Ho creato un servizio endpoint e sono riuscito a testare la sua validità operativa tramite lo strumento di sviluppo API di Google. Ho quindi generato il client Android e ho provato a chiamare il mio servizio di endpoint. Vedo questo errore nel registro,Errore GLS: INVALID_AUDIENCE in endpoint cloud google

04-05 08:48:20.547: I/GLSUser(13505): GLS error: INVALID_AUDIENCE [email protected] audience:server:client_id:334082396285-hfn3t2g5pg0gv8fshf22kaadq9fs23e2.apps.googleusercontent.com 

Ecco il mio codice Java di Android per costruire la credenziale cioè utilizzato per accedere al mio servizio,

AUDIENCE = "server:client_id:334082396285-hfn3t2g5pg0gv8fshf22kaadq9fs23e2.apps.googleusercontent.com"; 
credential = GoogleAccountCredential.usingAudience(this, AUDIENCE); 
      setAccountName(settings.getString(PREF_ACCOUNT_NAME, null)); 

Sembra che ci sia un po 'mancata corrispondenza client_id. Ecco quello che ho fatto,

1) Creato 2 client_ids in console API di Google in un unico progetto API, a) WEB_CLIENT_ID = Ho creato un client_id per le applicazioni web con Redirect URI = Nessuno & JavaScript origini = nessuno. b) ANDROID_CLIENT_ID = Creato un client_id per l'app Android con il nome del pacchetto & fingerprint del certificato sha1.

2) poi utilizzato questi nel mio servizio di endpoint in python,

@endpoints.api(name='devices', 
       version='v1', 
       description='Service to register devices', 
       allowed_client_ids=[ANDROID_CLIENT_ID,WEB_CLIENT_ID,endpoints.API_EXPLORER_CLIENT_ID], 
       audiences = [WEB_CLIENT_ID]) 

completa registro

04-05 08:48:20.397: D/overlay(159): Set pipe=RGB1 dpy=0; Set pipe=VG0 dpy=0; 
04-05 08:48:20.547: W/GLSUser(13505): Status from wire: INVALID_AUDIENCE status: null 
04-05 08:48:20.547: W/GLSUser(13505): Status from wire: INVALID_AUDIENCE status: null 
04-05 08:48:20.547: I/GLSUser(13505): GLS error: INVALID_AUDIENCE [email protected] audience:server:client_id:334082396285-hfn3t2g5pg0gv8fshf22kaadq9fs23e2.apps.googleusercontent.com 
04-05 08:48:20.547: W/GLSUser(13505): Status from wire: Unknown status: UNKNOWN 
04-05 08:48:20.547: W/System.err(31908): com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAuthIOException 
04-05 08:48:20.547: W/System.err(31908): at com.google.api.client.googleapis.extensions.android.gms.auth.GoogleAccountCredential$RequestHandler.intercept(GoogleAccountCredential.java:224) 
04-05 08:48:20.547: W/System.err(31908): at com.google.api.client.http.HttpRequest.execute(HttpRequest.java:836) 
04-05 08:48:20.547: W/System.err(31908): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:412) 
04-05 08:48:20.557: W/System.err(31908): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.executeUnparsed(AbstractGoogleClientRequest.java:345) 
04-05 08:48:20.557: W/System.err(31908): at com.google.api.client.googleapis.services.AbstractGoogleClientRequest.execute(AbstractGoogleClientRequest.java:463) 
04-05 08:48:20.557: W/System.err(31908): at com.package.appname.SetupActivity$SendResultToServerTask.doInBackground(SetupActivity.java:174) 
04-05 08:48:20.557: W/System.err(31908): at com.package.appname.SetupActivity$SendResultToServerTask.doInBackground(SetupActivity.java:1) 
04-05 08:48:20.557: W/System.err(31908): at android.os.AsyncTask$2.call(AsyncTask.java:287) 
04-05 08:48:20.557: W/System.err(31908): at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
04-05 08:48:20.557: W/System.err(31908): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
04-05 08:48:20.557: W/System.err(31908): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
04-05 08:48:20.557: W/System.err(31908): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
04-05 08:48:20.557: W/System.err(31908): at java.lang.Thread.run(Thread.java:856) 
04-05 08:48:20.557: W/System.err(31908): Caused by: com.google.android.gms.auth.GoogleAuthException: Unknown 
04-05 08:48:20.557: W/System.err(31908): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
04-05 08:48:20.557: W/System.err(31908): at com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 

hanno già visto le discussioni simili e loro non hanno aiutato, Google Api and android Oauth INVALID_AUDIENCE error

+0

rigenerato un nuovo client_id applicazione web nella mia console API. Utilizzato in pubblico nel back-end del motore di app e anche nell'ambito del pubblico di Android. Ancora senza fortuna. – plspl

+0

Ha rinominato il mio pacchetto di app Android e generato un nuovo ID client Android. Ancora ottenere lo stesso errore. – plspl

+0

Per eliminare evidenti fonti di errore, sono in esecuzione il tuo Endpoint nella produzione e test su un dispositivo Android fisico (non l'emulatore)? –

risposta

4

Phew! Finalmente ha funzionato. Non so cosa fosse sbagliato. Ho provato queste cose, cancellato il file keystore di debug e rigenerato. Copiato l'impronta digitale sha1 alla console di api. Poi ho seguito le istruzioni da qui - http://android-developers.blogspot.com/2013/01/verifying-back-end-calls-from-android.html per assicurarmi di poter ottenere almeno un token sul dispositivo Android. Poi ho cambiato usando le classi client generate dall'endpoint. Ora la mia app è in grado di parlare con il back-end del motore delle app attraverso il servizio degli endpoint.

6

Risolvo questo problema impostando un nome per il progetto nella console di google api.

Nella nuova console UI API [API & auth] -> [schermata Consenso]

2

Questo problema si è verificato per me quando ho creato un nuovo ambiente di sviluppo su un altro sistema. Ho installato Android Studio sul nuovo sistema e ho copiato il codice. Lo stesso codice che funzionava sul mio vecchio sistema non funzionava sul nuovo, con INVALID_AUDIENCE. Dopo aver provato diverse cose, ciò che alla fine ha funzionato è stato copiare il file debug.keystore dal mio vecchio sistema al nuovo. Su Windows il file si trova in% USERPROFILE% .android. Questo ha senso dal momento che il debug.keystore è generato da Android Studio all'installazione specifica per quel computer. Il debug.keystore ha una data di scadenza (365 giorni ho sentito) quindi questa potrebbe essere la causa. Quindi la vera soluzione per me era rigenerare il file debug.keystore sul nuovo sistema. L'eliminazione del file debug.keystore e il riavvio di Android Studio rigenereranno il file. Quindi eseguire keytool per ottenere l'impronta digitale del certificato SHA1. Quindi vai a http://console.developers.google.com per creare un nuovo ID cliente con l'impronta digitale.

3

Si otterrà questo errore se l'ANDROID_CLIENT_ID che si annota @ Api # clientIds con ha un nome di pacchetto Android diverso da quello del client Android.

Es

@Api(
    name = "yourFirstService", 
    version = "v1", 
    namespace = @ApiNamespace(ownerDomain = "myorg.org", ownerName = "My Org", packagePath = "firstservice"), 
    scopes = {Constant.API_EMAIL_SCOPE}, 
    clientIds = {Constants.ANDROID_CLIENT_ID, Constant.API_EXPLORER_CLIENT_ID}, 
    audiences = {Constants.ANDROID_AUDIENCE} 
) 
public class YourFirstAPI { 
    ... 
} 

Il punto di interesse è l'attributo clientId. L'ANDROID_CLIENT_ID deve essere

  1. Abbinare l'ID cliente all'applicazione Cloud Console->APIS & Auth->Credentials->Client ID for Android.
  2. Il nome del pacchetto di quel clientId deve essere lo stesso che l'applicazione Android si utilizza come un client.
+0

bro ha u significa che ho bisogno di aggiungere il nome del pacchetto da qualche parte in @APi (..) il mio. il nome del pacchetto dell'applicazione è uguale a quello del nome del pacchetto dell'app Android della console di google, ANCHE sto ricevendo lo stesso eorror, Pls può aiutarti? – Tanvir

+0

Il valore di Constants.ANDROID_CLIENT_ID deve corrispondere al valore del vostro Android nome del pacchetto di applicazioni (in AndroidManifest). Deve anche corrispondere al clientId nella console cloud. – William

+0

Intende il nome del pacchetto richiesto per creare l'ID client in google console? mi stai dicendo Il nome di quel PACCHETTO deve essere uguale al nome del mio pacchetto di app in manifest? – Tanvir

2

È successo a uno sulla mia squadra sebbene funzionasse correttamente sul mio dispositivo. Si rivelò essere a causa di un diverso debug.keystore sulle nostre installazioni Eclipse.

per risolverlo abbiamo copiato il file della società debug.keystore-~/.android/ (questa è la directory su un Mac, è diverso su Linux e Windows)