【问题标题】:com.google.android.gms.common.api.ApiException: 12500com.google.android.gms.common.api.ApiException:12500
【发布时间】:2019-03-18 00:23:01
【问题描述】:

这是我的第一次尝试....试图找到过去 2 天的问题。 我正在尝试将 google 登录集成到 android 应用程序中,但是如下: com.google.android.gms.common.api.ApiException: 12500

遵循以下代码: https://firebase.google.com/docs/auth/android/google-signin

  • 确保开发控制台中存在 oauth 客户端 ID,并按照其他帖子中的建议使用来自 ~/.android/debug.keystore 的正确 SHA-1 指纹。

  • 在应用级别使用最新的播放服务 49 和 build.gradle:实现 'com.google.android.gms:play-services-auth:16.0.1'

  • 在项目级 build.gradle 中使用以下代码:

buildscript { // ... 依赖项 { // ... 类路径 'com.google.gms:google-services:4.1.0' // google-services 插件 } }

public class SignUpActivity extends AppCompatActivity {

private GoogleSignInClient gsc;

private FirebaseAuth firebaseAuth;
  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);
    GoogleSignInOptions gso = new GoogleSignInOptions
      .Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
      .requestIdToken(String.valueOf(R.string.gplus_api_client_id))
      .requestEmail()
      .build();

    gsc = GoogleSignIn.getClient(this, gso);

    //Initialize firebase authentication
    firebaseAuth = FirebaseAuth.getInstance();
  }


  @Override
  public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInClient.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
      // The Task returned from this call is always completed, no need to attach
      // a listener.
      Task < GoogleSignInAccount > task = GoogleSignIn.getSignedInAccountFromIntent(data);

      handleSignInResult(task);
    }
  }
  private void handleSignInResult(Task < GoogleSignInAccount > completedTask) {
    try {
      //Sign in Successful
      GoogleSignInAccount account = completedTask.getResult(ApiException.class);
      Log.w("SignUpActivity/handleSignInResult", "Trying signing in with Google...  " + account);
      firebaseAuthWithGoogle(account);

      // Signed in successfully, show authenticated UI.

      // Log.w("SignUpActivity/handleSignInResult", "Google sign in successful for account " + account);

    } catch (ApiException e) {
      // The ApiException status code indicates the detailed failure reason.
      // Please refer to the GoogleSignInStatusCodes class reference for more information.
      Log.w("SignUpActivity/handleSignInResult", "Google sign in failed with exception: " + e);
    }
  }

  private void firebaseAuthWithGoogle(GoogleSignInAccount account) {
    Log.i("SignUpActivity/firebaseAuthWithGoogle", "Signed in as : " + account.getId());

    AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null);

    firebaseAuth.signInWithCredential(credential)
      .addOnCompleteListener(this, new OnCompleteListener < AuthResult > () {
        @Override
        public void onComplete(@NonNull Task < AuthResult > task) {
          if (task.isSuccessful()) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            Log.i("SignUpActivity/firebaseAuthWithGoogle", "Sign in successful for user : " + user);
          } else {
            Log.e("SignUpActivity/firebaseAuthWithGoogle", "User Authentication failed.");
            Snackbar.make(findViewById(R.id.view_signup), "Authentication failed.", Snackbar.LENGTH_SHORT);
          }
        }
      });
  }
}

【问题讨论】:

标签: android


【解决方案1】:

我有这个问题。并且已经解决了。 SHA1 调试和发布都已添加到 Firebase 控制台,但仍然无法正常工作。此外,我尝试只进行 SHA1 调试,但仍然无法正常工作。经过这么多尝试和错误,我通过完成凭据菜单中的“oAuth同意屏幕”信息解决了这个问题,步骤如下:

  1. 登录 Google Console Cloud
  2. 选择与当前 Firebase 项目相关的当前项目
  3. 导航到 API 和服务
  4. 点击凭据菜单
  5. 点击“oAuth 同意屏幕”
  6. 添加应用程序徽标、应用程序主页链接和应用程序隐私政策链接。要添加这两个链接,您只需从“oAuth 同意屏幕”的授权域部分复制和粘贴,例如:your-app-abc123.firebaseapp.com

【讨论】:

  • 我的英雄!让我免于 2 天的头部撞击。
  • 如果我没有网络应用怎么办?
【解决方案2】:

按照谷歌开发者文档,其中明确给出一步一步的说明 如何将 google 登录集成到 Android 应用中。

