我一直在关注本教程以使Google SignOn继续: https://developers.google.com/identity/sign-in/android/start-integrating
当我使用虚拟设备在本地运行我的应用程序时,它工作正常但是当我通过调试将其部署到我的设备时,或者如果我生成已签名的jar文件并将其复制到手册GoogleSignInResult
,则始终返回false
带有INTERNAL ERROR
消息。
在我通过调试将应用程序部署到我的设备时,我很长时间才能使用谷歌登录。任何帮助都非常感谢!
解决我的问题:
在下载json文件的地方,您必须复制可以使用java密钥工具生成的代码。我完全错过了几次。
答案 0 :(得分:12)
您可能缺少开发控制台注册。非常常见的开发人员将拥有多个签名证书配置:调试密钥库,测试环境签名证书,生产签名证书。签名证书SHA1 +包名称唯一标识Android客户端,需要在开发控制台中单独注册。
请参阅以下blogpost以了解有关OAuth客户端注册的更多信息:
http://android-developers.blogspot.com/2016/03/registering-oauth-clients-for-google.html
答案 1 :(得分:5)
我遇到了同样的问题,这是由于
apply plugin: 'com.google.gms.google-services'
不在应用build.gradle的底部。
通过查看Gradle控制台了解它。没有提出任何错误。
答案 2 :(得分:3)
原因可以是: - 您可能正在使用未签名的apk来测试您的应用。
转到构建 - >生成已签名的APK - > 使用您用于获取SHA1指纹的密钥对其进行签名,以便在google开发者控制台上创建clientID
运行app-debug.apk并完成!!
答案 3 :(得分:3)
<强> EDITED 强>
答案来自this,因为它也适用于此问题
我在这里附上答案
问题是由签名证书和SHA-1证书指纹引起的。将以下SHA-1证书添加到您的googleApi凭据中。有2例
1.如果您在调试模式下运行,请添加由以下
生成的SHA-1指纹"C:\Program Files\Java\jre1.8.0_101\bin\keytool" -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android
2.如果您已配置Signing Config,请使用以下
生成的SHA-1指纹"C:\Program Files\Java\jre1.8.0_101\bin\keytool" -list -v -keystore "[youKeyPath]\youKey.jks"
我建议您在googleApi凭据中添加SHA-1指纹
答案 4 :(得分:1)
根据this,您需要在Firebase项目设置中 3个SHA1键
在大多数情况下,问题出在第三把钥匙。
调试键
keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64
释放键
keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64
Google Play应用签名键
https://play.google.com/apps/publish/
在应用程序的Release management
> App signing
> App signing certificate
它是SHA1键
您需要三个密钥才能确定一个Google登录。
答案 5 :(得分:0)
除了上述答案之外,我还遇到了一个由于配置与google-services.json文件不匹配而引起问题的案例:
也可能在GoogleSignInOptions Builder中专门分配了clientId,如下所示:
String serverClientId = "xxxxx-yyyy.apps.googleusercontent.com";
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestIdToken(serverClientId)
.build();
如果是这种情况,可以删除对serverClientId和requestIdToken调用的引用,如下所示:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.build();
这将依赖于google-services.json而不是配置期间的硬编码值。
我希望它能让别人省下我试图用我的项目诊断错误的麻烦。