2016-12-03 3 views
3

Ich kann meine App mit Google-Konto zunächst mehrmals anmelden. Alles ist in Ordnung.Google Anmeldung fehlgeschlagen nach häufigen An- und Abmeldung

Aber wenn ich mich in ein oder zwei Minuten etwa 20 mal an- und abmelde. Google Anmeldung fehlgeschlagen und in onActivityResult Funktion, es gibt den Fehlercode 12501, resultCode = 0;

ich das Telefon bin mit: Nexus 6, Android 5.1.1

Hier ist mein Code:

private GoogleSignInOptions mGso; 
private GoogleApiClient mGac; 

public void init(@NonNull final BaseActivity activity) { 
    mGso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestIdToken(activity.getString(R.string.default_web_client_id)) 
      .requestEmail() 
      .build(); 

    mGac = new GoogleApiClient.Builder(activity) 
      .enableAutoManage(activity /* FragmentActivity */, new GoogleApiClient.OnConnectionFailedListener() { 
       @Override 
       public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
        ToastUtils.show(activity, R.string.login_failed); 
       } 
      }) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, mGso) 
      .build(); 
} 

public void signIn(@NonNull final BaseActivity activity, 
        @NonNull GoogleSignInCallback callback, 
        @NonNull final OnLoadingListener<PlatformUserEntity> listener) { 

    callback.registerCallback(listener); 
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGac); 
    activity.startActivityForResult(signInIntent, REQUEST_GOOGLE_SIGNIN); 

    // disconnect the client 
    mGac.stopAutoManage(activity); 
    mGac.disconnect(); 

} 

Hier ist gradle:

compile 'com.google.android.gms:play-services-base:9.6.1' 
compile 'com.google.android.gms:play-services-gcm:9.6.1' 
compile 'com.google.android.gms:play-services-auth:9.6.1' 

Fisrt, ich init die GoogleApiClient mit einer FragmentActivity, dann startet signIn die Funktion Acitvity. GoogleSignInCallback ist in der onActivityResult-Funktion registriert. Trennen Sie dann den Client, da bei jedem Klicken auf die Schaltfläche Anmelden die Init-Funktion aufgerufen wird.

Ich bezweifle, dass ich stopAutoManage() zu früh verwende, aber es scheint nicht wahr. Also ich bin verwirrt, welcher Teil könnte falsch sein?

bemerkte ich das Protokoll:

Could not set socket write timeout: null 
12-03 17:21:43.859 264-264/? W/SurfaceFlinger: couldn't log to binary event log: overflow. 
12-03 17:21:43.902 1946-12870/? W/Conscrypt: Could not set socket write timeout: null 
12-03 17:21:44.327 21168-21168/? W/AccountChipsFragment: Recording consent failed. 
12-03 17:21:44.657 29359-29782/? E/TokenRequestor: You have wrong OAuth2 related configurations, please check. Detailed error: UNREGISTERED_ON_API_CONSOLE 
12-03 17:21:44.664 812-1072/? W/ActivityManager: getRunningAppProcesses: caller 10145 does not hold REAL_GET_TASKS; limiting output 
12-03 17:21:44.697 21168-21168/? W/AutoManageHelper: Unresolved error while connecting client. Stopping auto-manage. 

Es sagte: „Sie haben falsch OAuth2 bezogene Konfiguration“, aber ich konnte die Web-Client-ID verwenden, um die IdToken beim ersten Mal zu beantragen.

Es macht mich nur verwirrt.

Ich fand auch eine seltsame Sache. Wenn ich die lokal erstellte APK installiere, ist dieser Fehler nie passiert. Wenn ich vom Google Play Store herunterlade, ist dieser Fehler aufgetreten. Aber es gibt keinen Unterschied zwischen diesen beiden APKs, da ich den Google-Store mit dem lokalen vertreibe.

+0

Paste your logcat –

+0

@RavishSharma Ich poste meine Logcat aber kann nicht herausfinden, warum es passiert – chevy1006

+0

http://www.androidwarriors.com/2016/02/google-plus-integration-in-android-sign.html Bitte überprüfen Sie diesen Link ... es kann Ihnen helfen –

Antwort

9

