我已在 Firebase 上启用 Google SignIn,并且还添加了 SHA-1 密钥。我的应用程序编译得很好,但是当我按下登录按钮并选择 Google 帐户进行登录时,我得到了
Possible Unhandled Promise Rejection (id: 0): Error: DEVELOPER_ERROR
[Fri Oct 23 2020 18:08:26.174] WARN Possible Unhandled Promise Rejection (id: 0):
Error: DEVELOPER_ERROR
promiseMethodWrapper@http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:2242:45
signIn$@http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:102709:72
tryCatch@http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:24976:23
invoke@http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:25149:32
tryCatch@http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:24976:23
invoke@http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:25049:30
http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:25059:21
tryCallOne@http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:27056:16
http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:27157:27
_callTimer@http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:30596:17
_callImmediatesPass@http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:30635:17
callImmediates@http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:30852:33
__callImmediates@http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:2736:35
http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:2522:34
__guard@http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:2719:15
flushedQueue@http://localhost:8081/index.bundle?platform=android&dev=true&minify=false:2521:21
flushedQueue@[native code]
callFunctionReturnFlushedQueue@[native code]
这是我的
App.js
:
import React, {useState, useEffect} from 'react';
import {View, Text, Button} from 'react-native';
import auth from '@react-native-firebase/auth';
import firebase from '@react-native-firebase/app';
import {GoogleSignin} from '@react-native-community/google-signin';
const firebaseConfig = {
apiKey: 'xxxx',
appId: 'xxxx',
databaseURL: 'https://xxxx.firebaseio.com',
messagingSenderId: 'xxxx',
projectId: 'xxxx',
storageBucket: 'xxxx.appspot.com',
};
if (!firebase.apps.length) {
firebase.initializeApp(firebaseConfig);
}
const App = () => {
useEffect(() => {
// initialize the Google SDK
GoogleSignin.configure({
scopes: ['email'],
webClientId:
'xxxx.apps.googleusercontent.com',
offlineAccess: true,
});
}, []);
const googleLogin = async () => {
// Get the users ID token
const {idToken} = await GoogleSignin.signIn();
// Create a Google credential with the token
const googleCredential = auth.GoogleAuthProvider.credential(idToken);
// Sign-in the user with the credential
return auth().signInWithCredential(googleCredential);
};
return (
<View>
<Button title="Login" onPress={() => googleLogin()}></Button>
</View>
);
};
export default App;
您在 firebase 中的 SHA-1 密钥与您应用程序的 SHA-1 密钥不匹配。要获取正确的 SHA-1 密钥,请按照控制台中的命令和应用程序路径操作:
keytool -list -v -keystore ./android/app/debug.keystore -alias androiddebugkey -storepass android -keypass android
出现这种情况有两个原因:
我的错误是我选择了错误的变体。 请注意,有 6 个键,其中 3 个相似,另外 3 个也相似。 将所有变体添加到 firebase sha-1 后,它起作用了。
in YourProject/android
run:
./gradlew :app:signingReport
如果你运行 ./gradlewsigningReport 它会打印许多签名报告,你可能不小心拿走了你的 sha-1 id
看到有
任务:react-native-firebase_auth:签名报告
但你可能需要
任务:应用程序:签署报告
它打印如下:
> Task :app:signingReport
Variant: debug
Config: debug
Store: C:\Users\user\Documents\projects\chatgptfriends\android\app\debug.keystore
Alias: androiddebugkey
MD5: 20:F4:61:48...
SHA1: 5E:8F:16:06:...
SHA-256: FA:C6:17:45:DC:09:03:78:...
Valid until: Wednesday, 1 May 2052
----------
Variant: release
Config: debug
Store: C:\Users\user\Documents\projects\chatgptfriends\android\app\debug.keystore
Alias: androiddebugkey
MD5: 20:F4:61:48:...
SHA1: 5E:8F:16:06:...
SHA-256: FA:C6:17:45:DC:...
Valid until: Wednesday, 1 May 2052
----------
Variant: debugAndroidTest
Config: debug
Store: C:\Users\user\Documents\projects\chatgptfriends\android\app\debug.keystore
Alias: androiddebugkey
MD5: 20:F4:61:48:...
SHA1: 5E:8F:16:06:...
SHA-256: FA:C6:17:45:DC:...
Valid until: Wednesday, 1 May 2052
----------
> Task :react-native-firebase_app:signingReport
Variant: debugAndroidTest
Config: debug
Store: C:\Users\user\.android\debug.keystore
Alias: AndroidDebugKey
MD5: D1:EA:B0:E0...
SHA1: 0B:76:BB:09...
SHA-256: 60:FE:E2:...
Valid until: Monday, 27 January 2053
----------
> Task :react-native-firebase_auth:signingReport
Variant: debugAndroidTest
Config: debug
Store: C:\Users\user\.android\debug.keystore
Alias: AndroidDebugKey
MD5: D1:EA:B0:E0...
SHA1: 0B:76:BB:09...
SHA-256: 60:FE:E2:...
Valid until: Monday, 27 January 2053
----------
> Task :react-native-firebase_firestore:signingReport
Variant: debugAndroidTest
Config: debug
Store: C:\Users\user\.android\debug.keystore
Alias: AndroidDebugKey
MD5: D1:EA:B0:E0...
SHA1: 0B:76:BB:09...
SHA-256: 60:FE:E2:...
Valid until: Monday, 27 January 2053
----------
> Task :react-native-google-signin_google-signin:signingReport
Variant: debugAndroidTest
Config: debug
Store: C:\Users\user\.android\debug.keystore
Alias: AndroidDebugKey
MD5: D1:EA:B0:E0...
SHA1: 0B:76:BB:09...
SHA-256: 60:FE:E2:...
Valid until: Monday, 27 January 2053
----------
如果你正确完成了每一步,但它仍然不起作用
然后,尝试在谷歌云控制台中设置同意屏幕> OAuth同意屏幕并完成所有步骤,可选>记住不要给出多个范围,因为它将需要进一步的步骤来验证用户。
问题出在 SHA-1 密钥上。当我们使用
gradlew signingReport
命令时,会创建多种类型的 varient
登录报告。因此,请使用与 Varient 相关的 SHA-1 密钥:relese。