Android Google SignIn 无法在调试模式下工作:GoogleSignInResult 为 false

Posted

技术标签:

【中文标题】Android Google SignIn 无法在调试模式下工作:GoogleSignInResult 为 false【英文标题】:Android Google SignIn not working in debug mode: GoogleSignInResult is false 【发布时间】:2016-03-11 02:14:09 【问题描述】:

我一直在学习本教程以开始使用 Google SignOn: https://developers.google.com/identity/sign-in/android/start-integrating

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

在通过调试将应用程序部署到我的设备时,我一直在努力使用谷歌登录。非常感谢任何帮助!

我的问题的解决方案:

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

【问题讨论】:

面临同样的问题。即使使用虚拟设备也会出现同样的错误。我以为我的google-services.json 文件可能有问题,但事实并非如此。此外,这曾经可以工作一段时间,我只是注意到它正在破坏。也无法弄清楚它改变的地方...... 我也有类似的问题。相同的代码在我的 Android 4.4.4 的 Nexus 7 平板电脑上运行,但我在 Nexus 6 的 Android 6.0 上得到 INTERNAL_ERROR 我的问题是应用没有用我的证书签名:***.com/questions/34652682/… @Markus 我有类似的问题,但在发布模式下。什么 json 文件?client_id.json 或 google-services.json?我可以把代码放在哪里? @Markus 我也有类似的问题。你能详细说明你是如何解决这个问题的吗? “复制过去可以使用 java 密钥工具生成的代码”是什么意思?? 【参考方案1】:

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

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

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

或者看这个帖子: Test google signin on Android in development phase

【讨论】:

正如我在评论中提到的:好吧,这是我的错。在您下载 json 文件的位置,您必须复制可以使用 java 密钥工具生成的代码。我连续几次完全错过了..所以也许这会有所帮助。但是你的回答可能会帮助其他人加入这个帖子,所以谢谢你!【参考方案2】:

我遇到了同样的问题,这是由于

apply plugin: 'com.google.gms.google-services'

不在应用 build.gradle 的底部。

通过查看 Gradle 控制台弄清楚了。未引发任何错误。

【讨论】:

【参考方案3】:

根据this,您需要 3 个 SHA1 密钥在 Firebase 项目设置中

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

    调试键

    keytool -list -v -alias androiddebugkey -keystore ~/.android/debug.keystore

    释放键

    keytool -list -v -alias YOUR_RELEASE_KEY_ALIAS -keystore YOUR_RELEASE_KEY_PATH

    Google Play 应用签名密钥

    https://play.google.com/apps/publish/

    新游戏发布控制台的更新

    在您应用的Release menu > App integrity > App signing certificate

    在旧版游戏发布控制台中

    在您应用的Release management > App signing > App signing certificate

    这是 SHA1 密钥

您需要三个密钥才能确定一个 Google 登录。

确保它始终是 SHA1,而不是 SHA256

【讨论】:

【参考方案4】:

可以的原因是: - 您可能正在使用未签名的 apk 来测试您的应用。

转到 Build->Generate Signed APK -> 使用您用于获取 SHA1 指纹以在 Google 开发者控制台上生成 clientID 的密钥对其进行签名

运行 app-debug.apk 并完成!

【讨论】:

感谢您的意见。它可能会帮助其他一些人。我用我的问题的解决方案更新了我的答案。我已经把它作为评论,但现在它的可读性更好:) hai,我有类似的问题,但在发布版本上..我不想尝试你的答案也许它可以帮助..但我不太明白你的答案,你说sign it with the key这是你的意思是SHA1指纹?当我生成签名APK时我把它放在哪里?谢谢之前【参考方案5】:

已编辑

答案来自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 指纹

【讨论】:

【参考方案6】:

除了上面的答案,我还遇到了一个问题是由于配置与 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,而不是配置期间的硬编码值。

我希望它可以为其他人省去我试图诊断项目故障的麻烦。

【讨论】:

以上是关于Android Google SignIn 无法在调试模式下工作:GoogleSignInResult 为 false的主要内容,如果未能解决你的问题,请参考以下文章

Google Signin 无法点击,并且仅在移动设备上登录时冻结

无法解析 GoogleSignIn 和 GoogleSignInClient

admin_signin活动无法转换为android.app.activity

像 Google SignIn Button 一样设置 Facebook SignIn 按钮高度

Google+ 登录按钮 [class='g-signin']

@react-native-google-signin/google-signin/src/GoogleSignin.js 抛出异常 null is not an object(评估'RNGoogle