it-swarm.com.de

Google sign in signierter apk funktioniert nicht

Nun, alles funktioniert, bis ich den signierten apk generiere. Ich habe den gesamten Prozess verfolgt, wie auf der Google-Entwicklerseite beschrieben 

1.Ich habe die Datei google-services.json mit keyhash und Paketnamen generiert
2. Enthalten alle Abhängigkeiten auf Klassenebene und Anwendungsebene wie diese

// 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()
   }
  }

Datei für Bewerbungsabschlüsse

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. Mein Anmelden 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. Mein Layoutcode

          <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

Soweit ich weiß, haben Sie den Debug-SHA1 in der Entwicklerkonsole bereitgestellt, . Dann haben Sie die APK signiert und der SHA1 geändert. Wenn dies der Fall ist, versuchen Sie Folgendes: erhalten Sie die Freigabe SHA1 aus dem Schlüsselspeicher und ersetzen Sie das alte SHA.

1. Terminal öffnen und das Verzeichnis in JDK bin-Verzeichnis ändern. Fügen Sie Ihre installierte JDK-Version in den Pfad ein. Für mich war dies jdk1.8.0_101 (geben Sie javac -version ein, um die Java-Version zu erhalten):

Mac

    cd /Library/Java/JavaVirtualMachines/<your_JDK_version>.jdk/Contents/Home/bin

Windows

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

2. Verwenden Sie keytool, um das Release SHA1 zu erhalten:

    keytool -list -v -keystore <keystore_name> -alias <alias_name>

3. Gehen Sie zu Ihrer Seite für Projektanmeldeinformationen und ersetzen Sie den SHA1 durch den SHA1-Release Ihres Keystores.

15
Nika Kurdadze

Ich hatte das gleiche Problem. Ich denke, ich habe herausgefunden, dass Google es nicht zulässt, dass Sie eine Zertifizierung sowohl für das Debugging als auch für das Release-APK Ihrer App haben. Sie müssen wählen, ob Sie das Zertifikat entweder nur für eines von ihnen erhalten möchten. Bitte korrigieren Sie mich, wenn ich falsch liege. 

Was ich getan habe, war die Eingabe der SHA1-Fingerabdruck-Anmeldeinformationen für meine release - Taste und nicht für meinen Debug-Schlüssel auf diesem Link hier

Danach hat mein freigegebener apk funktioniert und nicht mein Debug-Key. 

3
Paula Kristin

@ -vj- @ ==> Der API-Schlüssel basiert auf einer Kurzform des digitalen Zertifikats Ihrer App, dem SHA-1-Fingerabdruck. Stellen Sie zunächst sicher, dass Sie das richtige Zertifikat verwenden, um den SHA-1-Fingerabdruck für Ihr Zertifikat anzuzeigen. Sie haben möglicherweise zwei Zertifikate:

-> Ein Debug-Zertifikat: Die Android SDK-Tools generieren dieses Zertifikat automatisch, wenn Sie einen Debug-Build durchführen. Verwenden Sie dieses Zertifikat nur mit Apps, die Sie testen. Versuchen Sie nicht, eine mit einem Debug-Zertifikat signierte App zu veröffentlichen. Das Debug-Zertifikat wird in der Android-Entwicklerdokumentation unter Signieren im Debug-Modus genauer beschrieben.

-> Ein Release-Zertifikat: Die Android SDK-Tools generieren dieses Zertifikat, wenn Sie einen Release-Build durchführen. Sie können dieses Zertifikat auch mit dem Programm keytool generieren. Verwenden Sie dieses Zertifikat, wenn Sie bereit sind, Ihre App für die Welt freizugeben.

==> Anzeigen des Fingerabdrucks des Debug-Zertifikats

Suchen Sie Ihre Debug-Keystore-Datei. Der Dateiname lautet debug.keystore und wird beim ersten Erstellen Ihres Projekts erstellt. Standardmäßig wird es in demselben Verzeichnis wie Ihre AVD-Dateien (Android Virtual Device) gespeichert:

