我正在尝试在我的应用程序上实现google登录,并且一切运行良好,它要求我按登录按钮选择帐户,但响应它会向我发送代码16“ CANCELLED”错误。
我已经通过 npm install react-native-google-sign-in 安装了库。 然后我链接了它。我在firebase上创建了一个新项目,并从那里下载google-services.json并将其粘贴到android / app中。还生成了SHA1版本并添加了Firebase项目。
componentDidMount() {
GoogleSignin.configure({
//It is mandatory to call this method before attempting to call signIn()
scopes: ['https://www.googleapis.com/auth/drive.readonly'],
// Repleace with your webClientId generated from Firebase console
webClientId:
'my client id',
});
}
Google登录按钮和操作
<TouchableOpacity
onPress={() => _signIn()}
style={{height:50,width:50,borderRadius:50}}
>
<Image
style={{height:50,width:50}}
resizeMode='contain'
source={ImagePath.GOOGLE_ICON}
/>
</TouchableOpacity>
_signIn = async () => {
//Prompts a modal to let the user sign in into your application.
try {
await GoogleSignin.hasPlayServices({
//Check if device has Google Play Services installed.
//Always resolves to true on iOS.
showPlayServicesUpdateDialog: true,
});
const userInfo = await GoogleSignin.signIn();
alert(JSON.stringify(userInfo))
console.log('User Info --> ', userInfo);
this.setState({ userInfo: userInfo });
} catch (error) {
console.log('Message', error.message);
if (error.code === statusCodes.SIGN_IN_CANCELLED) {
console.log('User Cancelled the Login Flow');
} else if (error.code === statusCodes.IN_PROGRESS) {
console.log('Signing In');
} else if (error.code === statusCodes.PLAY_SERVICES_NOT_AVAILABLE) {
console.log('Play Services Not Available or Outdated');
} else {
alert(JSON.stringify(error))
console.log('Some Other Error Happened',error);
}
}
};
这些是我的签名配置
release {
if (project.hasProperty('MYAPP_RELEASE_STORE_FILE')) {
storeFile file(MYAPP_RELEASE_STORE_FILE)
storePassword MYAPP_RELEASE_STORE_PASSWORD
keyAlias MYAPP_RELEASE_KEY_ALIAS
keyPassword MYAPP_RELEASE_KEY_PASSWORD
}
}
我希望Google成功登录并提供用户数据作为回应。任何帮助将不胜感激。谢谢
答案 0 :(得分:0)
包括Release SHA1而不是调试...如果您仍在为此而苦苦挣扎,这就是我所做的(我使用命令行,Android studio可能会使其变得更容易):
keytool -list -v -keystore "%USERPROFILE%.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
这将吐出包含SHA-1的证书。
Copy the SHA1 and add it to the app in Firebase.
Download the google-services.json and add it to /android/app/
以防万一,请使用以下命令删除tmp文件和缓存:
del %appdata%\Temp\react-native-* & cd android & gradlew clean & cd .. & del node_modules/ & npm cache clean --force
编辑
在build.gradle文件中定义密钥存储详细信息(需要在构建文件的android节下添加)
android {
...
signingConfigs {
release {
storeFile file("release-key.keystore")
storePassword 'passwotd'
keyAlias 'alias'
keyPassword 'password'
}
}
buildTypes {
release {
...
signingConfig signingConfigs.release
}
debug {
debuggable true
}
}
}
...
答案 1 :(得分:0)
解决此问题的方法是将 SHA1
添加到 Firebase。
如果您要测试调试版本,则添加 debug
SHA1,发布版本使用 release
SHA1。
将 SHA1 证书指纹添加到 Firebase 后。
下载 firebase google-services.json
文件并将其添加到 /android/app/
您可以通过以下命令创建调试密钥
cd android
gradlew signingReport
或
cd android && ./gradlew signingReport
答案 2 :(得分:-1)
请共享您的AndroidManifest.xml文件。请检查您是否在清单中添加了任何启动模式。如果是这样,请删除。