0

J'essaie d'obtenir Auth Token sur Android qui peut être échangé pour accessToken et RefreshToken sur mon serveur web. Je suis this documentation.
Plus précisément la section - Android app obtient un accès hors connexion pour le web back-endJe ne suis pas en mesure d'obtenir Auth Token en utilisant GoogleAuthUtil.getToken

Mon code:

String WEB_APP_CLIENT_ID = "***.apps.googleusercontent.com"; 
String scopes = "oauth2:server:client_id:" + WEB_APP_CLIENT_ID+":api_scope:" + Scopes.PLUS_LOGIN + " https://www.googleapis.com/auth/plus.profile.emails.read"; 
//String this_scope_works_but_gives_access_token = "oauth2:" + Scopes.PLUS_LOGIN + " https://www.googleapis.com/auth/plus.profile.emails.read"; 
try { 
    String authToken = GoogleAuthUtil.getToken(AttachEmailActivity.this, account,scopes); 
} catch (GoogleAuthException e) { 
    e.printStackTrace(); 
} 

Mais il est toujours me donner exception suivante:

com.google.android.gms.auth.GoogleAuthException: Unknown 
com.google.android.gms.auth.GoogleAuthUtil.zza(Unknown Source) 
com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
com.google.android.gms.auth.GoogleAuthUtil.getToken(Unknown Source) 
app.activities.AttachEmailActivity$1.run(AttachEmailActivity.java:437) 

J'ai lu et essayé sur presque toutes les solutions sur des problèmes similaires, il échoue toujours. En fait, j'ai utilisé l'API de repos en dehors de mon application JAVA en utilisant le même identifiant de client web et j'ai pu utiliser l'API de repos en dehors de mon application JAVA. pour obtenir le code d'autorisation requis.

https://accounts.google.com/o/oauth2/auth?response_type=code&client_id= ****. Apps.googleusercontent.com & redirect_uri = http://localhost&scope=https://www.googleapis.com/auth/plus.login&access_type=offline

Mais dans l'application Java, je ne reçois l'exception "Unknown". Vous ne pouvez pas donner plus d'informations? Qu'est-ce qui est inconnu? Existe-t-il un moyen d'obtenir le code du package com.google.android.gms.auth et de voir d'où provient l'exception?

Here is the view of credentials dashboard

+0

Avez-vous enregistré votre clé à la console API Google Developer? –

+0

Niko - J'ai ajouté l'image de mon tableau de bord des informations d'identification dans le cadre de la question. –

Répondre

0

Dans mon cas je besoin de prendre UserRecoverableAuthException demander la permission de l'utilisateur

String scopes = "oauth2:server:client_id:" 
     + 
     getResources().getString(R.string.google_auth_client_id) 
     + 
     ":api_scope:" + Scopes.PLUS_LOGIN; 
try { 
    String token = GoogleAuthUtil.getToken(MyActivity.this, 
      Plus.AccountApi.getAccountName(googleApiClient), scopes); 
    subscriber.onNext(token); 
} catch (UserRecoverableAuthException e) { 
    startActivityForResult(e.getIntent(), 888); 
    e.printStackTrace(); 
} catch (GoogleAuthException | IOException e) { 
    e.printStackTrace(); 
} 

puis obtenir jeton à l'intérieur onActivityResult

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    if (requestCode == 888) { 
     if (data != null && resultCode == Activity.RESULT_OK) { 
      Bundle extra = data.getExtras(); 
      String token = extra.getString(getResources() 
        .getString("authtoken")); 
      // Do something with your token 
     } 

     if (!googleApiClient.isConnecting()) { 
      googleApiClient.connect(); 
     } 
    } 
} 
+0

Le code est similaire, mais pour moi, le problème vient de l'appel getToken lui-même. Si j'utilise la chaîne de portée plus simple (c'est-à-dire sans serveur: client_id "), elle affiche la chaîne d'authentification et renvoie l'attribut accessToken. –

0

Vérifiez les points suivants ci-dessous

1.Vérifiez les enregistrements La clé est le travail ou pas?

2.Vérifiez votre clé pour Debug ou Signatured apk.

3.Si la clé pour Signatured apk, Il ne fonctionne pas pour le mode de débogage. 4. Vous devez donc créer apk signatured et installer dans votre mobile Android et vérifier que cela fonctionne ou non?

5.Est-ce que vous avez un groupe (comme ci-dessous) lorsque vous vous connectez via le profil Gmail dans votre application Android? 6. Si vous n'obtenez pas la fenêtre contextuelle (écran de consentement) lors du choix du compte Gmail,

sûrement le problème est votre clé enregistré

enter image description here

+0

Je reçois l'écran de consentement avec la chaîne de portée plus simple: "oauth2:" + Scopes.PLUS_LOGIN + "https://www.googleapis.com/auth/plus.profile.emails.read"; mais avec l'autre, je reçois l'exception. Et le même client_id je suis capable d'utiliser dans le navigateur en utilisant le reste de l'API –

+0

J'utilise apk signatured et test sur mon appareil. Peut-être que j'ai besoin de recommencer. : ( –

+0

Êtes-vous Auth Token? Et Vérifiez aussi votre connexion Internet mobile Android –