Endlich habe ich den Grund gefunden. Mein Apk wurde erneut von unserer Firma Freigabeverfahren unterzeichnet. Die Prozedur verwendete einen anderen Keystore, so dass mein Schlüssel sha1 geändert wurde. Ich konfiguriere den neuen sha1 Schlüssel in Google Developerkonsole, dieser Fehler ist behoben.

Aber ich bin immer noch verwirrt, wenn ich den Debug Keystore Apk, habe mich erfolgreich anmelden und deinstallieren, dann installiere ich die Google Play apk, die andere sha1 Schlüssel hat, google Anmelden kann einige Male.It wird mir nicht sofort falsch sagen.

+0

Dies könnte eine Anfängerfrage sein, aber könnten Sie beschreiben, wo Sie den sha1-Schlüssel in der Google-Entwicklerkonsole konfigurieren können? –

+0

@XavierPortebois Ja, ich habe keine Ahnung von dem Freigabeverfahren unserer Firma. Ich verwende Firebase-Cloud-Messaging, der Schlüssel sha1 wird in der Konsole von [firebase] (console.firebase.google.com) festgelegt. Oder Sie können es unter [hier] (https://developers.google.com/mobile/add?platform=android) konfigurieren, wenn Sie keinen Firebase benötigen. – chevy1006

+0

Ich fand das nach einem kleinen Kampf. Ich habe nie im Dokument "signiere deine App" gelesen, dass du das signierte APK über die Dev-Konsole registrieren musst, aber wie auch immer, jetzt ist es erledigt. Für Menschen mit dem gleichen Problem, wenn Sie immer noch stecken, könnten Sie meine eigenen Schritt-für-Schritt überprüfen, vielleicht könnte es helfen: http://StackOverflow.com/A/41012703/923712 –

0

, wenn Ihr Code auch zum ersten Mal arbeiten dann Sie auf diese Weise versuchen,

private GoogleSignInOptions mGso; 
private GoogleApiClient mGac; 

public void signIn(@NonNull final BaseActivity activity, 
      @NonNull GoogleSignInCallback callback, 
      @NonNull final OnLoadingListener<PlatformUserEntity> listener) { 

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

    mGac = new GoogleApiClient.Builder(activity) 
      .enableAutoManage(activity /* FragmentActivity */, new GoogleApiClient.OnConnectionFailedListener() { 
       @Override 
       public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
        ToastUtils.show(activity, R.string.login_failed); 
       } 
      }) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, mGso) 
      .build(); 

    callback.registerCallback(listener); 
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGac); 
    activity.startActivityForResult(signInIntent, REQUEST_GOOGLE_SIGNIN); 

    // disconnect the client 
    mGac.stopAutoManage(activity); 
    mGac.disconnect(); 

} 

oder als Protokoll erwähnt:

You have wrong OAuth2 related configurations, please check. Detailed error: UNREGISTERED_ON_API_CONSOLE 

So, Problem can be: 
    1. Sh1 key add in your api 
    2. Api key type like for android or web 
    3. Check Internet Connection 

Sorry, für mein Englisch. Ich hoffe, dass dir das weiterhilft. Dank

+1

Ich fand auch eine seltsame Sache. Wenn ich die APK installiere, die lokal gebaut wird, ist dieser Fehler nie geschehen. Wenn ich vom Google Play Store herunterlade, ist dieser Fehler aufgetreten. Aber es gibt keinen Unterschied zwischen diesen zwei APKs, weil ich Google-Geschäft mit dem lokalen liefere. – chevy1006

+0

Sie hatten Recht, mein SHA1-Schlüssel ist aus irgendeinem Grund falsch gelaufen [hier ist der Grund] (http://stackoverflow.com/a/40988326/7244483) – chevy1006

0

die Lösung in diesem SO question, versuchen Sie durch Ihren Code zu ändern und mit diesem Code

mGso = newGoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
.requestIdToken(AuthenticatedActivity.this.getResources() 
.getString(R.string.server_client_id)) 
.requestEmail() 
.build(); 

Für weitere Informationen, lesen Sie in diesem einen anderen SO question wenn es Ihnen helfen können.

+0

Ich lese die so Frage und nicht den gleichen Grund genau. Danke trotzdem. – chevy1006

Verwandte Themen