Connexion Google signé signé apk ne fonctionne pas

Eh bien tout fonctionne jusqu’à ce que je génère l’apk signé. J’ai suivi l’ensemble du processus comme indiqué sur la page des développeurs de Google

1.J’ai généré le fichier google-services.json contenant keyhash et le nom du paquet
2.Included toutes les dépendances de niveau de classe et d’application comme ceci

// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { repositories { jcenter() } dependencies { classpath 'com.android.tools.build:gradle:1.3.0' classpath 'com.google.gms:google-services:2.0.0-alpha6' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } } allprojects { repositories { jcenter() } } 

Dossier de candidature

 apply plugin: 'com.android.application' apply plugin: 'com.google.gms.google-services' android { comstackSdkVersion 23 buildToolsVersion "23.0.0" defaultConfig { applicationId "com.example.skmishra.finalgooglesignin" minSdkVersion 14 targetSdkVersion 23 versionCode 1 versionName "1.0" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } } } dependencies { comstack fileTree(dir: 'libs', include: ['*.jar']) comstack 'com.android.support:appcompat-v7:23.1.1' comstack 'com.google.android.gms:play-services:8.3.0' } 
  1. Mon code de connexion java

     package com.example.skmishra.finalgooglesignin; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.Toast; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; import com.google.android.gms.auth.api.signin.GoogleSignInResult; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.SignInButton; import com.google.android.gms.common.api.GoogleApiClient; public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener { private static final int RC_SIGN_IN = 200 ; private static final Ssortingng TAG = "Sign In" ; private GoogleApiClient mGoogleApiClient; SignInButton google; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // Configure sign-in to request the user's ID, email address, and basic // profile. ID and basic profile are included in DEFAULT_SIGN_IN. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestEmail() .build(); mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button); signInButton.setSize(SignInButton.SIZE_STANDARD); signInButton.setScopes(gso.getScopeArray()); google=(SignInButton)findViewById(R.id.sign_in_button); google.setOnClickListener(this); } @Override public void onConnectionFailed(ConnectionResult connectionResult) { Toast.makeText(this,"Failed to connect",Toast.LENGTH_LONG).show(); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.sign_in_button: signIn(); break; // ... } } private void signIn() { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, RC_SIGN_IN); } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); handleSignInResult(result); } } private void handleSignInResult(GoogleSignInResult result) { Log.d(TAG, "handleSignInResult:" + result.isSuccess()); if (result.isSuccess()) { // Signed in successfully, show authenticated UI. GoogleSignInAccount acct = result.getSignInAccount(); Toast.makeText(this,"Name :"+acct.getDisplayName()+" Email :"+acct.getEmail(),Toast.LENGTH_LONG).show(); } else { // Signed out, show unauthenticated UI. Toast.makeText(this,"Signed out ",Toast.LENGTH_LONG).show(); } } } 
    1. Mon code de mise en page

         

Si j’ai bien compris, vous avez fourni le débogage SHA1 dans la console du développeur, puis vous avez signé l’apk et le SHA1 a été modifié. Si c’est le cas, essayez ce qui suit, vous devriez obtenir la version SHA1 du magasin de clés et remplacer l’ancien SHA par celui-ci.

1. Ouvrez le terminal et changez le répertoire en répertoire bin JDK. Incluez la version de votre JDK installée dans le chemin. Pour moi, il s’agissait de – jdk1.8.0_101 (tapez javac -version pour obtenir la version Java):

Mac

  cd /Library/Java/JavaVirtualMachines/.jdk/Contents/Home/bin 

les fenêtres

  cd C:\Program Files\Java\your_JDK_version\bin 

2. Utilisez keytool pour obtenir la version SHA1:

  keytool -list -v -keystore  -alias  

3. Accédez à la page des informations d’identification de votre projet et remplacez SHA1 par la version SHA1 de votre magasin de clés.

J’ai eu le même problème. Je pense avoir découvert que Google ne vous permettait pas d’avoir une certificateion pour le débogage et la sortie apk de votre application. Vous devez choisir d’obtenir le certificate uniquement pour l’un d’eux. S’il vous plait corrigez moi si je me trompe.

Ce que j’ai fait a été d’entrer les informations d’identification d’empreinte digitale SHA1 pour ma clé de version et pas ma clé de débogage sur ce lien ici

Ensuite, mon apk publié a fonctionné et non ma clé de débogage.

Il n’est pas difficile de trouver le lieu d’activation dans l’énorme console de développement. Peut-être que j’aiderai quelqu’un à l’avenir. Vous devez enregistrer votre application Android ici – “activer la connexion” sur cette page :

Il suffit d’entrer les valeurs habituelles pour les valeurs de développeur de console, ceci est votre signature SHA-1. C’est tout!

@ -vj- @ ==> La clé API est basée sur une forme abrégée du certificate numérique de votre application, appelé empreinte SHA-1. Pour afficher l’empreinte SHA-1 de votre certificate, assurez-vous d’abord que vous utilisez le bon certificate. Vous pouvez avoir deux certificates:

-> Un certificate de débogage: les outils du SDK Android génèrent ce certificate automatiquement lorsque vous créez un débogage. Utilisez ce certificate uniquement avec les applications que vous testez. Ne tentez pas de publier une application signée avec un certificate de débogage. Le certificate de débogage est décrit plus en détail dans la section Signature en mode débogage de la documentation pour les développeurs Android.

-> Un certificate de version: les outils du SDK Android génèrent ce certificate lorsque vous créez une version. Vous pouvez également générer ce certificate à l’aide du programme keytool. Utilisez ce certificate lorsque vous êtes prêt à lancer votre application dans le monde.

==> Affichage de l’empreinte du certificate de débogage

Localisez votre fichier de magasin de clés de débogage. Le nom de fichier est debug.keystore et est créé la première fois que vous générez votre projet. Par défaut, il est stocké dans le même répertoire que vos fichiers AVD (Android Virtual Device):

macOS et Linux: ~/.android/ Windows Vista et Windows 7: C:\Users\your_user_name\.android\ Indiquez l’empreinte SHA-1:

Pour Linux ou macOS, ouvrez une fenêtre de terminal et entrez les informations suivantes:

 keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android 

Pour Windows Vista et Windows 7, exécutez:

 keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android 

==> Affichage de l’empreinte du certificate de validation

Localisez votre fichier de magasin de clés de certificate de version. Il n’y a pas d’emplacement ou de nom par défaut pour le fichier de clés de version. Si vous n’en spécifiez pas lors de la création de votre application, celle-ci laissera votre .apk non signée et vous devrez la signer avant de pouvoir la publier. Pour le certificate de version, vous avez également besoin de l’alias du certificate et des mots de passe du magasin de clés et du certificate. Vous pouvez répertorier les alias de toutes les clés d’un magasin de clés en entrant:

 keytool -list -keystore your_keystore_name 

Remplacez your_keystore_name par le chemin qualifié complet et le nom du magasin de clés, y compris l’extension .keystore. Vous serez invité à entrer le mot de passe du fichier de clés. Ensuite, keytool affiche tous les alias du magasin de clés. Entrez les informations suivantes sur un terminal ou une invite de commande:

 keytool -list -v -keystore your_keystore_name -alias your_alias_name 

Remplacez your_keystore_name par le chemin qualifié complet et le nom du magasin de clés, y compris l’extension .keystore. Remplacez your_alias_name par l’alias que vous avez atsortingbué au certificate lors de sa création.

FWIW:

Pour moi, la configuration de publication et de débogage (ID de client Oath, SHA-1, etc.) a été configurée dans la console de développement Google et le fichier google-services.json est installé sur le projet.

Comme je travaille avec plusieurs types de construction, j’ai placé les différents fichiers de configuration dans leurs ./app// respectifs ./app// .

Ma faute était de ne pas générer l’APK signé avec le fichier de clés, l’alias et le mot de passe corrects dans l’assistant de génération d’APK signé. L’assistant mettait en cache les clés et les informations d’identification d’une version précédente (tsk). Mais après avoir réinitialisé les clés pour les mapper sur la version cible, un compte Google Connexion est opérationnel.