web-dev-qa-db-fra.com

Connexion Google signée apk ne fonctionne pas

Eh bien tout fonctionne jusqu'à ce que je génère l'apk signé. J'ai suivi tout le 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 package.
2. Inclut toutes les dépendances au niveau de la classe et de l'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 {
compileSdkVersion 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 {
compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'com.Android.support:appcompat-v7:23.1.1'
compile 'com.google.Android.gms:play-services:8.3.0'


}
  1. Mon identifiant Java Code

    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 String 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

          <com.google.Android.gms.common.SignInButton
              Android:id="@+id/sign_in_button"
              Android:layout_width="wrap_content"
              Android:layout_height="wrap_content"
              Android:text="Check this out"
      
              />
      
10
Sarthak Mishra

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: obtenez la version SHA1 du magasin de clés et remplacez 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 c'était - jdk1.8.0_101 (tapez javac -version pour obtenir la version Java):

Mac

    cd /Library/Java/JavaVirtualMachines/<your_JDK_version>.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 <keystore_name> -alias <alias_name>

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

15
Nika Kurdadze

J'ai eu le même problème. Je pense avoir découvert que Google ne vous permettait pas d'avoir une certification pour le débogage et la sortie apk de votre application. Vous devez choisir d’obtenir le certificat 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é release et non ma clé de débogage sur ce lien ici

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

3
Paula Kristin

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

-> Un certificat de débogage: les outils du SDK Android génèrent ce certificat automatiquement lorsque vous créez un débogage. Utilisez ce certificat uniquement avec les applications que vous testez. Ne tentez pas de publier une application signée avec un certificat de débogage. Le certificat 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 certificat de version: les outils du SDK Android génèrent ce certificat lorsque vous créez une version. Vous pouvez également générer ce certificat à l'aide du programme keytool. Utilisez ce certificat lorsque vous êtes prêt à lancer votre application dans le monde.

==> Affichage de l'empreinte du certificat de débogage

Localisez votre fichier de magasin de clés de débogage. Le nom du fichier est debug.keystore et est créé lors de la première création de 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\ Répertoriez 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 certificat de validation

Localisez votre fichier de clés du certificat 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 certificat de version, vous avez également besoin de l'alias du certificat et des mots de passe du magasin de clés et du certificat. 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 attribué au certificat lors de sa création.

1
vijay bharati

Vous devez mettre deux clés SHA-1 dans la console Firebase Projet-> Paramètres-> Android

1 clé: la clé de votre magasin de clés i.e keytool -list -v -keystore -alias 

2 clés: la clé de votre Play Store i.e Gestion des versions-> Signature de l'application-> Certificat de signature de l'application-> Empreinte digitale de la clé SHA 1

0
Rajesh Nasit

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" dans cette page

Il suffit de saisir les valeurs habituelles pour les développeurs de console, ceci est votre signature SHA-1 .

0
Vyacheslav

FWIW:

Pour moi, la configuration de publication et de débogage (ID 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 répertoires respectifs ./app/<flavorN>/

Ma faute ne permettait pas de générer l'APK signé avec le fichier de magasin de clés correct, l'alias et le mot de passe 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 est activé. 

0
kip2