2016-03-21 9 views
1

Ich möchte die Google-Anmeldung für meine App verwenden, aber ich bekomme immer die Nachricht Status{statusCode=unknown status code: 12500, resolution=null und die Anmeldung fehlgeschlagen. Hat jemand eine Idee was das Problem ist?GoogleSignInResult isSuccess fehlgeschlagen

Hier ist meine Aktivität:

public class GruppenActivity extends AppCompatActivity implements 
    GoogleApiClient.OnConnectionFailedListener, 
    View.OnClickListener { 

    private static final String TAG = "SignInActivity"; 
    private static final int RC_SIGN_IN = 9001; 

    private GoogleApiClient mGoogleApiClient; 
    private TextView mStatusTextView; 
    private ProgressDialog mProgressDialog; 

    private LernAppDB db; 
    private SQLiteDatabase sqlDatabase; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_gruppen); 

     // Views 
     mStatusTextView = (TextView) findViewById(R.id.status); 

     // Button listeners 
     findViewById(R.id.sign_in_button).setOnClickListener(this); 
     findViewById(R.id.sign_out_button).setOnClickListener(this); 
     findViewById(R.id.disconnect_button).setOnClickListener(this); 

     db = new LernAppDB(this); 
     sqlDatabase = db.getReadableDatabase(); 


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

     mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this , this) 
      .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()); 

    } 

    @Override 
    public void onStart() { 
     super.onStart(); 

     OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient); 
     if (opr.isDone()) { 
      Log.d(TAG, "Got cached sign-in"); 
      GoogleSignInResult result = opr.get(); 
      handleSignInResult(result); 
     } else { 

      showProgressDialog(); 
      opr.setResultCallback(new ResultCallback<GoogleSignInResult>() { 
       @Override 
       public void onResult(GoogleSignInResult googleSignInResult) { 
        hideProgressDialog(); 
        handleSignInResult(googleSignInResult); 
       } 
      }); 
     } 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 

     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(); 
      String personName = acct.getDisplayName(); 
      String personEmail = acct.getEmail(); 
      ZentraleDB zentraleDB = new ZentraleDB(); 
      ZentraleDB.benutzerAnlegen(sqlDatabase,personEmail,"hans","wilhelm",personName,"tesr"); 
      mStatusTextView.setText(getString(R.string.signed_in_fmt, acct.getDisplayName())); 
      updateUI(true); 
     } else { 
      updateUI(false); 
     } 
    } 

    private void signIn() { 
     Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); 
     startActivityForResult(signInIntent, RC_SIGN_IN); 
    } 

    private void signOut() { 
     Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
      new ResultCallback<Status>() { 
       @Override 
       public void onResult(Status status) { 
        // [START_EXCLUDE] 
        updateUI(false); 
        // [END_EXCLUDE] 
       } 
      }); 
    } 

    private void revokeAccess() { 
     Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback(
      new ResultCallback<Status>() { 
       @Override 
       public void onResult(Status status) { 
        updateUI(false); 
       } 
      }); 
    } 

    @Override 
    public void onConnectionFailed(ConnectionResult connectionResult) { 
     Log.d(TAG, "onConnectionFailed:" + connectionResult); 
    } 

    private void showProgressDialog() { 
     if (mProgressDialog == null) { 
      mProgressDialog = new ProgressDialog(this); 
      mProgressDialog.setMessage(getString(R.string.loading)); 
      mProgressDialog.setIndeterminate(true); 
     } 

     mProgressDialog.show(); 
    } 

    private void hideProgressDialog() { 
     if (mProgressDialog != null && mProgressDialog.isShowing()) { 
      mProgressDialog.hide(); 
     } 
    } 

    private void updateUI(boolean signedIn) { 
     if (signedIn) { 
      findViewById(R.id.sign_in_button).setVisibility(View.GONE); 
      findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE); 
     } else { 
      mStatusTextView.setText(R.string.signed_out); 

      findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE); 
      findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE); 
     } 
    } 

    @Override 
    public void onClick(View v) { 
     switch (v.getId()) { 
      case R.id.sign_in_button: 
       signIn(); 
       break; 
      case R.id.sign_out_button: 
       signOut(); 
       break; 
      case R.id.disconnect_button: 
       revokeAccess(); 
       break; 
     } 
    } 
} 
+0

prüfen hinzuzufügen, welchen Wert Sie für R.string.server_client_id verwenden ... es sollte eine OAuth * web * -Server-Client-ID sein, die für Ihr Projekt in der Google Developers Console registriert wurde, z. Siehe http://stackoverflow.com/a/34591949/5001016 –

+0

Der Wert ist die OAuth-Webserver-Client-ID. Dies ist nicht die Lösung :( –

+0

Überprüfen Sie, ob Sie alle von Ihnen verwendeten Paketnamen/SHA-1-Hashes registriert haben? Http://android-developers.blogspot.com/2016/03/registering-oauth-clients-for-google .html –

Antwort

2

Ich wurde mit Google Plus Login erfolgreich, aber konfrontiert gleiches Problem nach dem Laptop ändert ich früher für die Entwicklung der App verwendet.
Grund war die Änderung von SHA-1 in der Google Developer Console.

Daher würde ich empfehlen, die integration guide zu wiederholen und google-services.json (Konfigurationsdatei) in Ihrem App-Ordner zu reparieren. Weil das Problem mit Ihren API Schlüsseln, aktivierten APIs oder dem SHA-1 sein könnte.

+0

ja, nach dem Ändern Computer müssen Sie SHA-1 neu erstellen: https://developers.google.com/android/guides/client-auth –

2

Der Aufruf der Funktion connect() nach dem "sing-in" Code funktionierte für mich.

 Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(sActivity.mGoogleApiClient); 
    sActivity.startActivityForResult(signInIntent, RC_SIGN_IN); 

    mGoogleApiClient.connect(); //Adding this worked for me! 
0

Das Problem liegt am Signing-Zertifikat und dem SHA-1-Zertifikat-Fingerabdruck. Fügen Sie die folgenden SHA-1-Zertifikate zu Ihren googleApi-Anmeldedaten hinzu. gibt es 2 Fälle

1. Wenn Sie im Debug-Modus ausgeführt werden fügen Sie den SHA-1-Fingerabdruck von der

"C:\Program Files\Java\jre1.8.0_101\bin\keytool" -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android 

folgende erzeugt 2. Wenn Sie Signing Config dann mit SHA-1 Fingerabdruck durch folgende erzeugt so konfiguriert haben,

"C:\Program Files\Java\jre1.8.0_101\bin\keytool" -list -v -keystore "[youKeyPath]\youKey.jks" 

ich empfehle Ihnen, sowohl die SHA-1 Fingerabdrücke in Ihrem googleApi Anmeldeinformationen