7

Mam działającą aplikację na Androida (może lepiej powiedzieć, HAD).Problemy z OAuth2 po aktualizacji bazy Firebase

Aplikacja korzysta z bibliotek innych firm, w tym: Google maps, Firebase, firebaseui. Po konwersji aplikacji do korzystania z nowego Firebase I natknął się na dwóch głównych kwestiach:

  1. Ekran firebaseui logowania zmieniły i teraz wygląda następująco (z okna logowania okazało się działalności):

sign in screenshot

który jest oczywiście zupełnie inny od starego i z jakiegoś dziwnego powodu różny od wersji do debugowania.

  1. jestem w stanie użyć google zalogować się z powodu następującego błędu pokazując w LogCat:

com.google.firebase.FirebaseException: An internal error has occured. [ OAuth2 client id in server configuration is not found. ]

Znowu ta sprawa się nie dzieje w wariancie debugowania.

Dla jasności wariant wersji do debugowania wykorzystuje tę samą podstawę kodu, ale inną bazę danych bazy danych.

Odpowiedz

1

Dzięki nowej usłudze Firebase zmieniono wiele kodów i sposób działania.
Teraz, po skonfigurowaniu Firebase Project, daje możliwość wprowadzenia swojego AuthID, możesz pobrać JSON i wkleić go do swojej aplikacji.

Po skonfigurowaniu ClientId, możesz dodać ten kod, aby przywrócić Google Login do ponownego uruchomienia.

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(); 
} 

To działało całkowicie w porządku dla uwierzytelniania Google używając Firebase w moim app

+0

Dziękuję za odpowiedź, ale nie jest to dokładnie to, o co prosiłem. Chcę użyć biblioteki [Firebaseui] (https://github.com/firebase/FirebaseUI-Android), która ma uprościć pewne rzeczy. – CaptainNemo

+0

Próbowano implementować odpowiedź, ale otrzymuję ten sam błąd: Wystąpił błąd wewnętrzny.Nie znaleziono identyfikatora klienta OAuth2 w konfiguracji serwera. ] – CaptainNemo

+0

Czy możesz spróbować zmienić konfigurację OAuth2 w Konsoli programisty, a następnie użyć nowego identyfikatora w projekcie Firebase? Miałem ten sam problem raz i okazało się, że mój identyfikator klienta OAuth został zerwany. –

6

uzyskać następujący błąd:

com.google.firebase.FirebaseException: An internal error has occured. [ OAuth2 client id in server configuration is not found. ]

  1. Musisz najpierw przejdź do konsoli programisty Google w kategorii poświadczeń (https://console.developers.google.com/apis/credentials) znajdź automatycznie wygenerowany identyfikator klienta OAuth 2.0 o nazwie "klient sieciowy (auto crea w usłudze Google) ", zachowaj dane związane z tym identyfikatorem klienta.

  2. Przejdź do Firebase console w kategorii "Auth", a następnie przejdź do zakładki "Tryb połączenia", otwórz ustawienia autoryzacji Google i ostatecznie rozszerz ustawienia Web SDK. Wklej wcześniej znaleziony identyfikator klienta OAuth za pomocą jego klucza i zapisz ustawienia.

Zmienione ustawienie dotyczy ustawień internetowych, ale wydaje się być używane przez składnik Android Firebase.

+1

zrobiłem mój dzień !!! wspaniałe – prembhaskal

+1

wielkie dzięki ..... –