web-dev-qa-db-ja.com

Googleのサインインに失敗しましたcom.google.Android.gms.common.api.ApiException:10:

だから私はこのイライラする問題で立ち往生しています。 FirebaseでGoogle Authを使用するのは初めてですが、firesignのドキュメントでGoogle SignIn Authを統合する方法をすべて説明しましたが、コンソールで次の2つの部分からなるこの奇妙なエラーが表示されます。

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
  • not私のプロジェクトのAPKをGoogle Playストアに公開しました。これは、誤って別のSHA1指紋を生成しなかったことを意味します。
  • Google Sign in Auth firebase docsを順を追って説明しました。

ここに私のコードスニペットがあります:

@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]
                }
            });
}
31
Hudi Ilfeld

基本的に問題はコンソールに置かれたSHA1キーにあり、それを再生成し、同じプロジェクトを適切に再度入れてください。

1)回答として、実際の署名済みAndroid apkが、FirebaseプロジェクトのAndroid統合セクションのコンソールで指定したものと同じSHA1フィンガープリントを持っていることを確認してください( google-services.jsonをダウンロードできます)

2)その上で、firebaseプロジェクトの設定に移動します(左上の領域の概要の右側にある歯車アイコン。次に[アカウントリンク]タブに切り替えます。そのタブで、Google Playをプロジェクトにリンクします。

49
Dilip

私の場合、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();
4
Chirag Savsani

私は同じ問題に直面していました。指紋の再生成からFirebaseのアプリをGoogle Playコンソールにリンクし、署名されたapkを公開するまで、解決策を確認した後、問題は実際にリリースSHA-1を使用していたためですfirebaseコンソール。

  • まだデビューモードを使用している場合は、debug.keystore SHA1を使用します
  • 本番モードの場合にのみリリースSHA1を使用してください

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

4
Gomez NL

すべての設定がある場合 SHA-1などのfirebaseで有効であり、正しいgoogle-services.jsonファイルをインポートした場合でもエラーが発生しますサポートメールを追加 firebaseコンソールで

Fireベースコンソールにサポートメールを追加する必要があります。[プロジェクト]-> [設定]-> [全般]-> [パブリック設定]に移動し、サポートメールを追加します。

3

Google Playによるアプリ署名およびFirebaseを使用する場合、アプリ署名証明書のSHA-1フィンガープリントを追加する必要があります(Google Play Console /リリース管理/アプリ署名証明書にあります)Firebase Console/Settings/SHA証明書のフィンガープリント

2
Assaf S.

これが原因かどうかはわかりませんが、公開する前にAndroidアプリでWebクライアントIDを使用する必要があるかもしれません。次の記事を読んでください。

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

0
Ashwin Balani