谷歌登录失败com.google.android.gms.common.api.ApiException:10:

问题描述 投票:28回答:6

所以我陷入了这个令人沮丧的问题。我对Firebase上的Google Auth很新,但是我完成了firebase文档指示如何集成Google SignIn Auth的所有内容,但我仍然在控制台中收到这个奇怪的错误,包括两部分:

12-03 11:07:40.090 2574-3478/com.google.android.gms E/TokenRequestor: You have wrong OAuth2 related configurations, please check. Detailed error: UNREGISTERED_ON_API_CONSOLE

并且

Google sign in failed com.google.android.gms.common.api.ApiException: 10:

在任何人试图指出先前已经在堆栈溢出问题上提出的类似问题之前,这是我在看到所有可用解决方案之后到目前为止所做的事情但尚未解决错误

  • 我的项目有SHA1指纹
  • 我有我的OAuth 2.0客户端ID,android客户端ID和Web客户端,在requestIdToken()中我已经放了web客户端ID。
  • 我没有在Google Play商店发布我的项目APK。这意味着我没有意外生成另一个SHA1指纹。
  • 我已逐步跟踪Google登录Auth firebase文档。

这是我的代码片段:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_signup);
    ButterKnife.bind(this);

    String webClientId = getString(R.string.web_client_id);


    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestIdToken(webClientId)
            .build();

    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();

    mGoogleSignInClient = GoogleSignIn.getClient(this, gso);


    GoogleSignInAccount account = GoogleSignIn.getLastSignedInAccount(this);


    googleLoginBtn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent signInIntent = mGoogleSignInClient.getSignInIntent();
            startActivityForResult(signInIntent, RC_SIGN_IN);
        }
    });

}



@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);

        try{

            GoogleSignInAccount account = task.getResult(ApiException.class);
            firebaseAuthWithGoogle(account);

        } catch (ApiException e) {
            // Google Sign In failed, update UI appropriately
            Log.w(TAG, "Google sign in failed", e);
            // [START_EXCLUDE]
            Toast.makeText(this, "Gooogle Auth failed", Toast.LENGTH_LONG);
            // [END_EXCLUDE]
        }

    }
}



private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId());
    // [START_EXCLUDE silent]
    //showProgressDialog();
    // [END_EXCLUDE]

    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {
                    if (task.isSuccessful()) {
                        // Sign in success, update UI with the signed-in user's information
                        Log.d(TAG, "signInWithCredential:success");
                        FirebaseUser user = mAuth.getCurrentUser();
                        Toast.makeText(LoginActivity.this, "Successful Auth", Toast.LENGTH_LONG).show();
                    } else {
                        // If sign in fails, display a message to the user.
                        Log.w(TAG, "signInWithCredential:failure", task.getException());
                        Toast.makeText(LoginActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                        //updateUI(null);
                    }

                    // [START_EXCLUDE]
                    //hideProgressDialog();
                    // [END_EXCLUDE]
                }
            });
}
android firebase google-authentication
6个回答
49
投票

基本上问题是在控制台上的SHA1键请重新生成并重新放入相同的项目。

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

2)最重要的是转到firebase项目的设置(左上角区域概述右侧的齿轮图标。然后切换到帐户链接选项卡。在该选项卡上将Google Play链接到您的项目。


5
投票

我面临同样的问题,在检查解决方案后,从重新生成指纹到将firebase上的应用程序链接到Google Play控制台并发布已签名的apk,问题实际上是因为我使用的是发布版SHA-1 firebase控制台。

  • 如果您仍处于首次亮相模式,请使用debug.keystore SHA1
  • 如果您处于生产模式,则仅使用版本SHA1

https://developer.android.com/studio/publish/app-signing.html


4
投票

使用Google Play和Firebase的应用签名时,您需要将应用签名证书(在Google Play控制台/版本管理/应用签名证书中找到)的SHA-1指纹添加到Firebase控制台/设置/ SHA证书指纹中


4
投票

在我的情况下,SHA-1没有问题

我用GoogleAuth做了Firebase

我忘了添加implementation 'com.firebaseui:firebase-ui-auth:4.3.1'

我把自己的钥匙而不是R.string.default_web_client_id,所以这就是问题所在。我添加了上面的依赖项并用我自己的密钥替换R.string.default_web_client_id

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

3
投票

如果所有配置在firebase中都有效,例如SHA-1,并且您导入了正确的google-services.json文件仍然会出现错误,那么在firebase控制台中添加支持电子邮件

您必须在防火基础控制台中添加支持电子邮件转到项目 - >设置 - >常规 - >公共设置添加支持电子邮件


0
投票

我不确定这是否是原因,但我们可能需要在发布之前使用Android应用程序中的Web客户端ID,请阅读以下文章,

https://android-developers.googleblog.com/2016/03/registering-oauth-clients-for-google.html


0
投票

我正在处理这个问题2天!问题是我使用的clientId,是android类型,而我不得不使用Web Aplication类型Clientid。如果你有同样的问题请考虑这个;)


0
投票

在我的情况下一切都很好,但错误10仍然发生,我试图做的是“简单”我先打电话给firebase sdk,就像

private val onActivityResultGoogleCode = 1000
private lateinit var mGoogleSignInClient: GoogleSignInClient 



  private fun mAuth():FirebaseAuth{
   return FirebaseAuth.getInstance()
  }

 public override fun onStart() {
        super.onStart()

         mAuth().addAuthStateListener(mAuthState())
         if(mAuth().currentUser!=null){
        // logged
        }else{
        // You already instantiated 'FirebaseAuth.getInstance()' above SO

           val gso = GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken("Cliente_Web")
                .requestEmail()
                .build()

            mGoogleSignInClient = GoogleSignIn.getClient(this, gso)
            val signInIntent: Intent = mGoogleSignInClient.signInIntent
            rl_google_container_login.setOnClickListener {
                startActivityForResult(signInIntent, onActivityResultGoogleCode)

            }
        }       
  }

另一种解决方案是在调试模式下使用KEYSTORE。

signingConfigs{
    key{
        keyAlias 'Alias'
        keyPassword 'password'
        storeFile file('C:\\Users\\AllanRibas\\AndroidStudioProjects\\tool.jks')
        storePassword 'password'
    }
}

buildTypes {
    debug{
        signingConfig signingConfigs.key
    }
}


buildTypes {
    release {
        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        debuggable true
        useProguard true
        jniDebuggable true
    }
    debug {
        shrinkResources true
        minifyEnabled true
        proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        debuggable true
        useProguard true
        jniDebuggable true
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.