web-dev-qa-db-ja.com

Firebase Android:Googleサインインの失敗

まず第一に、私はAndroid開発に非常に慣れていないので、明らかなことを見落とした場合は許してください。

大学のプロジェクトでは、Firebaseを使用してGoogleアカウントでユーザーを最初に認証するアプリを作成する必要があります。私は最初に見つけた指示に従いました ここ

まず、貼り付けたものをコピーします Firebaseチュートリアルのこのコード 1つを除いて、すべてが機能しているようです:

_@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    Log.d(TAG, "------------------ onActivityResult ------------------");
    super.onActivityResult(requestCode, resultCode, data);

    // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
            Log.d(TAG, "------------------ googleSignInSuccess ------------------");
            // Google Sign In was successful, authenticate with Firebase
            GoogleSignInAccount account = result.getSignInAccount();
            firebaseAuthWithGoogle(account);
            // Start menu activity once the user has been logged in
            Intent intent = new Intent(this, MenuActivity.class);
            startActivity(intent);
        } else {
            Log.d(TAG, "------------------ googleSignInFailure ------------------");
            // Google Sign In failed, update UI appropriately
            // [START_EXCLUDE]
            //Log.d(TAG, result.getStatus().getStatusMessage());
            updateUI(null);
            // [END_EXCLUDE]
        }
    }
}
_

ここでは、result.isSuccess() == falseです。ですから、なんらかの理由でグーグル認証が失敗したと思います。正しいパスワードを入力したことを確認しました。アプリのFirebaseコンソールでGoogleアカウント認証も有効にしました。

よろしくお願いします。

[〜#〜] edit [〜#〜]:より正確には、エミュレータでプログラムを初めて実行したとき(または毎回実行した後)データをワイプします)、ポップアップする専用のGoogleログインアクティビティにGoogleの資格情報を入力する必要があります。これは正常に機能し、同じアクティビティで正常に認証されたようです。ただし、その後もresult.isSuccess()はfalseのままであり、その理由がわかりません。

7
Scrashdown

私はついに問題を発見しました。Firebaseコンソールでアプリを認証しているときに間違いを犯しました ここ (「始める前に」のセクション)、4番目のステップ。代わりにdebugを入力しましたが、現在は機能しています。

それでもありがとう!

11
Scrashdown

結果のステータスはresult.getStatus().getStatusMessage()で確認できます。このメッセージをログに記録するか、結果をデバッグしてください Status 問題を示しているはずです。 StatusにはgetResolution()メソッドもあり、失敗を解決するための保留中のインテントを提供します(まず、hasResolution()を呼び出して解決できるかどうかを確認し、trueを返します。それがあなたのためにそれを処理できるかどうか)。

1
pawegio

次の方法でGSOを変更してみてください:

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

お役に立てれば !

1
Karan Kanojia