Android Google SignIn无法在调试模式下运行:GoogleSignInResult为false

时间:2015-12-06 12:12:06

标签: android google-signin

我一直在关注本教程以使Google SignOn继续: https://developers.google.com/identity/sign-in/android/start-integrating

当我使用虚拟设备在本地运行我的应用程序时,它工作正常但是当我通过调试将其部署到我的设备时,或者如果我生成已签名的jar文件并将其复制到手册GoogleSignInResult,则始终返回false带有INTERNAL ERROR消息。

在我通过调试将应用程序部署到我的设备时,我很长时间才能使用谷歌登录。任何帮助都非常感谢!

解决我的问题:

在下载json文件的地方,您必须复制可以使用java密钥工具生成的代码。我完全错过了几次。

6 个答案:

答案 0 :(得分:12)

您可能缺少开发控制台注册。非常常见的开发人员将拥有多个签名证书配置:调试密钥库,测试环境签名证书,生产签名证书。签名证书SHA1 +包名称唯一标识Android客户端,需要在开发控制台中单独注册。

请参阅以下blogpost以了解有关OAuth客户端注册的更多信息:

http://android-developers.blogspot.com/2016/03/registering-oauth-clients-for-google.html

或者看这篇文章: Test google signin on Android in development phase

答案 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键

在大多数情况下,问题出在第三把钥匙

  1. 调试键

    keytool -exportcert -alias androiddebugkey -keystore ~/.android/debug.keystore | openssl sha1 -binary | openssl base64

  2. 释放键

    keytool -exportcert -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH | openssl sha1 -binary | openssl base64

  3. 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而不是配置期间的硬编码值。

我希望它能让别人省下我试图用我的项目诊断错误的麻烦。