Я пытался интегрировать социальный вход в мой собственный проект реакции, в котором я смог успешно выполнить вход в 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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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

затем выберите этот проект из списка, чтобы создать учетные данные 
У меня это сработало.
И заходим в конфигурацию входа
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: ''
})
Я поискал и наткнулся на следующие шаги
- Enable OAuth on
https://console.developers.google.com- Copy and paste your SH1 while enabling
- Enable Google sign in on firebase authentication
- Use Oauth Client_Id instead of your WebClient ID
Это исправление также может помочь:
Попробуйте войти сейчас, и он должен работать.
Я знаю, я очень поздно отвечу на этот вопрос. Я столкнулся с той же проблемой и потратил почти 4-5 часов на ее решение. Решение, которое я нашел: «Он начинает работать, когда я добавляю электронную почту поддержки в Firebase» Думаю, дело не в приложении или конфигурации. Это может быть проблема с firebase, о которой следует сообщить и нигде в документе.
Работал у меня. Но после добавления письма мне пришлось подождать ~ 5 минут.
Работал у меня. Спасибо!
У меня тоже сработало! Ты один из тех, кто спасает жизнь, спасибо братан :)
В моем случае я использовал имя пакета для своего тестового приложения (например, com.loginTest). После того, как имя моего пакета было уникальным, я смог решить эту проблему!
Вам нужно добавить support email.
Для этого перейдите по ссылке: -
запустите gradlew signingReport в папке android и проверьте все перечисленные sha1, и если вы используете firebase, убедитесь, что все отдельные sha1, найденные в списке, добавлены в проект firebase, затем загрузите google-services.json снова замените его старым один в вашем проекте, запустите cd android && gradlew clean и снова соберите свой проект
Добавьте электронную почту поддержки в firebase, и она начнет работать
После здесь
спасибо, это полностью объяснил все шаги.
попробуйте эти, не используйте 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', ничего такого
просто устанавливаю
Теперь запустите приложение, и оно должно работать нормально.
Ссылка на 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 и т. д.
Обязательно следуйте этим рекомендациям:
Не забудьте сгенерировать 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;
}
}
Очень признателен за вашу попытку помочь. Проблема была с почтовым идентификатором, я использовал почтовый идентификатор компании, он был исправлен, когда я попытался с моей личной учетной записью