为什么我会收到com.google.android.gms.common.api.ApiException:10:?

时间:2017-11-22 14:53:47

标签: android firebase-authentication

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();
    }
}

20 个答案:

答案 0 :(得分:29)

如果您使用Firebase并试用debug app

<强> 1。首先,获取SHA-1调试密钥:

  1. 点击Gradle(从右侧面板,您将看到Gradle Bar)
  2. 点击Tasks
  3. 点击Android
  4. 双击signingReport(您将获得SHA-1MD5
  5. <强> 2。向API控制台添加新凭据

    1. 转到此处https://console.developers.google.com/apis/credentials
    2. 新建OAuth Client ID
    3. 姓名:Android client (for debug)(示例)
    4. 签名证书指纹:复制粘贴SHA-1调试密钥
    5. 输入您的包裹名称然后保存
    6. 第3。将密钥添加到Firebase项目中

      1. 转到Project settings - &gt; SHA certificate fingerprints - &gt;添加调试应用的SHA-1键。

      2. 然后,您可以更新Android项目中的google-services.json文件。

      3. 它对我有用。

答案 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项目
  • 将客户ID列入白名单
  • 通过应用共享安装的应用无法通过Google注册

如果有人针对一个应用程序(例如,针对不同口味)使用多个Firebase项目,并且在一个项目中的Google身份验证中将“外部” 客户端ID 列入了白名单

然后解决方案是,在“主” /列入白名单的项目的 Google APIs 控制台中,与另一个项目的sha-1(在应用程序共享中找到)一起生成新的凭据。

向API控制台添加新凭据

  1. 转到Google APIs of whitelisted project
  2. 创建新的 OAuth 客户端ID
  3. 添加所需的所有内容,以及其他项目的软件包名称
  4. 从其他项目的App Sharing中粘贴SHA-1哈希

完成

对不起,我的英语不好。这不是我的母语。

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

检查Common Status Error Codes

答案 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 10DEVELOPER_ERROR,表示您的应用程序配置有问题。

这个answer对我有用,但是后来我意识到我们的应用程序通过后端服务器进行了身份验证。因此,如果您的应用程序通过后端服务器进行身份验证,则只需使用Web应用程序客户端ID。但是您仍然需要创建Android类型的客户端ID,否则您将获得ApiException 12500 。您可以从documentation了解更多信息。 (请注意,该链接具有authuser=0

答案 15 :(得分:0)

我通过重新执行Firebase Auth连接来解决此问题。

  1. 点击右上角的小方块以登录到您的Google帐户
  2. 转到Tool-> Firebase
  3. 选择Authentication
  4. 连接

此后,它可能表示您已经连接,但是您需要更新连接。之后,它工作正常。我认为某个时候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 与调试应用变体一起使用时,可能会出现此错误.所以你有两个选择:

  1. 构建并运行发布版 APK
  2. 将您的调试 SHA-1 密钥添加到 Firebase 控制台,然后您就可以在没有此异常的情况下运行您的调试 APK

答案 19 :(得分:0)

可能的解决办法:

如果您曾经重命名项目的包,请检查 AndroidManifest.xml 中的包名称和应用程序 gradle 文件中的 applicationId 是否相同。 当我将 applicationId 命名为我的应用程序包时,它对我有帮助