Я пытаюсь войти в Google с помощью плагина React-native-google-signin, но он выдает ошибку Developer_Error. Я сделал точно так же, как указано в его документе. Вот мой код и шаги.
1.Установлен плагин react-native-google-signin с помощью npm i react-native-google-signin. 2.Затем связали его с реакцией на нативную ссылку 3. После этого я настроил файл build.gradle, как они упоминают в документах.
ext {
buildToolsVersion = "27.0.3"
minSdkVersion = 16
compileSdkVersion = 27
targetSdkVersion = 26
supportLibVersion = "27.1.1"
googlePlayServicesAuthVersion = "15.0.1"
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.2'
classpath 'com.google.gms:google-services:3.2.1'
}
allprojects {
repositories {
mavenLocal()
google()
maven {url "https://maven.google.com"}
jcenter()
maven {
// All of React Native (JS, Obj-C sources, Android binaries) is installed from npm
url "$rootDir/../node_modules/react-native/android"
}
maven {
url 'https://maven.google.com/'
name 'Google'
}
}
}
4.Обновлен android/app/build.gradle,
dependencies {
implementation 'com.facebook.android:facebook-android-sdk:4.34.0'
implementation project(':react-native-fbsdk')
compile project(':react-native-vector-icons')
compile project(':react-native-fused-location')
compile project(':react-native-fs')
compile project(':react-native-image-resizer')
compile project(':react-native-geocoder')
compile project(':react-native-device-info')
compile project(':react-native-image-picker')
compile fileTree(dir: "libs", include: ["*.jar"])
compile "com.android.support:appcompat-v7:${rootProject.ext.supportLibVersion}"
compile "com.facebook.react:react-native:+" // From node_modules
implementation project(":react-native-google-signin")
compile (project(':react-native-maps')){
exclude group: "com.google.android.gms"
}
implementation 'com.google.android.gms:play-services-auth:15.0.1'
implementation 'com.google.android.gms:play-services-maps:15.0.1'
implementation 'com.google.android.gms:play-services-location:15.0.1'
implementation 'com.google.android.gms:play-services-base:15.0.1'
}
task copyDownloadableDepsToLibs(type: Copy) {
from configurations.compile
into 'libs'
}
apply plugin: 'com.google.gms.google-services'
5. Затем сгенерируйте ключ SHA1 с помощью android studion debug.keystore и сгенерируйте файл google-services.json в firebase.
6. Затем настройте страницу login.js следующим образом.
async componentDidMount() {
this._configureGoogleSignIn();
}
_configureGoogleSignIn() {
GoogleSignin.configure({
webClientId: '775060548127-5nfj43q15l75va9pfav2jettkha7hm2a.apps.googleusercontent.com',// my clientID
offlineAccess: false
});
}
async GoogleSignin() {
try {
await GoogleSignin.hasPlayServices();
const userInfo = await GoogleSignin.signIn();
// this.setState({ userInfo, error: null });
Alert.alert("success:" + JSON.stringify(userInfo));
} catch (error) {
if (error.code === statusCodes.SIGN_IN_CANCELLED) {
// sign in was cancelled
Alert.alert('cancelled');
} else if (error.code === statusCodes.IN_PROGRESS) {
// operation in progress already
Alert.alert('in progress');
} else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
Alert.alert('play services not available or outdated');
} else {
Alert.alert('Something went wrong', error.toString());
this.setState({
error,
});
}
}
}
Это мои данные, поэтому, пожалуйста, помогите мне в этом, я не могу найти подходящее решение в Интернете. И да, мои SHA1 и clientID верны, я уже проверил это.
еще нет сети, у вас есть какое-нибудь решение, поделитесь им со мной
Нет, я получаю ту же ошибку... не понимаю... должна быть базовая интеграция...
Используете ли вы firebase для серверной части?
Для меня он пытался войти через симулятор, но он работал на физическом устройстве.
У меня тоже была эта проблема, и я просмотрел множество ответов, в которых говорилось, что проверьте идентификатор вашего клиента и хэш ключа, оба из которых, как я был уверен, были правильными.
У меня это заработало: я открыл идентификаторы OAuth в консоли управления проектом (не Firebase) в https://console.cloud.google.com/apis/credentials и добавил идентификатор клиента Android Oauth с правильной подписью (по какой-то причине у меня не было ни одного из них раньше). Повторно загрузите JSON-файл GoogleServices.
Мне также нужно было установить для webClientId значение «client_type»: 3 Идентификатор клиента Oauth. Тогда это сработало.
Вы можете объяснить; «Мне также нужно было установить для webClientId значение «client_type»: 3 идентификатора клиента Oauth. Тогда это сработало». ?
Я немного не уверен, что это было некоторое время назад, но в моем файле google-services.json у меня есть oauth_client, где один из объектов содержит «client_type», равный 3. Я предполагаю, что имел в виду использование «client_id» в этом файл, где "client_type" === 3
Хм, хорошо. Спасибо за ответ. У меня он работает в режиме разработки, но все равно ломается из-за ошибки разработчика в производственной сборке React Native :(
@ronnyrr убедитесь, что при создании подписанного apk для производства вы указываете правильное расположение хранилища ключей. Псевдоним и пароль по умолчанию: androiddebugkey /android
Это просто из-за того, что ваш androidClientId не соответствует вашему проекту консоли Google.
создайте новый идентификатор клиента аутентификации из консоли API вашего проекта: https://console.developers.google.com/apis/credentials
обновить конфигурацию до: myfile.js, например:
GoogleSignin.configure({ androidClientId:'YOUR CLIENT ID' )}
Для нативных проектов React:
В контрольном списке есть много пунктов, чтобы избавиться от DEVELOPER_ERROR. Кажется, существует много путаницы в том, где нужно установить ключ SHA-1.
После того, как вы создали android client_id в консоли разработчика Google, у вас есть возможность установить ключ SHA-1 и имя пакета.
Вы можете получить имя пакета из AndroidManifest.xml (projPath/android/app/src/main/AndroidManifest.xml) и установить его в текстовом поле в консоли разработчика Google (очень важно проверять наличие опечаток).
Затем извлеките свой ключ SHA-1 из debug.keystore, используя следующую команду, для которой пароль «android»
Сначала выясните местоположение хранилища ключей:
Ваше приложение может выбирать из
`pathToReactNativeProj/projName/android/app/debug.keystore`
или: ~/.android/debug.keystore
Затем извлеките свой ключ SHA-1 из debug.keystore, используя следующую команду, для которой пароль — android.
keytool -exportcert -alias androiddebugkey -keystore pathToKeyStore -list -v
скопируйте и вставьте сгенерированный ключ SHA-1. Это должно решить проблему.
Код выглядит следующим образом:
try {
GoogleSignin.configure(
{
//webClientId is required if you need offline access
offlineAccess: true,
webClientId:'2423432-43234234232432423234.apps.googleusercontent.com',
androidClientId: '3242343242322432-2342323432232324343323.apps.googleusercontent.com',
scopes: ['profile', 'email']
});
await GoogleSignin.hasPlayServices();
console.info("reached google sign in");
const userInfo = await GoogleSignin.signIn();
console.info(userInfo);
this.setState({ userInfo });
} catch (error) {
if (error.code === statusCodes.SIGN_IN_CANCELLED) {
console.info("error occured SIGN_IN_CANCELLED");
// user cancelled the login flow
} else if (error.code === statusCodes.IN_PROGRESS) {
console.info("error occured IN_PROGRESS");
// operation (f.e. sign in) is in progress already
} else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
console.info("error occured PLAY_SERVICES_NOT_AVAILABLE");
} else {
console.info(error)
console.info("error occured unknow error");
}
}
Путаница вокруг ключа firebase SHA-1:
Установка этого ключа не требуется для получения информации о пользователе из Google. Если вы не используете firebase для хранения данных пользователей, полученных из Google, вам не нужно об этом беспокоиться.
keytool -exportcert -alias androiddebugkey -keystore pathToKeyStore -list -v, эта команда выдает ошибку keytool error: java.lang.Exception: Only one command is allowed: both -exportcert and -list were specified., поэтому я использовал без -exportcert keytool -keystore app/debug.keystore -list -vЯ думаю, что иногда старый отпечаток пальца (от другого разработчика в прошлом) может конфликтовать. Так что SHA1 должен быть правильным. Удалите старый SHA-1 и повторно загрузите google-services.json.
Я пробовал keytool -exportcert -keystore ~/.android/debug.keystore -list -v, который, конечно же, давал мне ключ SHA1, но он не работал, после некоторого поиска я также заглянул в свою папку project/android/app и обнаружил, что там тоже есть ключ debug.keystore (чей пароль по умолчанию — android, в случае некоторые должны знать) поэтому я попробовал cd android и команду keytool -exportcert -keystore app/debug.keystore -list -v, и ключ, который я получил, работал очень хорошо. Надеюсь, это поможет.
Спасибо, это сработало! Мне пришлось добавить конкретный ключ для приложения, а не тот, который находится в ~/.android
Люблю тебя... Спасибо... :)
Я получил: «Разрешена только одна команда: были указаны и -exportcert, и -list».
Я поставил свои 3 дня, но мне это не удалось, но ваш ответ помог мне, спасибо, братан
этот комментарий работает для меня. сначала у меня был собственный файл хранилища ключей, и сгенерированный из него отпечаток SHA1 не работал, затем я изменился, чтобы сгенерировать отпечаток из по умолчанию debug.keystore, теперь он работает.
Большое спасибо, вы только что сэкономили много моего времени!
В моем случае мой ключ SHA-1, который я добавил в проект firebase, недействителен, потому что я получил его от /Users/apple/.android/debug.keystore.
Правильный SHA-1 должен находиться в папке android внутри примера проекта: /Users/apple/Documents/Project/testGoogleFirebaseLogin/android/app/debug.keystore (testGoogleFirebaseLogin — это имя папки моего проекта)
Итак, самый удобный способ — cd android && ./gradlew signingReport. Он сгенерирует много-много строк данных, прокрутите вниз и найдите SHA-1 из того, у которого есть Store: (your project path).
ПРИМЕЧАНИЕ. Не тот, у которого есть Store: /Users/apple/.android/debug.keystore.
(Извините за мое знание английского, я буду признателен, если кто-нибудь исправит мою грамматику и сделает этот ответ более легким для чтения)
Спасибо. Это исправило мою проблему. Мне нужно было загрузить новый ключ с нового устройства.
Для тех, кто все еще ищет решения:
Пожалуйста, сопоставьте свой отпечаток ключа в консоли Firebase.
Не инициализируйте конфигурацию ключами, повторюсь, не предоставляйте никаких объектов конфигурации в функции .configure()
Сделайте это GoogleSignIn.configure().
Пункт 2 решит проблему. :)
Добавьте значение ключа SHA1 в файл google-services.json. Для этого откройте google-services.json файл в любом текстовом редакторе и добавьте
"certificate_hash": "5e8f16062ea3cd2c4a0d547876baa6f38cabf625"
с вашим значением хеша без двоеточия (:) в android_client_info
Демонстрационный файл google-services.json
{
"project_info": {
"project_number": "108005055433",
"firebase_url": "https://se-ai-camera.firebaseio.com",
"project_id": "demo-app",
"storage_bucket": "demo-app.appspot.com"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:108005055433:android:323bf88853cd2899872618",
"android_client_info": {
"package_name": "com.myapp",
"certificate_hash": "5e8f16062ea3cd2c4a0d547876baa6f38cabf625"
}
},
"oauth_client": [
{
"client_id": "108005055433-q748qmcrn9a3j4qmg9srrkbotvr4emh1.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyAuGCMQoW0tM7QMhpAgMIi0sK3vj0Nj8lk"
}
],
"services": {
"appinvite_service": {
"other_platform_oauth_client": [
{
"client_id": "108005055433-q748qmcrn9a3j4qmg9srrkbotvr4emh1.apps.googleusercontent.com",
"client_type": 3
}
]
}
}
}
],
"configuration_version": "1"
}
или добавьте ключ SHA1 в настройки приложения (консоль firebase) и загрузите обновленный файл google-services.json.
Затем измените параметр метода GoogleSignIn.configure() на пустой. Это самый важный шаг.
Прохождение для разных режимов:
cd android && ./gradlew signingReport.google-services.json из настроек Firebase и вставьте файл в android/app.client_type: 3 клиента внутри config.cd android && ./gradlew signingReport.Create Credentials -> OAuthClientID. Выберите тип Android, вставьте хэш и заполните форму.Create Credentials, но на этот раз выберите тип Web application.Release -> Setup -> App Integrity.Create Credentials -> OAuthClientID. Выберите тип Android, вставьте хэш и заполните форму.Create Credentials, но на этот раз выберите тип Web application.Это единственное решение, которое сработало для меня. Обязательно выполните шаг 1 в разделе «Производственная/выпускная версия». Я провел все выходные, пытаясь понять, почему не удается войти в систему только при загрузке приложения из PlayStore.
Это сработало!! Я довольно долго боролся с этой проблемой и, по-видимому, использовал неправильный SHA1. Команда ./gradlew signingReport показывает, что именно использовать для какой сборки. Спасибо!
Я тоже застрял в этой ситуации, когда публиковал свое первое приложение. Документация React Native рассказывает о создании хранилища ключей. Но поскольку я использовал firebase для аутентификации Google, в настройках проекта необходимо указать sha этого хранилища ключей.
Чтобы получить SHA1 из сгенерированного хранилища ключей, выполните следующие команды:
cd android
cd app
keytool -list -v -keystore {keystore-name}.keystore -alias {alias-name}
Теперь запросит пароль. введите пароль, который вы создали при создании хранилища ключей. Он распечатает все детали, и здесь вы можете найти SHA1. Скопируйте отпечаток SHA1 и добавьте в консоль firebase> настройки проекта> приложение для Android.
Люди, которые используют Firebase для входа в Google
Я публикую этот ответ, потому что я пробовал много методов, и только это работало нормально для меня. Проблема возникает из-за того, что в RN версии 0.61 был представлен новый debug.keystore. Из-за этого затрагиваются существующие/новые проекты.
Чтобы решить эту проблему,
android/app. Перейдите в корневую папку вашего приложения для реагирования и выполните приведенную ниже команду.keytool -list -v -keystore ./android/app/debug.keystore -alias androiddebugkey -storepass android -keypass android
После запуска вышеуказанной команды в терминале отобразится SHA1. Скопируйте это.
firebase.console и на вкладке General в project settings вставьте скопированный SHA1 и сохраните его.Сделанный. Теперь запустите приложение, и оно должно работать нормально.
Для получения дополнительной информации https://github.com/react-native-google-signin/google-signin/issues/823
Убедитесь, что вы добавили отладочные и выпускные отпечатки пальцев в настройках проекта firebase.
В противном случае создайте отпечатки ключей отладки и выпуска с помощью app/build.gradle -> signingConfigs -> debug.
$ keytool -list -v -keystore android/app/debug.keystore -alias androiddebugkey -storepass android -keypass android
$ keytool -list -v -keystore android/app/release.keystore -alias androidrelease-aliaskey -storepass android -keypass android
затем скопируйте отпечатки sha1/sha256 и добавьте их в project settings -> firebase.
проблема для меня заключалась в использовании webClientID без androidClientID.
webClientID: в google-services.json => "client_type": 3
androidClientID: в google-services.json => "client_type": 1 Затем в вашем файле js:
GoogleSignin.configure({
androidClientId:
"something.apps.googleusercontent.com",
webClientId:
"something.apps.googleusercontent.com",
});
В React Native есть 2 типа хранилищ ключей:
пока в производстве. при создании yourownkeystore.keystore. вы получите определенный SHA-1, который будет использоваться для производства. возьмите это для yourownkeystore.keystore и замените его в консоли firebase вашего проекта. затем повторно загрузите файл google-services.json и замените его в своем приложении android/app. затем получите clientID и androidID из этого файла json и поместите их в конфигурацию вашего метода подписи Google в js.
Вы спасли мою жизнь. для тех, кто использует генерацию Keystore через Android-студию ".jks", вы можете перейти по этим ссылкам Отпечаток SHA-1 сертификата хранилища ключей, чтобы сгенерировать свой SHA1. Еще раз спасибо
попробуй это, не использовать 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', ничего такого
просто я устанавливаю
Теперь запустите приложение, и оно должно работать нормально.
Вы нашли решение ?