https://developers.google.com/identity/sign-in/android/start 重要

  1. 检查您是否已在 google 控制台中启用 Google plus API。
  2. 在将您的项目配置到 Google sing 中后,它应该连接到 Firebase。您只想在 firebase 上选择您的项目。
  3. 将 JSON 文件包含到您的项目浏览器中。
  4. YOUR_SERVER_CLIENT_ID 检查您是否提供了正确的服务器客户端 ID。

【讨论】:

    【解决方案3】:

    我为同样的错误 12500 苦苦挣扎了好几个小时。 显然您需要在此页面上填写所有必需的信息(应用名称、徽标、电子邮件、授权域) https://console.developers.google.com/apis/credentials 在 OAuth 同意屏幕选项卡上

    【讨论】:

      【解决方案4】:

      基本上,问题出在控制台上的SHA1 键上,请重新生成它并再次正确放置相同的项目。

      1)作为答案,请确保您实际签名的 Android apk 具有与您在 Firebase 项目的 Android 集成部分(您可以下载 google-services.json 的页面)的控制台中指定的指纹相同的 SHA1 指纹

      2) 最重要的是,转到您的 Firebase 项目的设置(齿轮图标位于左上角的概览右侧。然后切换到帐户链接标签。在该标签上,将 Google Play 链接到您的项目。

      【讨论】:

        【解决方案5】:

        如果尝试了上述所有方法后仍然无法登录,您也可以尝试在真机上运行代码。我花了两天时间尝试使用 android studio 模拟器登录。如果您在真实设备上成功登录,则需要在您的模拟器上更新 google play 服务。

        【讨论】:

          【解决方案6】:

          我在寻找这个错误的解决方案时正在使用Android模拟器。我尝试过的事情如下:

          1. 已创建 SHA1 证书。
          2. 通过添加应用程序徽标和支持电子邮件更新了 oAuthConsent 屏幕。

          但是直到我从android模拟器切换到物理android设备之前,上述方法都不起作用。 希望这个答案可能对某人有所帮助。

          • 学习愉快!

          【讨论】:

            【解决方案7】:

            我现在遇到了同样的问题。经过一些调试,我发现我错过了在身份验证下启用谷歌登录方法。启用后就可以正常使用了。

            【讨论】:

              【解决方案8】:

              对于这个问题的最终结果,我确定您现在正在拉伸头发并一直在思考为什么它仍然不起作用。让我分享一下对我有用的东西。

              在您完成以下所有操作后,仍然无法正常工作(得到所有强大的 12500 错误):

              1. 检查 Firebase 项目设置中的调试 SHA-1 密钥
              2. 更新了您项目中的 google-service.json
              3. 更新了您在 Firebase 项目中的支持​​电子邮件
              4. 更新了您的隐私链接、服务条款链接、应用程序徽标 Google API 控制台中的 Oath2 同意页面
              5. 在您的 Android 物理设备中运行

              所以:

              所以基本上在您的 Google API 控制台中,您将拥有 2 个 OAuth 2.0 客户端 ID。您将在这里有 2 件商品。当你点击里面时,会有一个URI,为你设置your-project.firebaseapp.com(名称是Web客户端(由Google服务自动创建))。 不要使用那个,而是你另一个,它没有为你设置任何 URI(名称是 Web 客户端(由 Google 登录自动创建))。出于某种原因,使用第二个选项 WORKS。

              希望能帮到你。享受

              【讨论】:

                【解决方案9】:

                如果您遇到平台异常并且此 com.google.android.gms.common.api.ApiException: 12500 则不要担心,请点击此链接,希望您的问题能够得到解决。

                步骤:-

                1. 删除 debug.keystore 文件。该文件存储在 Windows 上的 C:\Documents and Settings.android\

                2. 首先从您的 IDE 运行您的应用

                3. 使用这个命令生成一个新的 debug.keystore 文件,keytool -list -v -keystore "%USERPROFILE%.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android 这里 USERPROFILE 表示你的 PC 用户名的名称

                4. 在 firebase 控制台中更新您的 SHA 1

                5. 下载 google_service.json 文件的更新版本

                使用此链接作为参考,https://github.com/flutter/flutter/issues/25640#issuecomment-449589417

                【讨论】:

                  猜你喜欢
                  • 2019-04-05
                  • 2019-11-29
                  • 2019-10-04
                  • 2022-11-02
                  • 2019-06-09
                  • 2019-11-24
                  • 1970-01-01
                  • 2018-12-16
                  • 2019-02-23
                  相关资源
                  最近更新 更多