13

Есть еще несколько вопросов об этом неопределенном коде ошибки, но никто не решил эту проблему для меня, поэтому я попробую еще раз. Во-первых, вот код шаблонный для входа в систему.Ошибка Android Auth: «GetToken не удалось с кодом состояния: INVALID_AUDIENCE»

 GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
     .requestEmail() 
     .requestServerAuthCode("web app client ID copied from Dev API Console", false) 
     .build(); 


    mGoogleApiClient = new GoogleApiClient.Builder(this).enableAutoManage(this, this).addApi(Auth 
     .GOOGLE_SIGN_IN_API, gso).build(); 

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

С помощью этого кода я получаю диалоговое окно и выбрать соответствующую учетную запись пользователя. Ура! Тем не менее, я получаю отмененный код в onActivityResult, поэтому я проверяю logcat и замечаю сообщение об ошибке в заголовке. Затем я ищу других людей с этой проблемой, но не смог понять, в чем дело, в моем случае.

Так что давайте проверим общие проблемы с другими сообщениями.

  • Firebase консоль показывает мое приложение регистрируется с правильным SHA-1 и SHA-256 отпечатков
  • Оба выпуска и отладки строит использовать те же хранилище ключей
  • В менеджере API Google, мой «OAuth согласия экран»настроен
  • Я также проверил домен уполномоченных переадресовать идентификаторы URI
  • Я заново скачал файл Firebase GoogleServices.json, просто чтобы быть уверенным
  • Там нет вопросов имени пакета. На самом деле Firebase Analytics работает отлично в этом приложении в дикой природе
  • В консоли разработчика Play Store мой клиент OAuth отображается в «Настройки-> Доступ к API»
  • Мой проект Firebase связан в Play магазин DEV консоли настройки «Связанные аккаунты» раздел
  • Я ждал 10 часов, только чтобы увидеть, если бэкенд Google, потребуется время, чтобы установить это

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

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

+0

Какую версию firebase вы используете в своем приложении? –

+0

@ RosárioPereiraFernandes, я использую firebase/play-services версии 10.2. – Justin

ответ

1

Идентификатор вашего веб-клиента должен быть сгенерирован в той же учетной записи пользователя, что и Firebase, а не в учетной записи Play Маркета. В моем случае две учетные записи являются отдельными, и Google выбрасывает эту ошибку, а не правильно связывает эту информацию. Моя учетная запись Firebase связана с моей учетной записью в Play Маркете, но это, по-видимому, не означает, что идентификатор веб-клиента будет общим. Я пробовал некоторые другие решения, такие как связывание учетных записей API-менеджера, и это тоже не сработало. Вы должны создать идентификатор веб-клиента внутри того же проекта, который использует Firebase в учетной записи API-менеджера, которая совпадает с вашей учетной записью Firebase.

+0

Как создать идентификатор клиента сайта в firebase? –

0

Проблема с вашим client_id для Google AUTH process.Delete файл из текущего project.Then добавить новый экземпляр. На этот раз уделив особое внимание идентификатору. используйте Android-студию для создания настроек для firebase. У вас должен быть проект с несколькими идентификаторами клиентов Один для вашего приложения для Android, с SHA. Самая безопасная ставка - удалить текущий проект в консоли Google. Затем заново создайте его. Затем в студии android студия go tools => firebase, затем выберите параметры, которые вы хотите интегрировать. Я не рекомендую добавлять вручную.

+0

как вы инициализируете свой экземпляр auth именно? – Remario

+0

Спасибо за подсказку по использованию Tools => Firebase. К сожалению, это только перезагрузило тот же JSON-файл, что не изменилось. Как было сказано, это живой проект Firebase. Я, безусловно, не буду удалять этот проект и повторно добавлять его. Тогда у миллионов клиентов будет сломанное приложение. – Justin

0

Реализация вашей деятельности

GoogleApiClient.OnConnectionFailedListener 

установки эти частные переменные

private GoogleApiClient mGoogleApiClient; 
private FirebaseAuth mFirebaseAuth; 
private FirebaseAuth mFirebaseAuth; 
private static final int RC_SIGN_IN = 9001; 

Настройка Google Вход

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) 
      .requestIdToken(SignInActivity.this.getResources().getString(R.string.default_web_client_id)) 
      .requestEmail() 
      .build(); 

mGoogleApiClient = new GoogleApiClient.Builder(this) 
      .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */) 
      .addApi(Auth.GOOGLE_SIGN_IN_API, gso) 
      .build(); 

Initialize FirebaseAuth

mFirebaseAuth = FirebaseAuth.getInstance(); 
    mFirebaseUser = mFirebaseAuth.getCurrentUser(); 
    if (mFirebaseUser == null) { 
     // Not signed in, launch the Sign In activity 
    } else { 
     // Already signed in, launch the Home activity 
     //You can use mFirebaseUser.getDisplayName()/getUid()/getEmail() /getPhotoUrl() 

    } 

Вход Method

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

onActivityResult()

@Override 
public void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    Log.e("Data",data.getExtras().toString()); 
    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); 
    if (requestCode == RC_SIGN_IN) { 
     GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); 
     Log.e("Result","status "+result.getStatus()+"Success"+result.isSuccess()+" "+result.getSignInAccount()); 
     if (result.isSuccess()) { 
      // Google Sign In was successful, authenticate with Firebase 
      GoogleSignInAccount account = result.getSignInAccount(); 
      firebaseAuthWithGoogle(account); 
     } else { 
      // Google Sign In failed 
      Log.e(TAG, "Google Sign In failed."); 
     } 
    } 
} 

firebaseAuthWithGoogle

private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { 
    Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId()); 
    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); 
    mFirebaseAuth.signInWithCredential(credential) 
      .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { 
       @Override 
       public void onComplete(@NonNull Task<AuthResult> task) { 
        Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful()); 

        // 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()) { 
         Log.w(TAG, "signInWithCredential", task.getException()); 
         Toast.makeText(SignInActivity.this, "Authentication failed.", 
           Toast.LENGTH_SHORT).show(); 
        } else { 
         Toast.makeText(SignInActivity.this, "Authentication Successful.", 
           Toast.LENGTH_SHORT).show(); 
        } 
       } 
      }); 
} 

onConnectionFailed()

@Override 
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { 
    // An unresolvable error has occurred and Google APIs (including Sign-In) will not 
    // be available. 
    Log.d(TAG, "onConnectionFailed:" + connectionResult); 
    Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_SHORT).show(); 
} 

Вход Выход Метод

private void signOut() { 
     Auth.GoogleSignInApi.signOut(mGoogleApiClient). 
       setResultCallback(new ResultCallback<Status>() { 
        @Override 
        public void onResult(@NonNull Status status) { 
        } 
       }); 
     mFirebaseAuth.signOut(); 
} 

Хранить журналы в everypoint. , если вы следовали всем пунктам, соответствующим сочетанию со списком, который вы сделали, он должен работать.

+0

Спасибо Ashutosh. Тем не менее, я уже делаю все это. Как было сказано, я получаю сообщение об ошибке onActivityResult. Если вам интересно, вот что напечатал ваш журнал. Результат: status Status {statusCode = неизвестный код состояния: 12501, resolution = null} Successfalse null – Justin

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