"Ошибка разработчика: это приложение неправильно настроено" - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь перейти на firebase auth в моем приложении для Android.Имя пакета и SHA1 в настоящее время связаны со старым проектом ядра приложения (который я не хочу обновлять до firebase), и поэтому я не могу добавить отпечаток SHA1 в свой новый проект firebase.Проект движка приложения в данный момент находится в производстве, поэтому я не могу удалить идентификаторы клиента Android или удалить проект.Документация здесь https://support.google.com/firebase/answer/6401008?authuser=0 говорит, что я должен иметь возможность занести в белый список идентификаторы клиентов старого проекта ядра приложения.Однако, когда я делаю это и затем пытаюсь войти в приложение с помощью Google, используя Firebase Auth, я получаю следующую ошибку "Developer error: this application is misconfigured. Check your SHA1 and package name in the Firebase console."

Я также попробовал здесь инструкции https://firebase.googleblog.com/2016/12/working-with-multiple-firebase-projects-in-an-android-app.html, которые включают в себя передачуGoogleSignInOptions объект в AuthUI Builder с идентификатором веб-клиента из соответствующего проекта, например, так:

private void StartLoginActivity() {

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken("<my-client-id>.apps.googleusercontent.com")
            .requestEmail()
            .build();

    List<AuthUI.IdpConfig> providers = Arrays.asList(
            new AuthUI.IdpConfig.EmailBuilder().build(),
            new AuthUI.IdpConfig.GoogleBuilder().setSignInOptions(gso).build());

    startActivityForResult(
            AuthUI.getInstance()
                    .createSignInIntentBuilder()
                    .setAvailableProviders(providers)
                    .build(),
            RC_SIGN_IN);
}

, но когда я это делаю, я получаю ошибку java.lang.IllegalArgumentException: two different server client ids provided

Так что мойВопрос в том, как настроить мой проект Firebase для включения аутентификации, когда SHA1 связан с существующим проектом GCP?

1 Ответ

0 голосов
/ 12 июня 2018

Я получил следующий ответ от поддержки Firebase и смог заставить его работать:

Вход в Google с FirebaseUI настраивается через файл google-services.json>.Проблема заключается в том, что если вы используете идентификатор клиента OAuth из другого> проекта, default_web_client_id будет настроен неправильно.Он будет> указывать на автоматически сгенерированный идентификатор веб-клиента вашего нового проекта Firebase;мы> не хотим этого.

На шаге 1 из https://developers.google.com/identity/sign-in/android/backend->auth, мы вызываем #requestIdToken (getString (R.string.server_client_id)).В> firebaseUI это также сделано, и этот ресурс 'default_web_client_id' -> создан google-services.json.Это должно быть изменено.

Таким образом, чтобы решить проблему, вам нужно использовать идентификатор клиента веб-OAuth из проекта> # 1, это можно сделать одним из следующих способов:

Изменение файла google-services.json - вы 'необходимо изменить поля client_id> на правильный идентификатор веб-клиента из проекта # 1. Также необходимо внести в белый список (Auth> Поставщики входа в систему> Google) веб-клиент> OAuth из проекта # 1 в проект # 2

Не используйте google-services.json, поэтому вы можете сами установить default_web_client_id.Мы сделали для этого руководство, см. здесь .

Вот процесс, которому я следовал, чтобы получить эту работу:

  1. Перейти к GCPКонсоль> Выбрать старый проект> Apis и сервисы> Учетные данные

  2. Создать учетные данные> Идентификатор клиента OAuth

  3. Выбрать Веб-приложение

    • Введите имя
    • Оставьте пустыми исходные коды Javascript и URL разрешенного перенаправления
  4. Скопируйте идентификатор клиента

  5. Открыть консоль Firebase

  6. Перейти к аутентификации> метод входа> google
  7. Белый список нового идентификатора клиента> добавить> сохранить
  8. Вернитесь в настройки> добавьте firebase в ваше приложение для Android
    • Добавьте имя пакета для Android
    • Оставьте сертификат подписи пустым
  9. Нажмите зарегистрировать приложение
  10. Скачать и открыть google-services.json
  11. В oauth_client будет запись для каждого идентификатора клиента oauth в вашем приложении (к вашему сведению)это можно увидеть на консоли GCP в разделе Apis и services> Credentials).

  12. Удалите весь тег oauth_client и замените его на "oauth_client": [ { "client_id": "<your_new_client_id>", "client_type": 3 } ], Если вам нужен какой-либо другой клиент oauth, убедитесь, что белый список находится сверху, так как это выглядитпо умолчанию.

  13. Сохраните файл и скопируйте в свой модуль приложения для Android.

  14. Убедитесь, что у вас есть следующие зависимости:

    • проект root build.gradle
    • classpath 'com.google.gms: google-services: 4.0.0'
    • модуль приложения build.gradle
    • compile'com.google.firebase: ядро ​​firebase: 16.0.0'
    • compile 'com.firebaseui: firebase-ui-auth: 4.0.0'
  15. Постройте и запустите ваш проект

Если вы получите эту ошибку (без дополнительных подробностей): BasicNetwork.performRequest: Unexpected response code 400 for https://www.googleapis.com/identitytoolkit/v3/relyingparty/verifyAssertion?alt=proto&key=AIzaSyBJL6EO8vMEJpyWUCAKP8ZgH4LYR0Hrwpk

Проверьте, установлены ли зависимости вашего gradle в версии выше(или выше)

Если вы получаете эту ошибку: com.google.firebase.FirebaseException: An internal error has occurred. [ Invalid Idp Response:the Google id_token is not allowed to be used with this application. Its audience (OAuth 2.0 client ID) is <your-client-id>, which is not authorized to be used in the project with project_number: <your-project-number>. ]

Попробуйте удалить и повторно добавить свой идентификатор клиента в белый список на консоли Firebase.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...