com.google.android.gms.common.api.ApiException:12500

时间:2018-10-12 18:23:06

标签: android

这是我的第一次尝试。...试图查找最近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指纹,如其他帖子所述。

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

  • 在下面的项目级别build.gradle中使用:

buildscript {// ...依赖项{// ... classpath'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);
          }
        }
      });
  }
}

8 个答案:

答案 0 :(得分:5)

我有这个问题。并已经解决了。 SHA1调试和发布都已添加到Firebase控制台,但仍然无法正常工作。另外,我尝试仅将SHA1调试,但仍然无法正常工作。经过多次尝试和错误后,我通过从凭据菜单中填写“ oAuth同意屏幕”的信息来解决了问题,这是步骤:

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

答案 1 :(得分:1)

按照Google开发者文档进行操作,在其中清楚地逐步说明 如何集成Google登录到Android应用。

https://developers.google.com/identity/sign-in/android/start 重要 1检查您是否已在Google控制台中启用Google Plus API。 2在将您的项目配置为Google后,应将其连接到Firebase。您只想在Firebase上选择项目。 3将JSON文件包含到项目浏览器中。 4 YOUR_SERVER_CLIENT_ID 检查您是否提供了正确的服务器客户端ID。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

但是上述方法直到 我从android模拟器切换到物理android设备后才起作用。 希望这个答案可以帮助某人。

  • 学习愉快!

答案 6 :(得分:0)

我现在遇到了同样的问题。经过一些调试后,我发现我错过了在身份验证下启用google登录方法的功能。启用后,它可以正常工作。

答案 7 :(得分:0)

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

完成以下所有操作后,仍然无法正常工作(获取所有强大的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 Service自动创建))。 不要使用其中一个,而是您另一个,它没有为您设置任何URI(名称是 Web客户端(由Google登录自动创建))。由于某些原因,请使用第二个选项 WORKS

希望可以为您提供帮助。享受