Подтвердить что ты не робот

Ошибка 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 Store.
  • Я ждал 10 часов, чтобы проверить, потребует ли времени для создания бэкэнда Google

Для поиска, сразу после сообщения об ошибке logcat в заголовке, я получаю следующую распечатку logcat.

У вас неправильные конфигурации, связанные с OAuth2, пожалуйста, проверьте. детализированный error: INVALID_AUDIENCE

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

Реализовать свою деятельность

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();

Инициализировать 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()

    }

Метод входа

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();
}

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