我正在使用google sign-in services来验证使用我的应用的用户 . 当我刚要求电子邮件信息时,我得到了它的工作
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail().build();
然后,我发现我还需要请求ID令牌才能使用我的后端进行身份验证,所以我做了:
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(String.valueOf(R.string.server_client_id))
.requestEmail().build();
问题是它不会让我在更改后登录 . 我每次尝试登录时都会收到的状态是 Status{statusCode=unknown status code: 12501, resolution=null}
.
我一直在寻找,我发现this post几乎是同样的事情 . 但是,我没有做出任何回答的人所提出的错误,我的开发控制台中的oAuth客户端ID用于Web应用程序:
和 R.string.server_client_id
是图片中的第一个客户端ID . 包名称当然在所有位置都是正确的,否则它不会让人们签署应用程序进行调试 .
我一直在试图解决这个问题几个小时但没有成功 . 可能是什么问题呢?请随时索取我可能忘记放在这里的更多信息 .
11 回答
嗯,这非常令人尴尬,但我想通了:
我发送的是资源ID而不是解除引用的字符串资源 .
显然首先检查你的释放sha1键是否正确 . 但如果它仍然不起作用并且你使用谷歌播放服务8.4.0(即编译'com.google.android.gms:播放服务:8.4.0'),可以通过修改GoogleSignInOption对象来解决问题 . 代替:
你必须使用:
这解决了返回statusCode = INTERNAL_ERROR或statusCode = Error 12501 OR statusCode = Error 12500的错误 . 然后这个gso对象可用于创建GoogleApiClient,如下所示:
详情请见:Google signin not working on release version of android
在我的项目中,我的gradle文件中的applicationId与manifest.xml中的packagename不同,这是我的问题的根源 .
我必须创建的android密钥需要有applicationId fqdn而不是包名(与google告诉你的相反),因为它对我有效 .
以为我会把它留在这里以防万一为某人节省时间 .
1.Specify signingConfigs in your gradle file
2.Go to Build Types in Project Structure (in Android Studio) and specify signingConfigs to "config"
现在 clean 您的项目并再次构建 . 它应该工作 .
如果上述方法不起作用,则以下是您的最后选择 .
尝试第一步,构建并检查 . 如果它不起作用,请转到下一步并再次尝试构建 .
构建一个签名的apk(记住密码已检查) .
在签名之前检查密钥库文件的文件名,并在签署apk时放弃(在android studio中) .
在您的设备中安装已签名的apk .
等待五分钟 .
尝试在谷歌唱歌 . 如果仍然12501即将到来等待五分钟 . 这样做会打到gradle sync .
再试一次 . 它应该工作 .
编辑:Google已在控制台中添加了apk签名 . 如果您已经签署了apk,请忽略它或者如果您想使用它,请小心它,因为它可能会破坏您当前的google登录设置
当我意外地使用Android应用程序的客户端ID而不是Webapp作为
requestIdToken()
参数时,我遇到了这个问题 .您应该在那里使用Webapp的客户端ID . 默认情况下,它被称为
Web client (auto created by Google Service)
你已经在Gradle中设置了
signingConfigs
和buildTypes
吗?我通过在gradle上明确指定那些东西来修复它 . 在这里阅读http://developer.android.com/tools/publishing/app-signing.html确保为Firebase console添加了(发布)签名密钥的 SHA-1 fingerprint
Find your SHA1 key:
keytool -exportcert -list -v -alias <your-key-name> -keystore <path-to-production-keystore>
将其添加到firebase控制台:转到https://console.firebase.google.com,选择您的应用,选择设置 .
我有同样的问题 . 问题是我选择了错误的“API项目”,因此选择了错误的Web客户端密钥 . 显然,当我试图让演示应用程序运行时,我的两个API项目中都创建了两个OAuth2服务器客户端ID .
我遇到了类似的问题 . 在我的情况下,这是因为我使用的服务器客户端ID来自与客户端密钥不同的项目 . 事实证明,他们需要来自同一个项目 .
嗨我已经看到上面的评论,但因为我已经做了实用,它的所有sha问题,意味着如果你将注册特定的IP地址的sha并获得google.services json,这将完美要么你可以使用
或者gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken(LoginActivity.this.getResources() . getString(R.string.server_client_id)) . requestEmail() . build();但是如果你想在其他机器上使用其他机器创建应用程序,则会显示12501错误状态代码,因此您需要为该特定机器再次生成sha . 谢谢
Androidmanifest.xml中的
<meta-data>
位于<application></application>
enclosure之外 . 这就是为什么你得到12501错误