private void handleSignInResult(Task<GoogleSignInAccount> completedTask) {
try {
GoogleSignInAccount account = completedTask.getResult(ApiException.class); //exception is here
// Signed in successfully, show authenticated UI.
System.out.println("google token ---> " + account.getIdToken());
} catch (ApiException e) {
// The ApiException status code indicates the detailed failure reason.
// Please refer to the GoogleSignInStatusCodes class reference for more information about this error.
e.printStackTrace();
}
}
答案 0 :(得分:29)
如果您使用Firebase
并试用debug app
:
<强> 1。首先,获取SHA-1
调试密钥:
Gradle
(从右侧面板,您将看到Gradle Bar)Tasks
Android
signingReport
(您将获得SHA-1
和MD5
)<强> 2。向API控制台添加新凭据
OAuth Client ID
Android client (for debug)
(示例)SHA-1
调试密钥 第3。将密钥添加到Firebase
项目中
转到Project settings
- &gt; SHA certificate fingerprints
- &gt;添加调试应用的SHA-1
键。
然后,您可以更新Android项目中的google-services.json
文件。
它对我有用。
答案 1 :(得分:11)
此状态代码表示您提供的是未知服务器客户端ID。 在项目的https://console.developers.google.com/apis/credentials中,您可能需要生成:OAuth客户端ID - &gt; Web应用程序并在您的Android应用程序中使用此Web应用程序客户端ID。
答案 2 :(得分:4)
我的问题是尝试使用Google登录,但我不小心在Firebase中输入了错误的SHA1 。尝试运行Gradle > Your app name > Tasks > android > signingReport
,获取SHA1密钥,并将其与Firebase上的密钥进行比较。如果它们不同,请更改Firebase SHA1密钥以匹配您从signingReport获得的密钥。别忘了之后还要下载 google-services.json 。
答案 3 :(得分:3)
就我而言,问题在于SHA1和google-services.json文件
我按照以下步骤解决了问题:
1.-打开https://console.cloud.google.com/apis/credentials并删除OAuth 2.0客户端ID上的文件
2.-打开https://console.firebase.google.com/ clic gear图标-> Proyect设置->选择您的Android应用->添加指纹->保存->并下载google-services.json文件
3.-打开您的android proyect并将de google-services.json文件替换为-> clic Sync Proyect替换为Gradle Files
4.-新的default_web_client_id值对我来说很好,并解决了问题
答案 4 :(得分:3)
那是因为您使用了错误的default_client_token_id。 要解决此问题,请转到从firebase下载的JSON文件并打开它: 您的client_id位于 “ certificate_hash”:xxxxxxzxzxzzzxzxzxzxzxzx...。 祝您好运:),希望对您有所帮助。
答案 5 :(得分:2)
我想这个问题已经回答了。但是对我来说有点不同。所以 如果某些Google员工遇到这种情况,并且可能遇到与我相同的问题:
特殊情况
如果有人针对一个应用程序(例如,针对不同口味)使用多个Firebase项目,并且在一个项目中的Google身份验证中将“外部” 客户端ID 列入了白名单
然后解决方案是,在“主” /列入白名单的项目的 Google APIs 控制台中,与另一个项目的sha-1(在应用程序共享中找到)一起生成新的凭据。
向API控制台添加新凭据
完成
对不起,我的英语不好。这不是我的母语。
答案 6 :(得分:2)
在进行Google登录设置时,通常需要使用Signed keystore哈希密钥。因此,请尝试使用签名的APK,然后它将起作用。要进行调试,请尝试在Google控制台上添加调试SHA密钥。
答案 7 :(得分:2)
ApiException错误代码10是开发人员错误。如果您的Firebase应用配置不正确,则会出现此错误。一种肯定的情况是,当您想将Firebase身份验证与Google Signin结合使用时,不为Android应用提供SHA1指纹。 (这是Google登录所必需的)。 因此,提供SHA1指纹,然后将google-services.json配置文件下载到您的应用文件夹并进行构建。你应该很好。
已在连接的iOS和网络应用上自动配置Google登录。要为您的Android应用设置Google登录,您需要在项目设置中为每个应用添加SHA1指纹。
答案 8 :(得分:1)
我已通过以下步骤解决了此问题:
1)。转到https://console.developers.google.com/并删除(Android客户端)(如果已创建)。
2)。点击创建凭据,然后点击OAuthClientID并选择android
3)。复制并粘贴您的SHA 1指纹
4)。输入您的包裹名称,然后保存
5)。转到console.firebase.com
6)。下载google-service.json,将其移至项目中的应用目录中
7)。打开google-service.json并找出客户端ID类型3,并将其用作default_web_client_id
8)。运行您的应用
答案 9 :(得分:1)
如果删除此行,它将起作用:
System.out.println("google token ---> " + account.getIdToken());
这是因为您没有对idToken的请求:
.requestIdToken(getString(R.string.google_app_id))
其中app_id
的值为“OAuth客户端ID - &gt; Web应用程序”
答案 10 :(得分:1)
我在生产中有2-3%的场合都拥有这种东西,并且对其他所有人都无缝运行。
鉴于大量问题和造成的不同答案,可以公平地说,这是代表Firebase的问题。他们已经实现了一个包罗万象的错误例程,这只是错误的api设计。 api必须指出失败的问题。
一个长期的解决方案是说服firebase这是错误的API设计,他们需要做得更好。
我们在一起很坚强。
请大致为此写一张支持票到firebase:
Firebase支持,
我的应用中有com.google.android.gms.common.api.ApiException:10。
对我来说-对于论坛上的很多人来说-的问题是 您的api似乎有一个包罗万象的错误例程, 说话是在说“出了点问题,请解决”。
您可以让您的支持团队和很多人头疼 如果您要解决此问题。
API应该能够找出问题所在并给出更好的错误 消息来自上下文。
这确实是一个负担,我认为自从Firebase有了一个 在Android上对这些问题进行准垄断是您的义务 更好。
虽然这显然不是您的错,但我还是鼓励您 升级这个问题。
从根本上说,这是糟糕的api设计,并且会损害原本不错的 产品。
还是谢谢。
答案 11 :(得分:0)
以我为例,它通过将我的 Android Studio 重新连接到 Firebase 来解决。
答案 12 :(得分:0)
别忘了添加
<application
...
<meta-data
android:name="com.google.android.gms.wallet.api.enabled"
android:value="true" />
...
</application>
在清单文件应用程序标签下。 就我而言,问题是因为缺少这些行。
答案 13 :(得分:0)
val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestIdToken(OAUTH_2_CLIENT_ID)
.requestEmail()
.build()
val mGoogleSignInClient = GoogleSignIn.getClient(this, gso)
val signInIntent = mGoogleSignInClient.signInIntent
startActivityForResult(signInIntent, GOOGLE_LOGIN)
OAUTH_2_CLIENT_ID是 Web客户端(由Google Service自动创建)。不是Android
答案 14 :(得分:0)
ApiException 10
是DEVELOPER_ERROR
,表示您的应用程序配置有问题。
这个answer对我有用,但是后来我意识到我们的应用程序通过后端服务器进行了身份验证。因此,如果您的应用程序通过后端服务器进行身份验证,则只需使用Web应用程序客户端ID。但是您仍然需要创建Android类型的客户端ID,否则您将获得ApiException 12500
。您可以从documentation了解更多信息。 (请注意,该链接具有authuser=0
)
答案 15 :(得分:0)
我通过重新执行Firebase Auth连接来解决此问题。
Tool
-> Firebase
Authentication
此后,它可能表示您已经连接,但是您需要更新连接。之后,它工作正常。我认为某个时候Android Studio与不同的Firebase帐户混在一起了。
答案 16 :(得分:0)
我遇到了同样的错误,但我从 Google Cloud Console 获取了 Web 客户端令牌并将其放在声明 GoogleSignInOptions 的位置。替换
.requestIdToken("getString(R.string.default_web_client_id)")
使用您的特定 Google Cloud 项目的网络客户端 ID。
答案 17 :(得分:0)
我从文档中使用了这个命令......
keytool -exportcert -keystore ~/.android/debug.keystore -list -v
我只是把它改成
keytool -exportcert -keystore ./.android/debug.keystore -list -v
并使用 SHA-1 并将其复制到 firebase android 部分。 它只是工作正常。
答案 18 :(得分:0)
如果您不使用自己的后端服务器,则不需要提供 OAuth 2.0 客户端 ID(正如它所说的 here)。当然,请检查您是否提供了正确的 SHA-1 代码,但请记住,您提供的是发布变体 SHA-1 密钥,因此当您尝试将 Google SignIn 与调试应用变体一起使用时,可能会出现此错误.所以你有两个选择:
答案 19 :(得分:0)
可能的解决办法:
如果您曾经重命名项目的包,请检查 AndroidManifest.xml 中的包名称和应用程序 gradle 文件中的 applicationId 是否相同。 当我将 applicationId 命名为我的应用程序包时,它对我有帮助