首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >谷歌登录失败的com.google.android.gms.common.api.ApiException: 10:

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

Stack Overflow用户
提问于 2017-12-03 14:12:27
回答 26查看 115.4K关注 0票数 87

所以我被困在这个令人沮丧的问题上了。我对Firebase上的Google非常陌生,但是我完成了关于如何集成SignIn Auth的防火墙文档指示的所有操作,但是我仍然在控制台中收到这个奇怪的错误,其中包括两个部分:

代码语言:javascript
运行
复制
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

而且还

代码语言:javascript
运行
复制
Google sign in failed com.google.android.gms.common.api.ApiException: 10:

在任何人试图指出类似的问题之前,在堆栈溢出之前,我已经看到了所有可用的解决方案,但没有解决错误,下面是我所做的工作

  • 我有我的项目的SHA1指纹
  • 我有我的OAuth 2.0客户端ID,即android和web,而在requestIdToken()中,我将web客户端id
  • 我做了,而不是在google商店上发布了我的项目的APK。这意味着我没有意外地产生另一个SHA1指纹。
  • 我已经一步一步地遵循了谷歌的标志,在八月消防基地的文档。

下面是我的代码片段:

代码语言:javascript
运行
复制
@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]
                }
            });
}
EN

回答 26

Stack Overflow用户

回答已采纳

发布于 2017-12-03 16:20:22

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

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

有关更多信息,请参见:Generate SHA-1 for Flutter app

2)最上面的是你的消防基础项目的设置(齿轮图标右边的概述在左上角区域。然后切换到帐户链接选项卡。在该选项卡链接上,谷歌播放到你的项目。

编辑:帐户链接选项卡不再存在,而是:

  1. 登陆火场。
  2. 单击“设置”图标,然后选择“项目设置”。
  3. 单击Integrations选项卡。
  4. 在Google卡上,单击Link

票数 112
EN

Stack Overflow用户

发布于 2019-02-06 13:50:55

使用应用程序由Google Firebase 签名时,需要将应用程序签名证书的SHA-1指纹(在Google / Release / App签名证书上找到)添加到Firebase控制台/ Settings/ SHA证书指纹中

更新SHAs的位置:Google Play Console > Release > Setup > App integrity

票数 31
EN

Stack Overflow用户

发布于 2019-02-16 11:12:11

在我的例子中,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

代码语言:javascript
运行
复制
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

更新:18-2020年12月-2020年

我们也可以像下面这样在没有requestIdToken的情况下使用。为此,您必须将SHA1添加到谷歌控制台。

代码语言:javascript
运行
复制
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();
票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47619229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档