Google SignIn SDK не работает из-за ошибки. Произошла неисправимая ошибка входа - ошибка перехвата: React Native

Я пытался интегрировать социальный вход в мой собственный проект реакции, в котором я смог успешно выполнить вход в facebook, но не смог войти в Google. Библиотека реагировать-родной-google-signin используется для Google.

Код, который я использовал.

componentDidMount() {
GoogleSignin.hasPlayServices({ autoResolve: true }).then(() => {
// play services are available. can now configure library
}).catch((err) => {

console.info("Play services error", err.code, err.message);
})
GoogleSignin.configure({
scopes: ["https://www.googleapis.com/auth/drive.readonly"], // what API you want to access on behalf of the user, default is email and profile
// iosClientId: <FROM DEVELOPER CONSOLE>, // only for iOS
webClientId: "xxx", // client ID of type WEB for your server (needed to verify user ID and offline access)
// offlineAccess: true // if you want to access Google API on behalf of the user FROM YOUR SERVER
//hostedDomain: '' // specifies a hosted domain restriction
//forceConsentPrompt: true // [Android] if you want to show the authorization prompt at each login
//accountName: '' // [Android] specifies an account name on the device that should be used
})
.then(() => {
// you can now call currentUserAsync()
});
    _signIn = async () => {

        try {

            await GoogleSignin.hasPlayServices(

              )

          const userInfo = await GoogleSignin.signIn();
          console.info('User Info --> ', userInfo);
          this.setState({ userInfo });
        } catch (error) {

          console.info('Message', error.message);
          if (error.code ===  statusCodes.SIGN_IN_CANCELLED) {
            console.info('User Cancelled the Login Flow');
          } else if (error.code === statusCodes.IN_PROGRESS) {
            console.info('Signing In');
          } else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
            console.info('Play Services Not Available or Outdated');
          } else {
            console.info('Some Other Error Happened');
          }
        }
      };

Ответ об ошибке:

Message: A non-recoverable sign in failure occurred -catch error
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
11
0
11 308
12
Перейти к ответу Данный вопрос помечен как решенный

Ответы 12

Ответ принят как подходящий

Это связано с clientId. В консоли разработчика Google, когда вы настраиваете проект для webClientID, вместо создания нового проекта выберите существующий, т.е. сначала создайте проект, а затем выберите его для создания учетных данных.

Сначала создайте новый проект, как показано на рисунке ниже. create a project this way

затем выберите этот проект из списка, чтобы создать учетные данные

У меня это сработало.

И заходим в конфигурацию входа

GoogleSignin.hasPlayServices({ autoResolve: true }).then(() => {

})
.catch((err) => {
      console.info("Play services error", err.code, err.message);
})

GoogleSignin.configure({
     scopes: ["https://www.googleapis.com/auth/userinfo.profile"],//scopes as you need 
     webClientId: "***(Your clientId)",
     //iosClientId: <FROM DEVELOPER CONSOLE>, // only for iOS 
     //offlineAccess: true, //(give it true if you need serverAuthCode i.e cross client authorisation)
     //hostedDomain: '' 
     //forceConsentPrompt: true // [Android] if you want to show the authorization prompt at each login
     //accountName: ''
})

Очень признателен за вашу попытку помочь. Проблема была с почтовым идентификатором, я использовал почтовый идентификатор компании, он был исправлен, когда я попытался с моей личной учетной записью

UJ India 15.02.2019 11:17

Я поискал и наткнулся на следующие шаги

  1. Enable OAuth on https://console.developers.google.com
  2. Copy and paste your SH1 while enabling
  3. Enable Google sign in on firebase authentication
  4. Use Oauth Client_Id instead of your WebClient ID

Это исправление также может помочь:

  1. Перейдите на console.developer.google.com
  2. Выберите проект.
  3. Перейти к учетным данным.
  4. Переключитесь на экран O Auth Consent.
  5. Измените название приложения и введите адрес электронной почты (необязательно)
  6. Сохранить внизу

Попробуйте войти сейчас, и он должен работать.

Я знаю, я очень поздно отвечу на этот вопрос. Я столкнулся с той же проблемой и потратил почти 4-5 часов на ее решение. Решение, которое я нашел: «Он начинает работать, когда я добавляю электронную почту поддержки в Firebase» Думаю, дело не в приложении или конфигурации. Это может быть проблема с firebase, о которой следует сообщить и нигде в документе.

