8

私は動作しているAndroidアプリを持っています(おそらくHADと言ったほうがいいでしょう)。

アプリは、Google マップ、Firebase、firebaseui などのサードパーティ ライブラリを使用しています。新しい firebase を使用するようにアプリを変換した後、2 つの主な問題に遭遇しました。

  1. firebaseui ログオン画面が変更され、次のようになりました (ログイン ダイアログからアクティビティに変わりました)。

サインインのスクリーンショット

もちろん、これは古いものとは完全に異なり、奇妙な理由でデバッグ ビルド バリアントとは異なります。

  1. logcat に次のエラーが表示され、Google サインインを使用できません。

com.google.firebase.FirebaseException: 内部エラーが発生しました。[ サーバー構成の OAuth2 クライアント ID が見つかりません。]

繰り返しますが、この問題はデバッグ バリアントでは発生していません。

明確にするために、デバッグ ビルド バリアントは同じコード ベースを使用しますが、別の firebase データベースを使用します。

4

2 に答える 2

6

次のエラーの場合:

com.google.firebase.FirebaseException: 内部エラーが発生しました。[ サーバー構成の OAuth2 クライアント ID が見つかりません。]

  1. まず、資格情報カテゴリ ( https://console.developers.google.com/apis/credentials ) でGoogle 開発者コンソールに移動し、 「Web クライアント (auto created by Google Service)」で、このクライアント ID に関連するデータを保持します。

  2. 「認証」カテゴリのFirebase コンソールに移動し、「接続モード」タブに移動して、Google 認証設定を開き、最後に Web SDK 設定を展開します。ここで、以前に見つかった OAuth クライアント ID をそのキーと共に貼り付け、設定を保存します。

変更された設定は Web 設定に関するものですが、Firebase android コンポーネントで使用されているようです。

于 2016-07-23T21:14:59.933 に答える
1

新しい Firebase により、彼らは多くのコードとやり方を変更しました。

Firebase プロジェクトをセットアップすると、AuthId を入力するオプションが表示されます。JSON をダウンロードしてアプリ内に貼り付けることができます。

ClientId を設定したら、このコードを追加して、Google ログインを再び機能させることができます。

 Button signInButton;
 //Google Variables
 private static final int RC_SIGN_IN = 9001;
 private GoogleApiClient mGoogleApiClient;

 //Firebase Variables
private FirebaseAuth mAuth;
private FirebaseAuth.AuthStateListener mAuthStateListener;

//Inside OnCreate();
//Google SignIn Methods
    // [START config_signin]
    // Configure Google Sign In
    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestIdToken(getString(R.string.default_web_client_id))
            .requestEmail()
            .build();
    // [END config_signin]

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


    mAuth = FirebaseAuth.getInstance();

    mAuthStateListener = new FirebaseAuth.AuthStateListener() {
        @Override
        public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
            FirebaseUser user = firebaseAuth.getCurrentUser();
            updateUI(user);
        }
    };

 @Override
protected void onStart() {
    super.onStart();
    mAuth.addAuthStateListener(mAuthStateListener);
    mGoogleApiClient.connect();
}


@Override
protected void onStop() {
    super.onStop();
    if(mAuthStateListener != null) {
        mAuth.removeAuthStateListener(mAuthStateListener);
    }
    mGoogleApiClient.disconnect();
}

// [START onactivityresult]
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RC_SIGN_IN) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        if (result.isSuccess()) {
            // Google Sign In was successful, authenticate with Firebase
            GoogleSignInAccount account = result.getSignInAccount();
            firebaseAuthWithGoogle(account);
        } else {
            // Google Sign In failed, update UI appropriately
            // [START_EXCLUDE]
            updateUI(null);
            // [END_EXCLUDE]
        }
    }

}
// [END onactivityresult]


private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
    AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
    mAuth.signInWithCredential(credential)
            .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
                @Override
                public void onComplete(@NonNull Task<AuthResult> task) {

                    // If sign in fails, display a message to the user. If sign in succeeds
                    // the auth state listener will be notified and logic to handle the
                    // signed in user can be handled in the listener.

                    if (!task.isSuccessful()) {
                        Toast.makeText(LoginActivity.this, "Authentication failed.",
                                Toast.LENGTH_SHORT).show();
                    }
                }
            });
}
// [END auth_with_google]

// [START signin]
private void signIn() {
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, RC_SIGN_IN);
}
// [END signin]

   private void updateUI(FirebaseUser user) {
    if (user != null) {
      //write what you want to do after login here  
    }
}


@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
    // An unresolvable error has occurred and Google APIs (including Sign-In) will not
    // be available.
    Toast.makeText(this, "Google Play Services error.", Toast.LENGTH_SHORT).show();
}

 public void GoogleSignIn(View v){
    signIn();
}


@Override
protected void onRestart() {
    super.onRestart();
    mGoogleApiClient.connect();
}

これは、アプリでFirebaseを使用したGoogle認証で完全に機能しました

于 2016-06-20T10:00:56.893 に答える