Pourquoi est-ce que demandeIdToken est de retour nulle?

J'ai suivi les étapes ci-dessous comme ce lien

  1. J'ai téléchargé google-services.json dans mon dossier d'application.
  2. Mon fichier gradle au niveau du projet:

  3. Sélecteur, Layer-list et shape / bitmap dans le même xml
  4. Caméra Android dans Portrait on SurfaceView
  5. Confusion d'enregistrement Android GCM
  6. Comment puis-je accéder à mon hôte local via un téléphone Android?
  7. Appel de l'API cachée dans Android pour éteindre l'écran
  8. Prospectus obscurcissement et méthodes génériques
  9. dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classpath 'com.google.gms:google-services:1.5.0-beta2' } 
  10. Le fichier de gradle de mon niveau d'application:

     apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' dependencies { compile fileTree(include: ['*.jar'], dir: 'libs') compile 'com.google.android.gms:play-services-identity:8.3.0' compile 'com.google.android.gms:play-services:8.3.0' compile 'com.google.android.gms:play-services-plus:8.3.0' compile 'com.google.android.gms:play-services-auth:8.3.0' ... } 
  11. J'ai créé l'ID client OAuth 2.0 pour mon serveur backend et je passe cette ID client au fichier strings.xml.

  12. Et finalement, j'ai créé les objets GoogleSignInOptions et GoogleApiClient comme suit:

     GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken(getString(R.string.server_client_id)) .build(); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); 

    Mais le problème est result.isSuccess () renvoie toujours false dans la fonction handleSignInResult. Je pense peut-être que je fais quelque chose à tort à la 1ère ou 2ème étape. Et mes codes sont presque similaires à ce SignInActivity.java . Toute aide serait appréciée.

  • Liste d'application installée à partir de Google Play Against Google Account
  • Com.android.build.transform.api.TransformException
  • Pour chaque intérieur d'un pour chaque - Java
  • Comment ajouter des informations de profil dans le tiroir de navigation Android?
  • Android: ne peut pas compléter l'installation en raison d'une dépendance conflictuelle
  • NoClassDefFoundError pour OkHttpClient
  • 3 Solutions collect form web for “Pourquoi est-ce que demandeIdToken est de retour nulle?”

    Comme j'ai répondu à la question suivante:

    La demande de connexion GoogleIdToken renvoie null

    Pour demander un jeton d'identité avec succès, vous devez utiliser un type d'identifiant client «Identité Web», au lieu de «Type d'appareil Android».

    Vous trouverez également à la documentation de Google les informations suivantes (note n ° 3):

    Créez une ID client OAuth 2.0 pour votre serveur backend

    Si votre application authentifie avec un serveur backend ou accède aux API Google à partir de votre serveur backend, vous devez créer une ID client OAuth 2.0 pour votre serveur. Pour créer un identifiant client OAuth 2.0:

    1. Ouvrez la page Credentials.
    2. Cliquez sur Ajouter des informations d'identification> ID de client OAuth 2.0.
    3. Sélectionnez une application Web .
    4. Cliquez sur Créer.

    Passez cette ID client à la méthode requestIdToken ou requestServerAuthCode lorsque vous créez l'objet GoogleSignInOptions.


    Mise à jour 26 mars:

    Blog des développeurs d'Android – Enregistrement des clients OAuth pour la connexion à Google

    Dans mon cas, j'ai eu précédemment ,

      GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); 

    Je l'ai corrigé en ajoutant la méthode requestToken ajoutée,

      GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .requestIdToken(getString(R.string.default_web_client_id)) .build(); 

    Maintenant, ça fonctionne pour moi. Heureusement, cela peut aider quelqu'un qui a des problèmes comme moi.

    Nous pouvons utiliser la méthode requestServerAuthCode avec "WebApplication ClientID" et créer une méthode pour récupérer le jeton d'accès comme ci-dessous;

    Nouveau GoogleSignInOptions.Builder (GoogleSignInOptions.DEFAULT_SIGN_IN)

      .requestServerAuthCode("WEBAPPLICATION CLIENT ID") .requestEmail() .build()) 

    Comme on l'a vu, nous avons besoin d'une ID CLIENT WEBAPPLICATION, nous pouvons être obtenus à partir de https://console.developers.google.com ;

    Obtenir l'identifiant client de l'application Web comme suit

    Void fetchGoogleAuthToken () {

     OkHttpClient client = new OkHttpClient(); RequestBody requestBody = new FormEncodingBuilder() .add("grant_type", "authorization_code") .add("client_id", "812741506391- h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com") .add("client_secret", "{clientSecret}") .add("redirect_uri","") .add("code", "4/4-GMMhmHCXhWEzkobqIHGG_EnNYYsAkukHspeYUk9E8") .build(); final Request request = new Request.Builder() .url("https://www.googleapis.com/oauth2/v4/token") .post(requestBody) .build(); client.newCall(request).enqueue(new Callback() { @Override public void onFailure(final Request request, final IOException e) { Log.e(LOG_TAG, e.toString()); } @Override public void onResponse(Response response) throws IOException { try { JSONObject jsonObject = new JSONObject(response.body().string()); final String message = jsonObject.toString(5); Log.i(LOG_TAG, message); } catch (JSONException e) { e.printStackTrace(); } } }); 

    }

    Utilisez compile 'com.squareup.okhttp: okhttp: 2.6.0' (la version 3-RC1 aura différentes classes) ou vous pouvez utiliser n'importe quel cadre réseau pour effectuer l'appel ci-dessus

    Avec une réponse réussie, vous disposez des informations suivantes en logcat:

    I / onResponse: {"expires_in": 3600,

      "token_type": "Bearer", "refresh_token": "1\/xz1eb0XU3....nxoALEVQ", "id_token": "eyJhbGciOiJSUzI1NiIsImtpZCI6IjQxMWY1Ym......yWVsUA", **"access_token": "ya29.bQKKYah-........_tkt980_qAGIo9yeWEG4"** } 

    Comme on le voit, acces_token est disponible pour une utilisation ultérieure.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.