Screenshot for Firebase settings

Работал у меня. Но после добавления письма мне пришлось подождать ~ 5 минут.

mleister 07.05.2020 21:25

Работал у меня. Спасибо!

Zarul Izham 25.07.2021 19:39

У меня тоже сработало! Ты один из тех, кто спасает жизнь, спасибо братан :)

Berke 19.08.2021 12:52

В моем случае я использовал имя пакета для своего тестового приложения (например, com.loginTest). После того, как имя моего пакета было уникальным, я смог решить эту проблему!

Вам нужно добавить support email. Для этого перейдите по ссылке: -

  1. Перейдите на console.developer.google.com
  2. Выберите проект.
  3. Перейти в настройки проекта
  4. На вкладке «Общие» прокрутите вниз, чтобы добавить электронную почту поддержки. Добавьте сюда свой адрес электронной почты.

запустите gradlew signingReport в папке android и проверьте все перечисленные sha1, и если вы используете firebase, убедитесь, что все отдельные sha1, найденные в списке, добавлены в проект firebase, затем загрузите google-services.json снова замените его старым один в вашем проекте, запустите cd android && gradlew clean и снова соберите свой проект

Добавьте электронную почту поддержки в firebase, и она начнет работать

После здесь

  • cd ./android && ./gradlew signatureReport
  • Возьмите SHA1 Task: app: signatureReport, Variant: debugAndroidTest, Config: debug.
  • Обновите его в консоли Firebase в настройках проекта, приложение Android, добавьте SHA1
  • Загрузите google-services.json, поместите его в ./android/app
  • Перейдите в раздел «Аутентификация», затем «Метод входа», затем нажмите «Google».
  • Возьмите идентификатор веб-клиента и используйте его для своего GoogleSignin.configure ({webClientId: ...});
  • Этот идентификатор веб-клиента должен быть таким же, как указано в https://console.developers.google.com/apis/credentials?project= <your_project_id> -> Credentials -> OAuth 2 Client ID -> Web Client.

спасибо, это полностью объяснил все шаги.

Arshan Khanifar 23.10.2021 04:09

попробуйте эти, не используйте webClientId и offlineAccess: true

GoogleSignin.configure({
     ClientId:
        '48774575517-o9j0crni6shsal3jnoerm1o19pdqkg05.apps.googleusercontent.com',
      
    });

мне это помогло, и я не использую firebase, googlePlayServicesAuthVersion = "15.0.1", classpath 'com.google.gms: google-services: 3.2.1', ничего такого

просто устанавливаю

  1. npm я @ response-native-google-signin / google-signin
  2. cd android и gradlew clean

Теперь запустите приложение, и оно должно работать нормально.

Ссылка на apk https://drive.google.com/file/d/1FNFBX-M7PQC6ShCC3KSuOH2E57YGPj6H/view?usp=sharing

 go to android folder  ./gradlew signingReport Take the SHA1 of Task

 :app:signingReport, Variant: debugAndroidTest, Config: debug Update

add fingure print sha1 in your project inside firebae.console.google.com

и снова загрузите файл google-service.json в свой проект

Не используйте имя своего проекта, например googlelogin, firebase, console и т. д.

Sourabh Gera 06.10.2021 14:13

Android

Обязательно следуйте этим рекомендациям:

Не забудьте сгенерировать SHA-ключи и установить их в консоли Firebase.

с симулятором:

При тестировании на симуляторе Android убедитесь, что GooglePlayServices включен. Чтобы доказать это, добавьте в свой SignInMethod еще несколько строк:

const signInWithGoogle = async() => {
  // Wrap with try catch 
  try {
    await GoogleSignin.hasPlayServices({ showPlayServicesUpdateDialog: true }); // <-- Add this
    const { idToken } = await GoogleSignin.signIn();
    const googleCredential = auth.GoogleAuthProvider.credential(idToken);
    return auth().signInWithCredential(googleCredential);
  } catch (error) {
    // This will show you if GooglePlayServices is missing
    console.info('With high probability, GooglePlayServices are missing on this device');
    return;
  }
}

Другие вопросы по теме