2016-08-01 3 views
1

Я использовал Stackoverflow и попробовал предложенные ответы, но ни один из них не работает. Я пытаюсь запустить пользователя с firebease и google, мой код работает нормально. Но в этом методе, я всегда получаю аутентификацию тоста сообщений не удалась:Не удалось выполнить аутентификацию входа в систему Google

private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { 
    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); 

    auth.signInWithCredential(credential) 
      .addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        // If sign in fails, display a message to the user. If sign in succeeds 
        // the auth state listener will be notified and logic to handle the 
        // signed in user can be handled in the listener. 
        if (!task.isSuccessful()) { 
         Toast.makeText(LoginActivity.this, "Authentication failed.", 
           Toast.LENGTH_SHORT).show(); 
        } 
        // ... 
       } 
      }); 
} 

Я считаю, что его что-то делать с моим Google-services.json и моими учетными данными Google API. Мне было интересно, может ли кто-нибудь дать мне несколько четких шагов по устранению этой проблемы. Это то, что я сделал, чтобы попытаться заставить процесс signin работать.

  1. Связал мое приложение с firebase и добавил JSON правильно в проект.
  2. Добавлено все зависимости сборки Gradle
  3. Разрешено Google вход с вкладки firebase Идента
  4. Пошел Google сайта мандатной API (here) и скопировать и хранить его в strings.xml внутри моего проекта
  5. Ходили вернуться на страницу мандатной и создал еще один маркер Auth для Android и напечатал это в терминале, чтобы получить ключ SHA1:

хранилищу ключей -list -vrt -alias androiddebugkey -keystore ~ ​​/ .android/отладки.

с паролем как андроид

Затем я вошел в этот ключ при создании андроида идентификации маркера.

У меня также есть весь этот код в моем классе зарегистрировались внутри OnCreate

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

    // Build a GoogleApiClient with access to the Google Sign-In API and the 
    // options specified by gso. 
    mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 

и все это тоже, вместе со слушателем и OnStart и остановить методы

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); 
     if (result.isSuccess()) { 
      Toast.makeText(LoginActivity.this, "Passed google login", Toast.LENGTH_SHORT).show(); 
      // Google Sign In was successful, authenticate with Firebase 
      GoogleSignInAccount account = result.getSignInAccount(); 

      firebaseAuthWithGoogle(account); 
     } 
    } 
} 

/*****************************************************************************************************/ 
/*get an ID token from the GoogleSignInAccount object, exchange it for a Firebase credential, 
*and authenticate with Firebase using the Firebase credential 
*/ 
private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { 
    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); 

    auth.signInWithCredential(credential) 
      .addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        // If sign in fails, display a message to the user. If sign in succeeds 
        // the auth state listener will be notified and logic to handle the 
        // signed in user can be handled in the listener. 
        if (!task.isSuccessful()) { 
         Toast.makeText(LoginActivity.this, "Authentication failed.", 
           Toast.LENGTH_SHORT).show(); 
        } 
        // ... 
       } 
      }); 
} 

Я был застрял на этом в течение очень долгого времени, и любая помощь очень ценится. Я не понимаю, что такое моя проблема, я только догадываюсь. Если вам нужна дополнительная информация, пожалуйста, дайте мне знать, и я буду обновлять этот пост.

спасибо

+0

Пожалуйста, ограничьте свой пост только в соответствующих частях. –

ответ

2

Это больше набор рекомендаций, чем ответ.

Обновите завершение слушателя войти исключение для отказа:

    if (!task.isSuccessful()) { 
         Log.w(TAG, "signInWithCredential", task.getException()); 
         Toast.makeText(GoogleSignInActivity.this, "Authentication failed.", 
           Toast.LENGTH_SHORT).show(); 
        } 

При запуске, смотрите на logcat выходе, чтобы увидеть исключение и другие журналы сообщение, связанное с обработкой AUTH.

Я интересно об этом шаге вы публикуемые и порядке шагов, связанных с SHA1 отпечатком вашего проекта:

Шаг 4. Пошел Google сайта мандатной API ...

У меня есть работа, работающая в нескольких проектах, включая Auth QuickStart, и не помню, что вам нужно использовать веб-сайт учетных данных API. Ключ SHA1 следует ввести на странице настроек вашего проекта на Firebase console. Вы должны сделать это до, вы загрузите файл google-service.json так, чтобы он был включен в файл. Вы можете увидеть, если файл, который вы используете, имеет правильный отпечаток пальца, посмотрев на значение certificate_hash этого раздела:

"oauth_client": [ 
    { 
     "client_id": "<long ID string here>", 
     "client_type": 1, 
     "android_info": { 
     "package_name": "com.google.firebase.quickstart.auth", 
     "certificate_hash": "<your SHA1 fingerprint here>" 
     } 
    }, 
+0

Ваше решение работало над добавлением хэша сертификата с помощью firebase вместо того, чтобы вручную делать это на странице api credentials api. Огромное спасибо. Много значит! Я застрял на этом очень долго – UCLCoder

Смежные вопросы