2016-03-21 4 views
1

Я хочу использовать Google Login для своего приложения, но всегда получаю сообщение Status{statusCode=unknown status code: 12500, resolution=null, и логин не удался. Кто-нибудь знает, в чем проблема?Ошибка GoogleSignInResult isSuccess

Вот моя активность:

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

Проверьте, какое значение вы используете для R.string.server_client_id ... он должен быть идентификатором клиента сервера OAuth * web *, зарегистрированным для вашего проекта в Консоли Google Developers Console, например. см. http://stackoverflow.com/a/34591949/5001016 –

+0

Значение идентификатора клиента веб-сервера OAuth. Это не решение :( –

+0

Проверьте, что вы зарегистрировали все имена пакетов/SHA-1 хэшей, которые вы используете? Http://android-developers.blogspot.com/2016/03/registering-oauth-clients-for-google .html –

ответ

2

Я использую Google плюс логин успешно, но сталкиваются же проблема после замены ноутбука я использовал для разработки приложения ранее.
Причина была изменена в SHA-1, зарегистрированном на консоли разработчика Google.

Поэтому я бы рекомендовал повторить итерацию integration guide и исправить файл google-services.json (файл конфигурации), расположенный в папке вашего приложения. Потому что проблема может быть связана с вашими ключами API, включенными API или SHA-1.

+0

Да, после изменения компьютер, вы должны воссоздать SHA-1: https://developers.google.com/android/guides/client-auth –

2

Вызов функции connect() после кода «sing-in» работал для меня.

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

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

Проблема связана с сертификатом подписи и отпечатком сертификата SHA-1. Добавьте в свои учетные данные googleApi следующие сертификаты SHA-1. Есть 2 случая

1.Если вы работаете в режиме отладки добавить отпечаток SHA-1, порожденную следующим

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

2.Если вы настроили Signing Config затем использовать SHA-1 отпечатка пальца, порожденную следующие

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

Я рекомендую вам добавить как отпечатки SHA-1 в учетных данных GoogleAPI