macOS und Linux: ~/.Android/ Windows Vista und Windows 7: C:\Users\your_user_name\.Android\ Listet den SHA-1-Fingerabdruck auf:

Öffnen Sie für Linux oder Mac OS ein Terminalfenster und geben Sie Folgendes ein:

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

Führen Sie für Windows Vista und Windows 7 Folgendes aus:

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

==> Fingerabdruck des Freigabezertifikats anzeigen

Suchen Sie die Schlüsselspeicherdatei des Freigabezertifikats. Es gibt keinen Standardspeicherort oder -namen für den Freigabeschlüsselspeicher. Wenn Sie bei der Erstellung Ihrer App keine Version angeben, wird der .apk-Code nicht signiert, und Sie müssen die Signatur unterzeichnen, bevor Sie sie veröffentlichen können. Für das Freigabezertifikat benötigen Sie außerdem den Alias ​​des Zertifikats und die Kennwörter für den Keystore und das Zertifikat. Sie können die Aliase für alle Schlüssel in einem Schlüsselspeicher auflisten, indem Sie Folgendes eingeben:

keytool -list -keystore your_keystore_name

Ersetzen Sie your_keystore_name durch den vollständig qualifizierten Pfad und Namen des Schlüsselspeichers, einschließlich der Erweiterung .keystore. Sie werden aufgefordert, das Kennwort für den Keystore einzugeben. Keytool zeigt dann alle Aliase im Keystore an. Geben Sie an einem Terminal Folgendes ein oder geben Sie eine Eingabeaufforderung ein:

keytool -list -v -keystore your_keystore_name -alias your_alias_name

Ersetzen Sie your_keystore_name durch den vollständig qualifizierten Pfad und Namen des Schlüsselspeichers, einschließlich der Erweiterung .keystore. Ersetzen Sie your_alias_name durch den Alias, den Sie dem Zertifikat bei der Erstellung zugewiesen haben.

1
vijay bharati

Sie müssen zwei SHA-1-Schlüssel in der Firebase-Konsole Projekt-> Einstellungen-> Android eingeben

1 Schlüssel: Der Schlüssel Ihres Schlüsselspeichers, d. H. Keytool -list -v -keystore -alias 

2-Taste: die Taste Ihres Play Store, dh Release-Management-> App-Signatur-> App-Signaturzertifikat-> SHA 1-Schlüssel-Fingerabdruck

0
Rajesh Nasit

Es ist kaum schwierig, in der großen Entwicklerkonsole den Platz zu finden, den Sie aktivieren können. Vielleicht werde ich in Zukunft jemandem weiterhelfen. Sie müssen Ihre Android-Anwendung hier registrieren - "Anmeldung aktivieren" in dieser Seite

Geben Sie einfach die üblichen Werte für Konsolenentwickler ein, dies ist Ihr signierter SHA-1.

0
Vyacheslav

FWIW:

Für mich hatte ich die Release- und Debug-Konfiguration (Oath-Client-IDs, SHA-1 usw.) in der Google dev-Konsole und in der google-services.json-Datei im Projekt installiert. 

Da ich mit mehreren Build-Varianten arbeite, stelle ich die verschiedenen Konfigurationsdateien in ihre jeweiligen ./app/<flavorN>/-Verzeichnisse. 

Mein Fehler konnte das signierte APK mit der richtigen Keystore-Datei, Alias ​​und Kennwort im Assistenten zum Generieren von signierten APK nicht generieren. Der Assistent hat Schlüssel und Anmeldeinformationen eines vorherigen Build-Flows (Tsk) zwischengespeichert. Nach dem Zurücksetzen der Schlüssel für die Zuordnung zum Ziel-Aroma habe ich jetzt ein funktionierendes Google-Zeichen. 

0
kip2